Supongamos que mat_pages [] contiene páginas en las columnas (que desea agrupar) e individuos en las filas. Puede agrupar páginas basadas en datos individuales en Rby con el siguiente comando:
pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)
La matriz de cargas es la matriz de vectores propios de la descomposición SVD de los datos. Dan el peso relativo de cada PÁGINA en el cálculo de puntajes. Las cargas con valores absolutos más grandes tienen más influencia para determinar la puntuación del componente principal correspondiente.
Sin embargo, también debo señalar la brevedad del uso de PCA para agrupar páginas. La razón de esto es que las cargas otorgan mayores pesos a las PÁGINAS con mayor variación, independientemente de si esta variación se debe realmente al contenido de la PÁGINA o por alguna otra razón (puede ser una variación técnica o individual). Las cargas no reflejan necesariamente las verdaderas diferencias entre los grupos, lo que (quizás) sea su interés principal. PERO, este agrupamiento realmente refleja las diferencias en el grupo bajo el supuesto de que todas las páginas tienen la misma variación (no sé si este es un supuesto válido).
Si tiene unas potentes instalaciones informáticas (que pueden ser posibles dado el tamaño de sus datos), puede ser una buena idea usar modelos jerárquicos. En R, se puede hacer usando el paquete lme4.
¿Qué hacer después de tener los puntajes?
Esta es una sugerencia cruda y el análisis depende en gran medida del aspecto de los datos. Además, supongo que este proceso sería muy inviable para agrupar los datos de magnitud que tiene.
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()
Con suerte, esto puede darle una idea de cómo se agrupan los datos.
Advertencia: esto no es lo que recomendaría.
Mi recomendación:
Problemas como estos surgen con frecuencia en genómica. En su caso, las páginas corresponden a genes y los individuos corresponden a pacientes (básicamente, los individuos tienen el mismo significado que en genómica)
Desea agrupar las páginas en función de los datos.
Puede usar muchos paquetes de agrupación en R y se le ha señalado en otras respuestas. Un problema fundamental con los paquetes es que hclust es cómo determinar el número de clústeres. Algunos de mis favoritos son:
- pvclust (Le da grupos y también le da un valor p para cada grupo. Usando el valor p puede determinar los grupos estadísticamente significativos. Problema : requiere mucha potencia computacional y no estoy seguro de si funcionará con los datos de su tamaño)
- hopach (le da el número estimado de grupos y los grupos)
- Hay otros paquetes disponibles en Bioconductor. Compruébelos en la vista de tareas.
También puede usar agrupaciones de algos como k-means etc. Estoy seguro de que vi un hilo en este foro sobre la agrupación. Las respuestas fueron muy detalladas. Tal Galili le preguntó si recuerdo correctamente.
Ciertamente es un problema de agrupamiento. Consulte el
cluster
paquete Rs para obtener una descripción general de las opciones de algoritmo (pam
yagnes
son las mejores opciones para comenzar; representan dos flujos principales en la agrupación: centroides y jerárquicos ).El principal problema para utilizar la agrupación en sus datos es definir una buena medida de similitud entre páginas; una simple es usar la distancia de Manhattan; un poco más complejo para contar el número de espectadores comunes y normalizarlo con, digamos, el promedio del número de espectadores de la primera y segunda página, esto debería silenciar los efectos de popularidad.
fuente
La reducción de la dimensionalidad consiste básicamente en aplicar un algoritmo de agrupamiento a los atributos (columnas). Debido a la dimensionalidad bastante grande de su conjunto de datos, puede intentar usar SOM (mapa autoorganizado / red Kohonen) para crear un mapa para individuos o páginas. Luego puede ver si son patrones significativos (interpretables).
fuente
Si hace PCA, mi consejo sería examinar brevemente otros componentes además de los dos primeros. Una vez que tenga el
prcomp
objetopc
(vea la publicación de suncoolsu), puedeplot(pc)
ver la cantidad de varianza atribuida a los diferentes componentes principales. También puede visualizar fácilmente varios (generalmente tres o cuatro) de ellos conpairs(pc$x[,1:3])
o, usandolattice
,splom(pc$x[,1:3])
.fuente