2011-04-13 91 views
7

Quiero calcular Pearson's correlation coefficent en Matlab (sin utilizar la función corr de Matlab).Coeficiente de Pearson y cálculo de covarianza en Matlab

Simplemente, tengo dos vectores A y B (cada uno de ellos es 1x100) y estoy tratando de calcular el coeficiente de Pearson como esto:

P = cov(x, y)/std(x, 1)std(y,1) 

estoy usando cov y std funciones de MATLAB. Lo que no entiendo es, la función cov me devuelve una matriz cuadrada de esta manera:

corrAB = 
    0.8000 0.2000 
    0.2000 4.8000 

Pero espero que un solo número que la covarianza por lo que puede venir con una sola P (coeficiente de Pearson) número. ¿Cuál es el punto que me falta?

+0

Qué quiere decir 'p = cov (x, y)/sqrt (var (x) * var (y)); ¿? La diagonal debe ser 1. La diagonal fuera es lo que quieres. –

+0

tiene razón, actualicé la pregunta. ¿El "off diagonal" en el ejemplo anterior es 0.2000 y 0.2000? Entonces, ¿debería hacer otro cálculo con ellos o simplemente ir con 0.2? – Ramala

+0

En su ejemplo, 0.2 es el fuera de diagonal. Sin embargo, los 0.8 y 4.8 deberían ser 1. Entonces algo está mal con tu calc. Solo haz corr (x, y) para verificar. Lea la ayuda para entender por qué devuelve una matriz. Fue inesperado para mí la primera vez también. –

Respuesta

2

A partir de los documentos:

cov (X, Y), donde X e Y son matrices con el mismo número de elementos, es equivalente a cov ([X (:) Y (:) ]).

uso:

C = cov(X,Y); 
coeff = C(1,2)/sqrt(C(1,1) * C(2,2)) 
+0

¿La variable "coeff" es el coeficiente de Pearson? o te refieres a la covarianza? Debido a que en la fórmula del coeficiente, necesito dividir la covarianza por desviaciones estándar de X e Y. – Ramala

+0

Lo siento, significaba agregar un sqrt del denominador. editará –

10

Creo que estás confundido con la covarianza y la matriz de covarianza, y la notación matemática y entradas de la función de MATLAB se ven similares. En matemáticas, cov(x,y) significa covariance de las dos variables x y y. En MATLAB, cov(x,y) calcula el covariance matrix de x y y. Aquí cov es una función y x y y son las entradas.

Solo para hacerlo más claro, permítanme denotar la covarianza por C. cov(x,y) de MATLAB devuelve una matriz de la forma

C_xx C_xy 
C_yx C_yy 

Como RichC señaló, que necesitan las plantas fuera de las diagonales, C_xy (tenga en cuenta que C_xy=C_yx para las variables reales y xy). Una secuencia de comandos de MATLAB que le da el coeficiente de Pearson para dos variables x y y, es:

C=cov(x,y); 
p=C(2)/(std(x)*std(y)); 
Cuestiones relacionadas