Usando o pacote de estatísticas em R para agrupar kmeans


10

Estou tendo dificuldades para entender um ou dois aspectos do pacote de cluster. Estou seguindo o exemplo do Quick-R de perto, mas não entendo um ou dois aspectos da análise. Eu incluí o código que estou usando para este exemplo em particular.

## Libraries
library(stats)
library(fpc) 

## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846, 
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0, 
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613, 
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996, 
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857, 
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871, 
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424, 
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583, 
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964, 
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037, 
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835, 
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943, 
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559, 
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855, 
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587, 
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0, 
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828, 
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267, 
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119, 
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886, 
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i"), row.names = c(NA, -19L), class = "data.frame")

Então eu padronizo as variáveis:

# standardize variables
mydata <- scale(mydata) 

## K-means Clustering 

# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, centers=i)$withinss)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters",  ylab="Within groups sum of squares") 

# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution

# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean)

# append cluster assignment
mydata <- data.frame(mydata, cluster = fit$cluster)

# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2

# Centroid Plot against 1st 2 discriminant functions
plotcluster(mydata, fit$cluster)

Minha pergunta é: como o gráfico que mostra o número de clusters (marcado Q1no meu código) pode ser relacionado aos valores reais (número do cluster e nome da variável)?

Atualização: Agora entendo que a clusplot()função é uma plotagem bivariada, com PCA1 e PCA2. No entanto, não entendo o link entre os componentes do PCA e os grupos de clusters. Qual é o relacionamento entre os valores do PCA e os grupos de armazenamento em cluster? Eu li em outro lugar sobre o link entre kmeans e PCA, mas ainda não entendo como eles podem ser exibidos no mesmo gráfico bivariado.


desculpas se eu fiz muitas perguntas sobre cluster nos últimos dias. Eu estou tentando tornar-se mais familiarizados com o campo rapidamente (também eu postei esta pergunta em SO, stackoverflow.com/questions/4997870/... mas foi sugerido para movê-lo aqui)
celenius

Tudo bem, isso não é TCS.SE (-;

# Determine o número de clusters Você poderia explicar por que estamos usando esta fórmula (meus dados, 2, var) e por que 2:15?

Respostas:


8

Não compreendi completamente a pergunta 1, mas tentarei responder. O gráfico de Q1 mostra como a soma dos quadrados (wss) muda conforme o número do cluster é alterado. Nesse tipo de plotagem, você deve procurar as dobras no gráfico; uma dobra em 5 indica que é uma boa ideia usar 5 clusters.

O WSS tem um relacionamento com suas variáveis ​​no seguinte sentido, a fórmula para o WSS é

jxiCj||xiμj||2

onde é o ponto médio do cluster e é a ésima observação. cluster j como . O WSS às vezes é interpretado como "quão semelhantes são os pontos dentro de cada cluster". Essa semelhança se refere às variáveis. j x i i C jμjjxiiCj

A resposta para a pergunta 2 é esta. O que você está realmente assistindo clusplot()é o gráfico de suas observações no plano principal. O que essa função está fazendo é calcular a pontuação do componente principal de cada uma das suas observações, plotando essas pontuações e colorindo por cluster.

A análise de componentes principais (PCA) é uma técnica de redução de dimensão; "resume" as informações de todas as variáveis ​​em um par de "novas" variáveis ​​chamadas componentes. Cada componente é responsável por explicar determinada porcentagem da variabilidade total. No exemplo, você lê "Estes dois componentes explicam 73,95% da variabilidade total".

A função clusplot()é usada para identificar a eficácia do armazenamento em cluster. Caso você tenha um cluster bem-sucedido, verá que os clusters estão claramente separados no plano principal. Por outro lado, você verá os clusters mesclados no plano principal quando o cluster não tiver êxito.

Para referência adicional na análise de componentes principais, você pode ler o wiki. se você quer um livro, sugiro Técnicas Multivariadas Modernas de Izenmann, lá você encontrará PCA e k-means.

Espero que isto ajude :)


11
Obrigado pela sua resposta. Eu tinha mais uma pergunta sobre a clusplot()função. Qual é o relacionamento entre os valores do PCA e os grupos de armazenamento em cluster? Eu li em outro lugar sobre o link entre kmeans e PCA, mas ainda não entendo como eles podem ser exibidos no mesmo gráfico bivariado. (Talvez essa deva ser uma nova pergunta).
celenius

2
Na verdade, os valores do PCA e os grupos de armazenamento em cluster são independentes. O PCA cria "novas" coordenadas para cada observação mydata, é o que você realmente vê no gráfico. A forma dos pontos é plotada usando fit$clustero segundo parâmetro de clusplot(). Talvez você deva dar uma olhada mais profunda no PCA. Deixe-me saber se isso ajudou ou se você faz outras referências.
deps_stats

11
Ajuda (no sentido em que estou aprimorando meu problema!). Como está fit$clusterrelacionado às "coordenadas" do PCA? Eu acho que entendo como o PCA funciona, mas como eu entendo, cada componente não pode ser explicado usando variáveis ​​dos dados originais (é uma combinação linear dos dados brutos), e é por isso que não entendo como isso pode ser relacionados aos clusters.
celenius 22/02

2
Você quase entendeu :) fit$clusternão tem relação com o PCA. O que clusplot()faz é plotar os pontos usando as "novas" coordenadas e rotulá-los usando fit$cluster. Obtive '+' para o cluster 3, 'o' para o cluster 1 e um triângulo para o cluster 2. A função clusplot()é útil para visualizar o cluster.
deps_stats

11
Pelas "novas" coordenadas quero dizer PCA1 e PCA2. Você está certo, eles são completamente alheios a fit$cluster:)
deps_stats
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.