Pacotes utilizados
require(ggplot2, quietly=T)
require(NbClust, quietly=T)
Neste relatório será utilizada a biblioteca Iris que corresponde a observações com relação à medida (em centímetros) de covariáveis de 3 espécies de flores. Estas covariáveis são o tamanho e comprimento das sépalas e pétalas contendo 150 observações. As espécies são a setosa, a versicolor e a virginica. Foram utilizadas como variáveis explicativas o comprimento das sépalas e pétalas.
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
dim(iris)
## [1] 150 5
Análise gráfica das observações
ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) + geom_point()
No gráfico tem-se o comprimento da pétala na abscissa e o comprimento da pétala na ordenada. Para a espécie setosa há uma boa separação das demais espécies, já para as espécies versicolor e virginica há um entrelaçamento entre as observações. Será utilizado o K-means para gerar a separação dos cluster.
Utilização do K-means nos dados da biblioteca Iris
set.seed(20165678)
iris.k <- kmeans(iris[,3:4], center=3, nstart=10)
Utilizou-se K=3, pois são 3 espécies. Como há uma boa separação entre as espécies, utilizou-se um nstart=10. Esse parâmetro indica que serão feitas 10 diferentes atribuições aleatórias para cada observação em um dos K clusters (parâmetro inicial), e será escolhido o parâmetro inicial com a menor variação dentro do cluster. Para verificar como o método separou os dados pode-se utilizar a função table.
table(iris.k$cluster,iris$Species)
##
## setosa versicolor virginica
## 1 50 0 0
## 2 0 2 46
## 3 0 48 4
Como tinha sido verificado na análise gráfica, a espécie setosa foi totalmente separada em um cluster. Porém, ocorreram erros de separação para as espécies versicolor e virginica. 48 observações da espécie versicolor foram separadas no cluster 3 e 2 observações no cluster 2. O cluster 2 pertence à espécie virginica, sendo que das 50 observações dessa espécie, 46 foram inseridas no cluster 2 e 4 no cluster 3. Para verificar quais observações foram separadas erroneamente, fez-se um gráfico comparando as observações prévias das espécies e as observações divididas em clusters.
require(gridExtra)
## Loading required package: gridExtra
plot1 <- ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) + geom_point() + ggtitle("Observações prévias")
iris.k$cluster <- as.factor(iris.k$cluster)
plot2 <- ggplot(iris, aes(Petal.Length, Petal.Width, color = iris.k$cluster)) + geom_point() +
ggtitle("Observações separadas em clusters")
grid.arrange(plot1, plot2, nrow=2)
Encontrando o K ideal
Para encontrar o K ideal para essas observações será utilizado o número de Clusters escolhidos por 26 critérios.
nc <- NbClust(iris[,3:4],
min.nc = 2, max.nc = 10,
method = "kmeans")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 10 proposed 2 as the best number of clusters
## * 8 proposed 3 as the best number of clusters
## * 1 proposed 4 as the best number of clusters
## * 4 proposed 9 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************
par(mfrow=c(1,1))
barplot(table(nc$Best.n[1,]),
xlab = "Número do Clusters",
ylab = "Frequência da escolha do k - Cluster",
main = "Número de Clusters escolhido por 26 critérios")
Verifica-se que dos 26 critérios utilizados, 10 indicam que o melhor K a ser utilizado seja o 2.