在 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 ]]
谢谢。
X
和 Y
之间的 协方差矩阵 如下所示:
| 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()
X
和 Y
之间的 相关矩阵 ,但是看起来像:
| 1 r_YX |
| r_XY 1 |
其中 r_XY = cov_XY / (std_X*std_Y)
,这意味着 corr(X, Y)
的对称性
使用 cov_XY
、var_X
和 var_Y
,可以从以下构造相关矩阵:
>>> corr_XY = cov_XY / np.sqrt(var_X*var_Y)
我想在不使用内置函数的情况下实现协方差和相关矩阵。
我的代码:
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 ]]
谢谢。
X
和 Y
之间的 协方差矩阵 如下所示:
| 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()
X
和 Y
之间的 相关矩阵 ,但是看起来像:
| 1 r_YX |
| r_XY 1 |
其中 r_XY = cov_XY / (std_X*std_Y)
,这意味着 corr(X, Y)
使用 cov_XY
、var_X
和 var_Y
,可以从以下构造相关矩阵:
>>> corr_XY = cov_XY / np.sqrt(var_X*var_Y)