Vamos assumir que mat_pages [] contém páginas nas colunas (que você deseja agrupar) e indivíduos nas linhas. Você pode agrupar páginas com base em dados individuais no Rby usando o seguinte comando:
pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)
A matriz loadings é a matriz de vetores próprios da decomposição SVD dos dados. Eles dão o peso relativo de cada PAGE no cálculo das pontuações. Cargas com valores absolutos maiores têm mais influência na determinação da pontuação do componente principal correspondente.
No entanto, devo destacar também a curta utilização do PCA para agrupar páginas. A razão para isso é que as cargas fornecem pesos maiores às PAGES com variação mais alta, independentemente de essa variação ser realmente devida ao conteúdo da PAGE ou a algum outro motivo (pode ser variação técnica ou individual). Os carregamentos não refletem necessariamente as verdadeiras diferenças entre os grupos, que (talvez) são seu principal interesse. MAS, esse agrupamento reflete verdadeiramente as diferenças no grupo sob a suposição de que todas as páginas têm a mesma variação (não sei se essa é uma suposição válida).
Se você possui instalações de computação poderosas (o que pode ser possível, considerando o tamanho dos dados), usar modelos hierárquicos pode ser uma boa ideia. Em R, isso pode ser feito usando o pacote lme4.
O que você faz depois de ter as pontuações?
Essa é uma sugestão grosseira e a análise depende muito da aparência dos dados. Além disso, eu acho que esse processo seria altamente inviável para agrupar os dados de magnitude que você possui.
pc.col <- paste("page", 1:27000, sep=".")
pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()
Felizmente, isso pode fornecer uma imagem de como os dados são agrupados.
Aviso: não é isso que eu recomendaria.
Minha recomendação:
Problemas como esses surgem frequentemente na genômica. No seu caso, as páginas correspondem a genes e os indivíduos correspondem a pacientes (basicamente indivíduos têm o mesmo significado que na genômica).
Você deseja agrupar as páginas com base nos dados.
Você pode usar muitos pacotes de cluster no R e foi apontado em outras respostas. Um problema fundamental dos pacotes é como hclust: como determinar o número de clusters. Alguns dos meus favoritos são:
- pvclust (fornece clusters e também fornece um valor de p para cada cluster. Usando o valor de p, você pode determinar os clusters estatisticamente significativos. Problema : requer muita energia computacional e não tenho certeza se ele funcionará com os dados de seu Tamanho)
- hopach (fornece o número estimado de clusters e os clusters)
- Se houver outros pacotes disponíveis no Bioconductor, verifique-os na visualização de tarefas.
Você também pode usar algos de cluster como k-means etc. Tenho certeza de que vi um tópico neste fórum sobre cluster. As respostas foram muito detalhadas. Tal Galili perguntou se eu me lembro corretamente.
É certamente um problema de agrupamento. Confira o
cluster
pacote Rs para obter uma visão geral das opções de algoritmos (pam
eagnes
são as melhores opções para começar; elas representam dois fluxos principais em cluster - centróides e hierárquicos ).O principal problema para usar o cluster em seus dados é definir uma boa medida de similaridade entre as páginas; o mais simples é usar a distância de Manhattan; um pouco mais complexo para contar o número de espectadores comuns e normalizá-lo com, digamos, o número de espectadores da primeira e da segunda página - isso deve silenciar os efeitos da popularidade.
fonte
A redução de dimensionalidade é basicamente a aplicação do algoritmo de clustering aos atributos (colunas). Devido à dimensionalidade bastante grande do seu conjunto de dados, você pode tentar usar o SOM (mapa auto-organizado / rede Kohonen) para criar um mapa para indivíduos ou páginas. Você pode ver se os padrões são significativos (interpretáveis).
fonte
Se você usa o PCA, meu conselho seria examinar brevemente outros componentes além dos dois primeiros. Depois de ter o
prcomp
objetopc
(consulte a publicação do suncoolsu), é possívelplot(pc)
ver a quantidade de variação atribuída aos diferentes componentes principais. Você também pode facilmente visualizar vários (geralmente três ou quatro) deles compairs(pc$x[,1:3])
ou, usandolattice
,splom(pc$x[,1:3])
.fonte