对于独立案例来说是微不足道的。
平方根中的最后一项实际上是 X 和 Y 的协方差,即 cov(X,Y)。我只是不知道如何计算这个术语。你有什么想法?
计算 ρ 实际上涉及计算 Cov(X,Y),所以你的最后一个方程在数学上是正确的,但没有帮助。让我们直接估计协方差。
在接下来的内容中,我假设您熟悉并且相对熟悉均值、方差和协方差的定义,并了解参数与其估计量之间的区别。
首先,请记住:
σ x 2 = E[(X-μ x ) 2 ] = E[X 2 ] - E[X] 2。
相似地:
Cov(X,Y) = E[(X-μ X )(Y-μ Y )] = E[XY] - E[X]E[Y]。
请注意,事实上,这意味着方差只是协方差的一个特例,即 Var(X) = Cov(X,X)!
上估计。方差的最大似然估计量基本上是通过对与上面最右边等式中的项对应的数据进行平均来找到的。方差估计量为:
s x 2 = (Sum(x i 2 ) - n * (x_bar 2 )) / n
其中 n 是样本大小,x_bar 是 x 样本的平均值。(如果您更喜欢无偏估计量而不是 MLE,则除以 (n-1) 而不是 n。)鉴于上面指出的方差和协方差之间的关系,发现协方差的 MLE 估计量是:
c = (总和(x i * y i ) - n * x_bar * y_bar) / n
这使我们实现了您的目标:
s x+y 2 = s x 2 + s y 2 + 2 * c,
从这里你只需取平方根即可得到标准偏差。
在伪代码中:
function std_dev_sum(x_vector, y_vector):
n = x_vector.length
fail "different size vectors" unless y_vector.length == n
sum_x = sum_y = sum_x_sqr = sum_y_sqr = sum_xy = 0.0
for each index i:
x = x_vector[i]
y = y_vector[i]
sum_x += x
sum_y += y
sum_x_sqr += x * x
sum_y_sqr += y * y
sum_xy += x * y
x_bar = sum_x / n
y_bar = sum_y / n
var_x = sum_x_sqr / n - x_bar * x_bar
var_y = sum_y_sqr / n - y_bar * y_bar
cov = sum_xy / n - x_bar * y_bar
return Sqrt(var_x + var_y + 2.0 * cov)