在 Python 中实现相关和相关矩阵

Implementing Correlation and Correlation matrix in Python

我想在不使用内置函数的情况下实现协方差和相关矩阵。

我的代码:

u1 = 1; u2 = 0; sigma1 = 1; sigma2 = 2; N = 1000

X = norm.rvs(u1 , sigma1,size=(1 , N))
Y= norm.rvs(u2 , sigma2,size=(1 , N))
XY =  np.concatenate((X,Y))
fact = N - 1 
cov_mat = np.dot(XY.T, XY.conj()) / fact
print(cov_mat)

结果

[[ 0.000136   -0.00045308  0.00041102 ... -0.00066916 -0.00048639
  -0.00053653]
 [-0.00045308  0.00686947  0.00272365 ...  0.00294479  0.00971417
   0.00538347]
 [ 0.00041102  0.00272365  0.0043675  ... -0.00147591  0.00471047
   0.00112446]
 ...
 [-0.00066916  0.00294479 -0.00147591 ...  0.00338792  0.00347361
   0.0031199 ]
 [-0.00048639  0.00971417  0.00471047 ...  0.00347361  0.01396131
   0.00734893]
 [-0.00053653  0.00538347  0.00112446 ...  0.0031199   0.00734893
   0.00452921]]

结果和我想的不一样。请协助。

使用np.cov(),结果为:

[[0.98423898 0.01737643]
 [0.01737643 3.8532223 ]]

谢谢。

XY 之间的 协方差矩阵 如下所示:

|  var_X  cov_XY |
| cov_XY   var_Y |

您有 var_X = E[(X - E[X])²],同样有 var_Y = E[(Y - E[Y])²],还有 cov(X, Y) = E[(X - E[X])(Y - E[Y])]cov(X, Y) 是对称的。

您可以通过以下方式测量:

>>> var_X = ((X - X.mean())**2).mean()

>>> var_Y = ((Y - Y.mean())**2).mean()

>>> cov_XY = ((X - X.mean())*(Y - Y.mean())).mean()

XY 之间的 相关矩阵 ,但是看起来像:

|   1     r_YX |
|  r_XY      1 |

其中 r_XY = cov_XY / (std_X*std_Y),这意味着 corr(X, Y)

的对称性

使用 cov_XYvar_Xvar_Y,可以从以下构造相关矩阵:

>>> corr_XY = cov_XY / np.sqrt(var_X*var_Y)