29 votos

Cómo hacer la reducción de la dimensionalidad en R

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

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

¿Cómo puedo utilizar la reducción de la dimensionalidad para hacerlo? ¿O se trata realmente de un problema de clustering y debería buscar en su lugar algoritmos de clustering?

Muchas gracias por cualquier información ~l

12voto

merriam Puntos 67

Supongamos que mat_pages[] contiene páginas en las columnas (que desea agrupar) e individuos en las filas. Puede agrupar las páginas basándose en los datos individuales en Rby utilizando 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. Proporcionan el peso relativo de cada PÁGINA en el cálculo de las puntuaciones. Las cargas con valores absolutos mayores tienen más influencia en la determinación de la puntuación del componente principal correspondiente.

Sin embargo, también debo señalar la que viene de corto de utilizar el PCA para agrupar páginas. La razón es que las cargas dan mayor peso a las PÁGINAS con mayor variación, independientemente de si esta variación se debe realmente al contenido de la PÁGINA o a alguna otra razón (puede ser una variación técnica o individual). Los loadings no reflejan necesariamente las verdaderas diferencias entre los grupos, lo que (tal vez) sea su principal interés. PERO, esta agrupación refleja realmente las diferencias en el grupo bajo el supuesto de que todas las páginas tienen la misma varianza (no sé si es un supuesto válido).

Si dispone de una potente infraestructura informática (lo que puede ser posible dado el tamaño de sus datos), utilizar modelos jerárquicos puede ser una buena idea. En R, se puede hacer usando el paquete lme4.


¿Qué hacer después de tener las puntuaciones?

Se trata de una sugerencia aproximada y el análisis depende en gran medida del aspecto de los datos. Además, supongo que este proceso sería altamente inviable para agrupar los datos de la magnitud que tienes.

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()

Esperemos que esto pueda darle una idea de cómo se agrupan los datos.

Advertencia: esto no es lo que yo recomendaría.


Mi recomendación:

En su caso, las páginas corresponden a los genes y los individuos a los pacientes (básicamente, individuos tiene el mismo significado que en genómica).

Quiere agrupar las páginas en función de los datos.

Usted puede utilizar un montón de paquetes de clustering en R y se han señalado en otras respuestas. Un problema fundamental con los paquetes es como hclust es cómo determinar el número de clusters. Algunos de mis favoritos son:

  • pvclust (Le da clusters y también da un valor p para cada cluster. Utilizando el valor p puede determinar los clusters estadísticamente significativos. Problema (el sistema de gestión de la información es muy complejo: requiere mucha potencia de cálculo y no estoy seguro de que funcione con datos de tu tamaño)
  • hopach (Le da el número estimado de clusters, y los clusters)
  • hay otros paquetes disponibles en Bioconductor, por favor, compruébalos en la vista de tareas.

También puede utilizar algoritmos de agrupación como k-means, etc. Estoy seguro de haber visto un hilo en este foro sobre clustering. Las respuestas eran muy detalladas. Fue preguntado por Tal Galili si no recuerdo mal.

4voto

Sin duda, se trata de un problema de agrupación. Compruebe las Rs. cluster para obtener una visión general de las opciones del algoritmo ( pam y agnes son las mejores opciones para empezar; representan dos corrientes principales en la agrupación -- centroides y jerárquico ).
El principal problema para utilizar el clustering en sus datos es definir una buena medida de similitud entre las páginas; una simple es utilizar la distancia de Manhattan; un poco más complejo es contar el número de espectadores comunes y normalizarlo con, digamos, la media del número de espectadores de la primera y la segunda página -- esto debería silenciar los efectos de popularidad.

EDIT: Ok, ahora he visto el tamaño de los datos... probablemente hará que R explote, ya que necesita un triángulo de $(\text{number of pages})\times(\text{number of pages})$ matriz para almacenar las distancias. Comprueba esto informe para posibles soluciones.

1voto

La reducción de la dimensionalidad consiste básicamente en aplicar un algoritmo de agrupación a los atributos (columnas). Debido a la dimensionalidad bastante grande de su conjunto de datos, podría intentar utilizar SOM (mapa autoorganizado/red de Kohonen) para crear un mapa para individuos o páginas. A continuación, puede ver si hay patrones significativos (interpretables).

1voto

Alexander Gladysh Puntos 682

Si haces el PCA, mi consejo sería que revisaras brevemente otros componentes además de los dos primeros. Una vez que tenga el prcomp objeto pc (ver el post de suncoolsu), puedes plot(pc) para ver la cantidad de varianza atribuida a los diferentes componentes principales. También puede visualizar fácilmente varios (normalmente tres o cuatro) de ellos con pairs(pc$x[,1:3]) o, utilizando lattice , splom(pc$x[,1:3]) .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X