-
Notifications
You must be signed in to change notification settings - Fork 0
/
US10 - Analise Tendencia A Grupos.R
90 lines (74 loc) · 2.3 KB
/
US10 - Analise Tendencia A Grupos.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Codigo que calcula a tendencia de agrupamento dos dados
# Andrey Menezes - versão 2.0 (Fevereiro 2013)
# Tabela normalizada e com as características correlatas eliminadas
dados = read.csv("dados/TabelaParaPerfisNormal.csv")
caracteristicas = dados[,-1]
# 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)
}
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))
w = 0
u = 0
for (i in 1:n){
w = w + ponto.mais.proximo(amostra[i,], dados)
u = u + ponto.mais.proximo(novos.pontos[i,], dados)
}
hopkins = u/(u+w)
}
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,]
}
#
combinacoes = combn(ncol(caracteristicas),3)
intervalos = hopkins.para.combinacoes(caracteristicas, combinacoes)