83 votos

¿Cuál es la diferencia entre las funciones de R prcomp y princomp?

He comparado ?prcomp y ?princomp y encontré algo sobre el análisis de componentes principales (ACP) en modo Q y en modo R. Pero, sinceramente, no lo entiendo. ¿Alguien puede explicar la diferencia y tal vez incluso explicar cuándo aplicar cuál?

2 votos

¿Se trata de la diferencia entre las funciones prcomp y princomp en R o de la diferencia entre el "modo Q" y el "modo R PCA"? Ambas cosas no están relacionadas.

0 votos

Ha pasado un tiempo. Pero lo comprobaré en cuanto tenga tiempo. Recuerdo que tenía algunas diferencias...

59voto

sundar Puntos 2271

La diferencia entre ellos no tiene que ver con el tipo de ACP que realizan, sino con el método que utilizan. Como la página de ayuda para prcomp dice:

El cálculo se realiza mediante una descomposición de valores singulares de la matriz de datos (centrada y posiblemente escalada), no utilizando eigen en la matriz de covarianza. Este es generalmente el método preferido para la precisión numérica.

Por otro lado, el princomp página de ayuda dice:

El cálculo se realiza mediante eigen en la matriz de correlación o covarianza, como se determina en cor . Esto se hace por compatibilidad con el resultado de S-PLUS. Un método de cálculo preferido es utilizar svd en x como se hace en prcomp ."

Así que, prcomp es preferible aunque en la práctica es poco probable que vea mucha diferencia (por ejemplo, si ejecuta los ejemplos de las páginas de ayuda debería obtener resultados idénticos).

1 votos

Hay algunos detalles técnicos horripilantes sobre las diferentes rutinas subyacentes de álgebra lineal y LAPACK utilizadas en mi respuesta a ¿Por qué los componentes principales del ACP (vectores propios de la matriz de covarianza) son mutuamente ortogonales?

1 votos

Véase también ¿Por qué PCA de datos mediante SVD de los datos? para saber por qué la SVD de la matriz de datos, tal y como la aplica prcomp es el método preferido.

0 votos

Según mi experiencia, prcomp y princomp dan estimaciones ligeramente diferentes (para los vectores propios, en particular) cuando se trabaja con datos cuyos valores están muy próximos a 0 (por ejemplo, cálculos de rentabilidad para datos financieros en plazos cortos), mientras que cuando los valores de los datos son "grandes", es decir, valores no extremadamente próximos a 0, los vectores propios son casi idénticos con un número sig. de decimales.

26voto

Uri Puntos 111

Por lo general, un análisis multivariante (cálculo de correlaciones, extracción de latentes, etc.) se hace de las columnas de datos que son características o preguntas, - mientras que las unidades de la muestra, las filas, son r espondientes. De ahí que esta vía se denomine R análisis del camino. A veces, sin embargo, puede querer hacer un análisis multivariante de las respuestas, mientras que q Las preguntas se tratan como unidades de muestra. Esto sería Q análisis del camino.

No hay ninguna diferencia formal entre ambos, por lo que puede manejar ambos con la misma función, sólo transponer sus datos. Sin embargo, hay diferencias en cuestiones de normalización e interpretación de los resultados.

Esta es una respuesta general: No toco específicamente las funciones de R prcomp y princomp porque no soy usuario de R y no conozco las posibles diferencias entre ellos.

6voto

Mike Puntos 31

Una herramienta útil y específica documentación de Gregory B. Anderson , titulado PRINCIPAL COMPONENT ANALYSIS IN R AN EXAMINATION OF THE DIFFERENT FUNCTIONS AND METHODS TO PERFORM PCA ha dado más información sobre este tema. Actualizado enlace (7 de enero de 2021).

Los dos párrafos siguientes fueron extraídos de la introducción:

En R existen dos métodos generales para realizar PCA sin valores perdidos: (1) la descomposición espectral (modo R [también conocido como eigendecomposición]) y (2) la descomposición del valor singular (modo Q; R Development Core Team 2011). Ambos métodos pueden realizarse a mano utilizando las funciones eigen (modo R) y svd (modo Q), respectivamente, o pueden realizarse utilizando las numerosas funciones PCA que se encuentran en el paquete stats y otros paquetes adicionales disponibles. El método de análisis de descomposición espectral examina las covarianzas y correlaciones entre las variables, mientras que el método de descomposición del valor singular examina las covarianzas y correlaciones entre las muestras. Aunque ambos métodos pueden realizarse fácilmente en R, el método de descomposición del valor singular (es decir, el modo Q) es el análisis preferido para la precisión numérica (R Development Core Team 2011).

Este documento se centra en la comparación de los diferentes métodos para realizar PCA en R y proporciona técnicas de visualización adecuadas para examinar la normalidad dentro del paquete estadístico. Más específicamente, este documento compara seis funciones diferentes creadas o que pueden ser utilizadas para PCA: eigen, princomp, svd, prcomp, PCA y pca. A lo largo del documento, el código R esencial para realizar estas funciones está incrustado dentro del texto utilizando la fuente Courier New y está codificado por colores utilizando la técnica proporcionada en Tinn-R ( https://sourceforge.net/projects/tinn-r ). Además, los resultados de las funciones se comparan mediante un procedimiento de simulación para ver si los distintos métodos difieren en los valores propios, los vectores propios y las puntuaciones proporcionadas por la salida.

2 votos

Las respuestas son mejores cuando son independientes, porque los enlaces tienden a romperse (por ejemplo, si la página se mueve o se borra). ¿Le importaría ampliar su respuesta?

0 votos

@PatrickCoulombe, Ya se ha hecho. Gracias por tu sugerencia. Lo tendré en cuenta en el futuro.

3voto

Yanlong Li Puntos 11

Son diferentes cuando ambos utilizan la matriz de covarianza. Al escalar (normalizar) los datos de entrenamiento, prcomp utiliza $n-1$ como denominador pero princomp utiliza $n$ como su denominador. La diferencia de estos dos denominadores se explica en este tutorial sobre el análisis de componentes principales .

A continuación, los resultados de mis pruebas:

> job<-read.table("./job_perf.txt", header=TRUE, sep="")
> pc.cr<-prcomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr1<-princomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr$scale
    commun probl_solv    logical      learn   physical appearance
  5.039841   1.689540   2.000000   4.655398   3.770700   4.526689
> pc.cr1$scale
    commun probl_solv    logical      learn   physical appearance
  4.805300   1.610913   1.906925   4.438747   3.595222   4.316028

Datos de la prueba:

commun probl_solv logical learn physical appearance 12 52 20 44 48 16 12 57 25 45 50 16 12 54 21 45 50 16 13 52 21 46 51 17 14 54 24 46 51 17 22 52 25 54 58 26 22 56 26 55 58 27 17 52 21 45 52 17 15 53 24 45 53 18 23 54 23 53 57 24 25 54 23 55 58 25

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