Correlación entre matrices en R

9

Tengo problemas al usar las funciones cor()y cor.test().

Solo tengo dos matrices (solo valores numéricos y el mismo número de filas y columnas) y quiero tener el número de correlación y el valor p correspondiente.

Cuando uso cor(matrix1, matrix2)obtengo los coeficientes de correlación para todas las celdas. Solo quiero un solo número como resultado de cor.

Además, cuando lo hago cor.test(matrix1, matrix2)me sale el siguiente error

Error in cor.test.default(matrix1, matrix2) : 'x' must be a numeric vector

¿Cómo puedo obtener valores p para matrices?

Encuentra las tablas simples que quiero correlacionar aquí:

http://dl.dropbox.com/u/3288659/table_exp1_offline_MEANS.csv

http://dl.dropbox.com/u/3288659/table_exp2_offline_MEANS.csv

L_T
fuente
44
No está claro lo que quieres. Cuando dice que solo quiere un resultado para cor (matriz1, matriz2), ¿está tratando de correlacionar (todos los números en matriz1) con (todos los números en matriz2)? En ese caso, puede probar cor (as.vector (matrix1), as.vector (matrix2))
Marius
¿Cuál es el valor p que se espera que muestre, precisamente? (es decir, ¿qué hipótesis está probando?)
chl
No, solo quiero correlacionar las dos matrices para saber qué tan similares son. No quiero una comparación celda por celda. Solo quiero como resultado un solo número de 0 a 1, como cada correlación de Pearson lo hace con dos vectores de entrada. ¿Cualquier sugerencia? El valor p que espero tiene que decirme la importancia de la correlación.
L_T
1
¿Quieres decir como en cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Respuestas:

12

Si simplemente desea calcular la correlación entre los dos conjuntos de valores, ignorando la estructura de la matriz, puede convertir las matrices en vectores usando c(). Entonces su correlación es calculada por cor(c(matrix1), c(matrix2)).

Martin O'Leary
fuente
Usando su función obtengo este error: "Error en cor (c (matriz1), c (matriz2)): 'x' debe ser numérico". Pero si
echas
3
Un problema R en este caso read.csv, que probablemente haya utilizado, devuelve un data.frameque no es un matrix. Por lo tanto, debe convertirlo en un matrixcon as.matrixantes de convertirlo en un vector largo con c()y dar los resultados cor. Aquí está en una línea:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
conjugateprior
5

No ha dicho nada acerca de cuáles son realmente sus datos. Sin embargo...

Suponga que sus matrices tienen columnas que representan dos conjuntos de variables (diferentes) y (el mismo número de) filas que representan casos.

Análisis de correlación canónica

En esta situación, un análisis de correlación más estructurado y potencialmente interesante es encontrar las correlaciones canónicas . Esto supone que desea resumir la relación entre los dos conjuntos de variables en términos de la correlación (es) entre combinaciones lineales de matrix1columnas y combinaciones lineales dematrix2columnas Y desearía hacerlo si sospechara que había un espacio de pequeña dimensionalidad, tal vez incluso 1, que revelaría una estructura de correlación subyacente en los casos que se ve oscurecida por su realización en los sistemas de coordenadas definidos por variables actuales. En consecuencia, el valor de esta correlación (canónica) resumiría, en cierto sentido, una relación lineal multivariada entre las dos matrices. De hecho, aunque CCA funciona para matrices con diferentes números de variables, se reduce a la correlación de Pearson cuando cada 'matriz' es solo una columna.

Implementación

El análisis de correlación canónica se describe en la mayoría de los textos de análisis multivariados, lo que quizás sea más útil si está satisfecho con el álgebra matricial hasta el análisis propio. Se implementa como cancoren la base R y también en el paquete CCA que se describe aquí .

conjugadoprior
fuente
Hola Gracias. Mis datos son simples dos matrices que contienen las mismas variables. La estructura de las dos matrices es idéntica. Los valores en cada celda son los resultados de un experimento donde esas variables se evaluaron en una escala Likert de 9 puntos y se promediaron entre los participantes. ¿Cuál es la mejor estrategia para encontrar allí es la correlación entre las dos matrices? ¿Puedes hacer un ejemplo en R?
L_T
1
Con la base R es justo cancor(matrix1, matrix2).
conjugateprior
Pero quizás puedas aclarar un poco. Llame . Entonces, ¿qué es ? ¿Es la respuesta de la -ésima persona al ítem -ésimo de Likert? Seguramente no. Entonces, ¿dónde entra el promedio sobre los participantes? matrix1 A i j i jAAijij
conjugateprior
Hola, hubo 10 participantes, tuvieron que expresar el "grado de coherencia" entre los estímulos de pares (tenga en cuenta que no es un experimento de calificación de disimilitud). Hice 2 experimentos. y quiero comparar los resultados en las 2 condiciones experimentales. Cada celda es el promedio de las evaluaciones de los 10 participantes para cada par de estímulos. Entonces, ¿debo seguir usando cancor?
L_T
Usé cancor, pero no obtengo un solo valor de coeficiente que exprese la correlación ni un valor p que exprese su significado. ¡Por favor ayuda!
L_T
3

Si interpreta libremente que la correlación significa similitud, puede usar una definición basada en el producto interno, como:

A,Btr(ABT)x| El | x,x1/2cAB=A,BA||B donde yA,Btr(ABT)x||x,x1/2

Con sus datos, esto produce 0.996672.

La alternativa, si la estructura de la matriz no es importante, es simplemente aplanar las matrices en vectores y utilizar la medida de correlación que elija. Como no conozco la distribución de sus datos, utilicé el producto punto para obtener 0.976.

De cualquier manera, parece que sus datos están altamente correlacionados.

Emre
fuente
Este parece el coeficiente rv , que es lo que pidió el OP: un valor entre 0 y 1 que indica cuán similares son ambas matrices.
llrs