Вычисление ρ на самом деле включает вычисление 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)!
По оценке.Оценка максимального правдоподобия для дисперсии в основном определяется путем усреднения данных, соответствующих слагаемым в крайних правых равенствах выше.Оценка отклонения:
с x 2 = (Сумма (x i 2 ) -n * (x_bar 2 )) / n
, где n - размер выборки, а x_bar - среднее значение выборки x.(Разделите на (n-1), а не на n, если вы предпочитаете несмещенную оценку для MLE.) Учитывая взаимосвязь между дисперсией и ковариацией, указанную выше, вас не должно удивлять, обнаружив, что оценка 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)