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
r
correlation
L_T
fuente
fuente
cor(as.vector(matrix1), as.vector(matrix2))
?Respuestas:
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 porcor(c(matrix1), c(matrix2))
.fuente
read.csv
, que probablemente haya utilizado, devuelve undata.frame
que no es unmatrix
. Por lo tanto, debe convertirlo en unmatrix
conas.matrix
antes de convertirlo en un vector largo conc()
y dar los resultadoscor
. Aquí está en una línea:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
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
matrix1
columnas y combinaciones lineales dematrix2
columnas 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
cancor
en la base R y también en el paquete CCA que se describe aquí .fuente
cancor(matrix1, matrix2)
.matrix1
A i j i jSi interpreta libremente que la correlación significa similitud, puede usar una definición basada en el producto interno, como:
⟨A,B⟩≡tr(ABT)‖x| El | ≡⟨x,x⟩1/2cAB=⟨A,B⟩∥A∥||B∥ donde y⟨A,B⟩≡tr(ABT) ∥x||≡⟨x,x⟩1/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.
fuente