14 votos

Correlación entre matrices en R

Tengo problemas para utilizar el cor() y cor.test() funciones.

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

Cuando uso cor(matrix1, matrix2) Obtengo los coeficientes de correlación de todas las celdas. Sólo quiero un único número como resultado de cor.

Además, cuando 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 los valores p de las matrices?

Aquí encontrarás las tablas simples que quiero correlacionar:

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

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

4 votos

No está muy claro lo que quieres. Cuando dices que sólo quieres un resultado para cor(matriz1, matriz2), ¿estás intentando correlacionar (todos los números de la matriz1) con (todos los números de la matriz2)? En ese caso, podría intentar cor(as.vector(matriz1), as.vector(matriz2))

0 votos

¿Qué se espera que muestre el valor p, precisamente? (es decir, ¿qué hipótesis está probando?)

0 votos

No, sólo quiero correlacionar las dos matrices para saber cuánto se parecen. No quiero una comparación celda por celda. Sólo quiero como resultado un único número de 0 a 1, como hace cualquier correlación de Pearson utilizando dos vectores en la entrada. ¿Alguna sugerencia? El valor p que espero tiene que decirme la significación de la correlación.

15voto

Martin O'Leary Puntos 2046

Para responder a esta pregunta hay que dar primero algunas explicaciones sobre el sistema Tierra-Luna y su origen.

Dado que el campo gravitatorio de la Tierra es mucho mayor que el de la Luna, el acoplamiento sincrónico ya se ha producido para los periodos de rotación y revolución de la Luna. Esto explica que la misma cara de la Luna esté siempre inclinada hacia la Tierra. Se cree que dicha resonancia se afianzó durante la historia temprana del Sistema Solar, cuando los planetas eran más calientes y blandos.

Bajo la acción de las mareas de la Tierra, los componentes más densos del interior de la Luna se desplazaron dentro del cuerpo esférico. Cuando se alcanzó la resonancia, la distribución de la masa de la Luna se había desplazado a lo largo de un eje que apuntaba hacia la Tierra y las rocas fundidas se habían enfriado.

Se obtienen más pruebas de esta hipótesis comparando el aspecto de las superficies enfrentadas y opuestas de la Luna. El hemisferio orientado tiene un gran número de mares que son flujos de lava solidificados, mientras que el lado opuesto no tiene ninguno. La corteza, de densidad relativamente baja, es más delgada en el lado que mira a la Tierra y, por tanto, ha sido rota por material más caliente procedente del interior de la Luna en ciertas etapas de la historia de ésta. La corteza más gruesa del reverso ha impedido que esto ocurra allí.

0 votos

Usando su función obtengo este error: "Error en cor(c(matriz1), c(matriz2)) : 'x' debe ser numérico". Pero si echas un vistazo a mis tablas te das cuenta de que sólo contienen números... No entiendo

4 votos

Esta es una edición R: read.csv que probablemente hayas utilizado, devuelve un data.frame que es un no matrix . Así que hay que convertirlo en un matrix con as.matrix antes de convertirlo en un largo vector con c() y dando los resultados a cor . Aquí está en una línea: cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))

8voto

James Sutherland Puntos 2033

No has dicho nada sobre cuáles son tus datos realmente. Sin embargo...

Supongamos que 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 potencialmente interesante más estructurado es encontrar el correlaciones canónicas . Esto supone que se quiere resumir la relación entre los dos conjuntos de variables en términos de la(s) correlación(es) entre las combinaciones lineales de matrix1 columnas y combinaciones lineales de matrix2 columnas. Y querrías hacerlo si sospechas que hay un espacio de pequeña dimensionalidad, quizás incluso 1, que revelaría una estructura de correlación subyacente entre los casos que está oscurecida por su realización en los sistemas de coordenadas definidos por la variable actual. En consecuencia, el valor de esta correlación (canónica) resumiría, en cierto sentido, una relación lineal multivariante entre las dos matrices. De hecho, aunque el CCA funciona para matrices con diferentes números de variables, se reduce a la correlación de Pearson cuando cada "matriz" es una sola columna.

Aplicación

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

0 votos

Hola, gracias. Mis datos son simplemente dos matrices que contienen las mismas variables. La estructura de las dos matrices es idéntica. Los valores de cada celda son los resultados de un experimento en el que 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 en hay correlación entre las dos matrices? ¿Puedes hacer un ejemplo en R?

1 votos

Con la base R es sólo cancor(matrix1, matrix2) .

0 votos

Pero tal vez pueda aclarar un poco. Llama a matrix1 $A$ . Entonces, ¿qué es $A_{ij}$ ? ¿Es el $i$ -la respuesta de la persona a la $j$ -¿el ítem Likert? Seguramente no. Entonces, ¿dónde está la media de los participantes?

4voto

Jeff Hengesbach Puntos 1639

Si se interpreta vagamente que la correlación significa similitud, se puede utilizar una definición basada en el producto interior, como por ejemplo:

$c_{AB} = \dfrac{\langle A, B \rangle}{\|A \| ||B\|}$ donde $\langle A,B \rangle \equiv \mathrm {tr}(A B^T)$ y $\| x || \equiv \langle x,x \rangle^{1/2}$

Con sus datos, el resultado es 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 de su elección. Como no conozco la distribución de tus datos, he utilizado el producto punto para obtener 0,976.

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

1 votos

Esto parece el coeficiente rv que es lo que pedía el OP: un valor entre 0 y 1 que indica la similitud de ambas matrices.

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