手动实现协方差

问题描述 投票:0回答:1

今天我做了一个奇怪的观察 - 我用 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)
r statistics covariance
1个回答
0
投票

您忘记了数学表达式

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)

© www.soinside.com 2019 - 2024. All rights reserved.