Criamos um dataframe.
cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06))
cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05))
x <- rbind(cl1, cl2)
head(x, 15)
## [,1] [,2]
## [1,] 0.13375135 0.6971378
## [2,] 0.20541048 0.8368611
## [3,] 0.22413803 0.7822476
## [4,] 0.21069071 0.8065386
## [5,] 0.16208734 0.9472115
## [6,] 0.21967432 0.8603994
## [7,] 0.26449105 0.7905941
## [8,] 0.22603395 0.7638732
## [9,] 0.18815148 0.8587617
## [10,] 0.14719852 0.7820302
## [11,] 0.25773160 0.8678588
## [12,] 0.08408693 0.8364384
## [13,] 0.21277671 0.8142970
## [14,] 0.17549104 0.7722326
## [15,] 0.27795692 0.8436040
Carregamos a biblioteca.
library(apcluster)
##
## Attaching package: 'apcluster'
## The following object is masked from 'package:stats':
##
## heatmap
Aplicamos a função de Affinity Propagation.
apres <- apcluster(negDistMat(r=2), x, details=TRUE)
Verificamos o objeto criado.
show(apres)
##
## APResult object
##
## Number of samples = 150
## Number of iterations = 174
## Input preference = -0.03128545
## Sum of similarities = -0.2543353
## Sum of preferences = -0.281569
## Net similarity = -0.5359043
## Number of clusters = 9
##
## Exemplars:
## 33 37 47 69 85 102 103 104 139
## Clusters:
## Cluster 1, exemplar 33:
## 5 12 19 21 23 33 35 39 56 73 77 92 93
## Cluster 2, exemplar 37:
## 1 16 18 37 40 57 60 62 68 94 95
## Cluster 3, exemplar 47:
## 3 4 10 13 14 17 20 24 26 28 29 31 32 34 38 42 44 47 48 50 55 58 59
## 61 65 66 67 70 71 74 75 78 79 86 87 90 96 100
## Cluster 4, exemplar 69:
## 2 6 7 9 11 15 22 25 27 36 45 46 49 51 52 53 54 63 64 69 72 76 80 81
## 82 83 88 91 98
## Cluster 5, exemplar 85:
## 8 30 41 43 84 85 89 97 99
## Cluster 6, exemplar 102:
## 101 102 108 109 112 113 114 115 117 118 124 127 128 130 131 132 135
## 136 137 138 143 144 146 148 149
## Cluster 7, exemplar 103:
## 103 110 116 119 125 126 134 140 142 145
## Cluster 8, exemplar 104:
## 104 105 106 122 129 141 147 150
## Cluster 9, exemplar 139:
## 107 111 120 121 123 133 139
Resumimos os dados.
summary(apres)
## Length Class Mode
## 9 APResult S4
Plotamos o resultado.
plot(apres, x)
Criamos um mapa de calor.
heatmap(apres)
Identificamos a lista de exemplares.
apres@exemplars
## 33 37 47 69 85 102 103 104 139
## 33 37 47 69 85 102 103 104 139
Atribuimos esta lista para uma lista chamada centroides.
centroides = unique(apres@exemplars)
centroides
## [1] 33 37 47 69 85 102 103 104 139
class(centroides)
## [1] "numeric"
Criamos um data.frame que conterá as coordenada dos exemplares.
poly = data.frame()
Realizamos a iteração para povoar o data.frame.
poly = data.frame()
for (i in centroides){
centr_lat=x[i,1]
centr_lon=x[i,2]
poly = rbind(poly, c(centr_lat, centr_lon))
}
Verificamos os dados.
poly
Plotamos os clusters e adicionamos os pontos exemplares em preto.
plot(apres, x);par(new=TRUE)
points(poly[,1], poly[,2], col = "black", pch=13)