Cómo hacer reducción de dimensionalidad en R

28

Tengo una matriz donde a (i, j) me dice cuántas veces he visto la página j individual. Hay 27K individuos y 95K páginas. Me gustaría tener un puñado de "dimensiones" o "aspectos" en el espacio de páginas que corresponderían a conjuntos de páginas que a menudo se ven juntas. Mi objetivo final es poder calcular con qué frecuencia individual he visto páginas que caen en la dimensión 1, dimensión 2, etc.

He leído la documentación de R sobre el análisis de componentes principales y la descomposición de valores únicos y he ejecutado estos comandos, pero no estoy seguro de cómo proceder.

¿Cómo puedo usar la reducción de dimensionalidad para hacer esto? ¿O es realmente un problema de agrupación y debería buscar algoritmos de agrupación?

Muchas gracias por cualquier idea ~ l

laramichaels
fuente

Respuestas:

10

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.

suncoolsu
fuente
@suncoolsu: muchas gracias! Acabo de seguir tu consejo y ejecuté prcomp. También almacené la matriz de cargas que produjo. Pero, ¿cómo puedo usar esta matriz para agrupar las páginas?
laramichaels
Hola Laramichaels, encuentra mi respuesta a continuación.
suncoolsu
@suncoolsu: Estoy lidiando con un problema similar, pero quiero "agrupar" a las personas que tienen la misma "dinámica" (en realidad tengo una gran cantidad de series de tiempo por regiones y quiero modelarlas). Estaba pensando en usar pam con la distancia de correlación (1-rho). ¿Es esta una forma recomendada? ¿Podría por favor sugerir algunos caminos para explorar?
teucer
@Musa .. ¿Puedes ser un poco más claro? No creo entender la "dinámica" mencionada por usted. Definitivamente, pam está bien para la agrupación. Pero también puede probar los paquetes R pvclust y hopach como lo mencioné. Además, los SOM (mapas autoorganizados) son una forma diferente de ver el agrupamiento. Consulte el libro de Ripley y Venable (2002) - MASS para obtener más detalles. El libro ofrece un tratamiento exhaustivo de la agrupación.
suncoolsu
@suncoolsu: ¡Perdón por la pobre formulación! Tengo 200 series de tiempo que quiero modelar (es decir, simular). Creo que puedo cluster "similares" (es decir, tienen el mismo comportamiento en el tiempo: el enfoque hacia adelante recta es el uso de la correlación) series de tiempo y simular solamente las series de tiempo de racimo ...
Teucro
4

Ciertamente es un problema de agrupamiento. Consulte el clusterpaquete Rs para obtener una descripción general de las opciones de algoritmo ( pamy agnesson 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.

(número de páginas)×(número de páginas)

jan-glx
fuente
Voté tu respuesta. Sin embargo, ¿podría proporcionar los nuevos enlaces para el informe en la última oración? El viejo está muerto.
discipulus
1
Me temo que se ha perdido para siempre ... En general, se trataba de implementaciones de métodos de agrupación que no construyen explícitamente una matriz de similitud entre sí, sino que investigan los objetos a pedido.
1

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
1

Si hace PCA, mi consejo sería examinar brevemente otros componentes además de los dos primeros. Una vez que tenga el prcompobjeto pc(vea la publicación de suncoolsu), puede plot(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 con pairs(pc$x[,1:3])o, usando lattice, splom(pc$x[,1:3]).

Laurent
fuente