Вычисление ковариационной матрицы

Вход: случайный векторный X=xi, i=1.. n.
вектор средств для X=meanxi, i=1.. n
Вывод: Сигма ковариационной матрицы (n*n).
Вычисление:
1) найдите весь cov (кси, xj) = 1/n * (кси-meanxi) * (xj-meanxj), я, j=1.. n
2) Сигма (я, j) =cov (кси, xj), симметрическая матрица.
Этот алгоритм корректен и не имеет никаких побочных эффектов?

8
задан Vadim Kotov 10 September 2017 в 10:46
поделиться

1 ответ

Каждый xi должен быть вектором (случайной величиной) со своей дисперсией и средним.

Ковариационная матрица симметрична, поэтому вам просто нужно вычислить одну ее половину (и скопировать остальные) и имеет дисперсию xi по главной диагонали.

 S = ...// your symmetric matrix n*n
 for(int i=0; i<n;i++)
   S(i,i) = var(xi);
   for(j = i+1; j<n; j++)
     S(i,j) = cov(xi, xj);
     S(j,i) = S(i,j);
   end
 end

,где дисперсия (var) xi:

v = 0;
for(int i = 0; i<xi.Count; i++)
  v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;

и ковариация (cov)

cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))

,где r(xi, xj)Коэффициент корреляции произведения Пирсона

EDIT
или, поскольку cov(X, Y) = E(X*Y) — E(X)*E(Y)

cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);

, где .* — поэлементное умножение, подобное Matlab.
Таким образом, если x = [x1, x2], y = [y1, y2], то z = x.*y = [x1*y1, x2*y2];

4
ответ дан 6 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: