CorrCoef

Calcula el coeficiente de correlación de Pearson (coeficiente de correlación lineal).

matrix matrix::CorrCoef(
  const bool    rowvar=true  // los vectores de observaciones están ubicados en la filas, con false, en las columnas
);
 
scalar vector::CorrCoef(
  const vector&  b           // segundo vector
);
 

Parámetros

Parámetros

rowvar

[in]  Bandera que define la posición de los vectores en la matriz para calcular la correlación por pares, horizontal o verticalmente. Por defecto rowvar es true, esto significa que los vectores estarán en las filas de la matriz. Si rowvar es false, las correlaciones se contarán entre las columnas de la matriz.

b

[in]  Segundo vector.

Valor retornado

Valor de los coeficientes de correlación para un vector.

Matriz cuadrada de los valores de los coeficientes de correlación entre los vectores para una matriz. El tamaño de la matriz se corresponde con el número de vectores de la matriz que pueden disponerse en las filas (rowvar=true) o en las columnas ((rowvar=false).

Observación

El coeficiente de correlación estará en el rango [-1, 1].

Debido al redondeo del número con coma flotante, la matriz resultante podría no ser hermitiana, los elementos diagonales podrían no ser iguales a 1, y los elementos podrían no cumplir la desigualdad abs(a) <= 1. Las partes real e imaginaria se truncan hasta el intervalo [-1, 1] para solucionar esto, pero no siempre resulta de ayuda en los casos complejos.

Aquí vemos un algoritmo simple para calcular el coeficiente de correlación de dos vectores en MQL5:

double VectorCorrelation(const vectorvector_x,const vectorvector_y)
  {
   ulong n=vector_x.Size()<vector_y.Size() ? vector_x.Size() : vector_y.Size();
   if(n<=1)
      return(0);
 
   ulong  i;
   double xmean=0;
   double ymean=0;
   for(i=0i<ni++)
     {
      if(!MathIsValidNumber(vector_x[i]))
         return(0);
      if(!MathIsValidNumber(vector_y[i]))
         return(0);
      xmean+=vector_x[i];
      ymean+=vector_y[i];
     }
   xmean/=(double)n;
   ymean/=(double)n;
 
   double s=0;
   double xv=0;
   double yv=0;
   double t1=0;
   double t2=0;
//--- cálculo
   s=0;
   for(i=0i<ni++)
     {
      t1=vector_x[i]-xmean;
      t2=vector_y[i]-ymean;
      xv+=t1*t1;
      yv+=t2*t2;
      s+=t1*t2;
     }
//--- comprobación
   if(xv==0 || yv==0)
      return(0);
//--- retornamos el resultado
   return(s/(MathSqrt(xv)*MathSqrt(yv)));
  }

 

Ejemplo en MQL5:

   vectorf vector_a={1,2,3,4,5};
   vectorf vector_b={0,1,0.5,2,2.5};
   Print("vectors correlation ",vector_a.CorrCoef(vector_b));
//---
   matrixf matrix_a={{1,2,3,4,5},
                    {0,1,0.5,2,2.5}};
   Print("matrix rows correlation\n",matrix_a.CorrCoef());
   matrixf matrix_a2=matrix_a.Transpose();
   Print("transposed matrix cols correlation\n",matrix_a2.CorrCoef(false));
   matrixf matrix_a3={{1.0f2.0f3.0f4.0f5.0f},
                      {0.0f1.0f0.5f2.0f2.5f},
                      {0.1f1.0f2.0f1.0f0.3f}};
   Print("rows correlation\n",matrix_a3.CorrCoef());
   Print("cols correlation\n",matrix_a3.CorrCoef(false));
 
  /*
   vectors correlation 0.9149913787841797
   matrix rows correlation
   [[1,0.91499138]
    [0.91499138,1]]
   transposed matrix cols correlation
   [[1,0.91499138]
    [0.91499138,1]]
   rows correlation
   [[1,0.91499138,0.08474271]
    [0.91499138,1,-0.17123166]
    [0.08474271,-0.17123166,1]]
   cols correlation
   [[1,0.99587059,0.85375023,0.91129309,0.83773589]
    [0.99587059,1,0.80295509,0.94491106,0.88385159]
    [0.85375023,0.80295509,1,0.56362146,0.43088508]
    [0.91129309,0.94491106,0.56362146,1,0.98827404]
    [0.83773589,0.88385159,0.43088508,0.98827404,1]]
   */

 

Ejemplo en Python:

import numpy as np
va=[1,2,3,4,5]
vb=[0,1,0.5,2,2.5]
print("vectors correlation")
print(np.corrcoef(va,vb))
 
ma=np.zeros((2,5))
ma[0,:]=va
ma[1,:]=vb
print("matrix rows correlation")
print(np.corrcoef(ma))
print("transposed matrix cols correlation")
print(np.corrcoef(np.transpose(ma),rowvar=False))
print("")
 
ma1=[[1,2,3,4,5],[0,1,0.5,2,2.5],[0.1,1,0.2,1,0.3]]
print("rows correlation\n",np.corrcoef(ma1))
print("cols correlation\n",np.corrcoef(ma1,rowvar=False))
 
transposed matrix cols correlation
[[1.         0.91499142]
 [0.91499142 1.        ]]
 
rows correlation
 [[1.         0.91499142 0.1424941 ]
 [0.91499142 1.         0.39657517]
 [0.1424941  0.39657517 1.        ]]
cols correlation
 [[1.         0.99587059 0.98226063 0.91129318 0.83773586]
 [0.99587059 1.         0.99522839 0.94491118 0.88385151]
 [0.98226063 0.99522839 1.         0.97234063 0.92527551]
 [0.91129318 0.94491118 0.97234063 1.         0.98827406]
 [0.83773586 0.88385151 0.92527551 0.98827406 1.        ]]