Skip to content

Commit

Permalink
US10 finalizada.
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyMenezes committed Mar 1, 2013
1 parent 327e4b1 commit eea45c4
Showing 1 changed file with 75 additions and 45 deletions.
120 changes: 75 additions & 45 deletions US10 - Analise Tendencia A Grupos.R
Original file line number Diff line number Diff line change
@@ -1,60 +1,90 @@
# Codigo que calcula a tendencia de agrupamento dos dados
# Andrey Menezes - versão 2.0 (Fevereiro 2013)
# Andrey Menezes - versão 2.0 (Fevereiro 2013)

dados = read.csv("dados/TabelaParaPerfis.csv")
dados = dados[,2:6]
# Tabela normalizada e com as características correlatas eliminadas
dados = read.csv("dados/TabelaParaPerfisNormal.csv")
caracteristicas = dados[,-1]

library("FNN")
# Funções para calcular a estatística de hoopkins
intervalo.confianca<-function(dados, significancia = 0.05){
tamanho = length(dados)
confianca = 1-(significancia/2)
desvio.padrao = sd(dados)
media = mean(dados)
erro <- qnorm(confianca)*desvio.padrao/sqrt(tamanho)
return(data.frame(media - erro, media + erro, media))
}

distancia = function(ponto1, ponto2){
resultado = 0
for (i in 1:ncol(ponto1)){
resultado = resultado + ((ponto1[,i] - ponto2[,i])^2)
}
resultado = sqrt(resultado)
}

ponto.mais.proximo = function(ponto, dados){
distancia = distancia(ponto, dados[1,])
for (i in 2:nrow(dados)){
d = distancia(ponto, dados[i,])
if (!(d==0) && d < distancia){
distancia = d
}
}
return(distancia)
}

hopkins = function(dados, p, objetos, minimos) {
gerar.pontos = function(dados, tamanho){
pontos = NA
for (i in 1:ncol(dados)){
sample = sample(0:100, tamanho)/100
pontos = cbind(pontos, sample)
}
pontos = pontos[,-1]
colnames(pontos) = colnames(dados)
return(pontos)

}

amostragem = function(dados, tamanho){
sample = sample(nrow(dados), tamanho)
amostra = dados[sample,]
}

hopkins = function(dados, n){
amostra = amostragem(caracteristicas, n)
novos.pontos = as.data.frame(gerar.pontos(caracteristicas, n))

amostra = sample(length(dados[,1]), size=p, replace = FALSE)
w = 0
u = 0

soma_w = 0
for(i in 1:length(amostra)) {
soma_w = soma_w + minimos[i]
for (i in 1:n){
w = w + ponto.mais.proximo(amostra[i,], dados)
u = u + ponto.mais.proximo(novos.pontos[i,], dados)
}

soma_u = 0
for(i in 1:length(objetos[,1])) {
dist = knnx.dist(as.matrix(dados),as.matrix(objetos),2,"kd_tree")
soma_u = sum(dist[,2])
}
if(soma_u > 0) {
return(soma_u/(soma_u + soma_w))
} else {return(0)}
hopkins = u/(u+w)
}

hopkins.table = data.frame()

#Calcula a menor distancia de cada linha da tabela para ser utilizado em hopkins
minimo = knn.dist(dados, k=1, algorithm="kd_tree")
stats = 0

# Monta a tabela com as estatísticas de hopkins
col=0
for(n in 1:10) {
count=0
col=col+1
for(i in 1:(length(dados)-1)) {
for(e in (i+1):length(dados)) {
if(i != e) {
objetos = data.frame(runif(25, min(dados[,i]), max(dados[,i])), runif(25, min(dados[,e]), max(dados[,e])))
parcial = hopkins(dados[,c(i,e)], 25, objetos, minimo)
if (parcial > stats) {
stats = parcial
atrib1 = i
atrib2 = e
}
count = count+1
hopkins.table[col,count] = parcial
}
hopkins.para.combinacoes = function(caracteristicas, combinacoes){
intervalos = NA
for (i in 1:ncol(combinacoes)){
valores = 0
for (j in 1:50){
valor = hopkins(caracteristicas[combinacoes[,i],], 10)
valores = c(valores, valor)
}
valores = valores[2:length(valores)]
ic = intervalo.confianca(valores)

intervalos = rbind(intervalos, data.frame(Atributos=paste(colnames(caracteristicas[combinacoes[,i]]),collapse="+"),
Hopkins=ic))
}

intervalos = intervalos[-1,]
}
#

colnames(hopkins.table) = c("1_2", "1_3", "1_4", "1_5", "2_3", "2_4", "2_5", "3_4", "3_5", "4_5")
combinacoes = combn(ncol(caracteristicas),3)

png(filename="BoxSplot Tendencia Agrupamento.png")
boxplot(hopkins.table)
dev.off()
intervalos = hopkins.para.combinacoes(caracteristicas, combinacoes)

0 comments on commit eea45c4

Please sign in to comment.