今天我做了一个奇怪的观察 - 我用 3 种不同的方式实现了两个向量的协方差,并得到了 2 个不同的答案。在R中,方法1和2是相同的。方法 3 在数学上应该是相同的,但不知何故它返回了不同的数字。这里有什么错误?
# Make some data
set.seed(100)
n = 100
foo = rnorm(n)
bar = rnorm(n)
# method 1
cov(foo, bar)
# method 2
sum(
(foo - mean(foo)) * (bar - mean(bar))
) / (n-1)
# method 3
(
sum(foo*bar) -
mean(bar)*sum(foo) -
mean(foo)*sum(bar) +
mean(foo)*mean(bar)
) / (n-1)
您忘记了数学表达式
sum_{i=1}^n mean(foo)*mean(bar)
得出的是n*mean(foo)*mean(bar)
,而不是mean(foo)*mean(bar)
...
(sum(foo*bar) -
mean(bar)*sum(foo) -
mean(foo)*sum(bar) + n*mean(foo)*mean(bar))/(n-1)