Python
為什麼這組數據沒有協方差?
我對協方差如何工作的理解是,相關的數據應該具有較高的協方差。我遇到了一種情況,我的數據看起來相關(如散點圖所示),但協方差接近於零。如果它們是相關的,數據的協方差怎麼可能為零?
import numpy as np x1 = np.array([ 0.03551153, 0.01656052, 0.03344669, 0.02551755, 0.02344788, 0.02904475, 0.03334179, 0.02683399, 0.02966126, 0.03947681, 0.02537157, 0.03015175, 0.02206443, 0.03590149, 0.03702152, 0.02697212, 0.03777607, 0.02468797, 0.03489873, 0.02167536]) x2 = np.array([ 0.0372599 , 0.02398212, 0.03649548, 0.03145494, 0.02925334, 0.03328783, 0.03638871, 0.03196318, 0.03347346, 0.03874528, 0.03098697, 0.03357531, 0.02808358, 0.03747998, 0.03804655, 0.03213286, 0.03827639, 0.02999955, 0.0371424 , 0.0279254 ]) print np.cov(x1, x2) array([[ 3.95773132e-05, 2.59159589e-05], [ 2.59159589e-05, 1.72006225e-05]])
協方差的大小取決於數據的大小以及這些數據點散佈在該數據平均值周圍的距離。看公式很容易看出:
x1
在您的情況下,和數據的偏差x2
指向 和 的x1
平均值x2
:x1-mean(x1) [1] 0.006043341 -0.012907669 0.003978501 -0.003950639 -0.006020309 -0.000423439 0.003873601 [8] -0.002634199 0.000193071 0.010008621 -0.004096619 0.000683561 -0.007403759 0.006433301 [15] 0.007553331 -0.002496069 0.008307881 -0.004780219 0.005430541 -0.007792829 x2-mean(x2) [1] 0.0039622385 -0.0093155415 0.0031978185 -0.0018427215 -0.0040443215 -0.0000098315 [7] 0.0030910485 -0.0013344815 0.0001757985 0.0054476185 -0.0023106915 0.0002776485 [13] -0.0052140815 0.0041823185 0.0047488885 -0.0011648015 0.0049787285 -0.0032981115 [19] 0.0038447385 -0.0053722615
現在,如果將這兩個向量相乘,您顯然會得到非常小的數字:
(x1-mean(x1)) * (x2-mean(x2)) [1] 2.394516e-05 1.202419e-04 1.272252e-05 7.279927e-06 2.434807e-05 4.163041e-09 1.197349e-05 [8] 3.515290e-06 3.394159e-08 5.452315e-05 9.466023e-06 1.897897e-07 3.860380e-05 2.690611e-05 [15] 3.586993e-05 2.907425e-06 4.136268e-05 1.576570e-05 2.087901e-05 4.186512e-05
現在取總和除以你有協方差:
sum((x1-mean(x1)) * (x2-mean(x2))) / (length(x1)-1) [1] 2.591596e-05
這就是為什麼協方差的大小並不能說明如何
x1
和協變的強度x2
。通過標準化(或歸一化)協方差,即將它除以和的標準差的乘積x1
(x2
與協方差非常相似,即2.609127e-05
),你得到高相關係數,,這證實了您在情節中可以看到的內容。