CorrCoef

Calcula o coeficiente de correlação de Pearson (coeficiente de correlação linear).

matrix matrix::CorrCoef(
  const bool    rowvar=true  // os vetores de observação estão dispostos em filas, caso sejam false, estão dispostos em colunas
);
 
scalar vector::CorrCoef(
  const vector&  b           // segundo vetor
);
 

Parâmetros

Parâmetros

rowvar

[in]  Sinalizador que determina a posição dos vetores na matriz para o cálculo da correlação dos pares - horizontal ou verticalmente. Por padrão rowvar é igual a true, significando que os vetores estão nas filas da matriz. Se rowvar for igual a false, então as correlações são contadas entre as colunas da matriz.

b

[in]  Segundo vetor.

Valor retornado

Valor dos coeficientes de correlação para o vetor.

Matriz quadrada de valores de coeficientes de correlação entre os vetores da matriz para a matriz. O tamanho da matriz corresponde ao número de vetores na matriz, que podem ser dispostos ao longo das linhas (rowvar=true) ou por colunas ((rowvar=false).

Observação

O coeficiente de correlação está no intervalo [-1, 1].

Devido ao arredondamento de ponto flutuante, a matriz resultante pode não ser hermitiana, os elementos diagonais podem não ser iguais a 1, e os elementos podem não satisfazer a desigualdade abs(a) <= 1. As partes reais e imaginárias são truncadas ao intervalo [-1, 1] para corrigir isto, mas isto nem sempre ajuda em casos complexos.

Algoritmo simples para calcular o coeficiente de correlação de dois vetores em 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;
     }
//--- verificação
   if(xv==0 || yv==0)
      return(0);
//--- retornamos o resultado
   return(s/(MathSqrt(xv)*MathSqrt(yv)));
  }

 

Exemplo em 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]]
   */

 

Exemplo em 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.        ]]