协方差矩阵计算协方差、矩阵

2023-09-11 04:38:08 作者:我的世界我主宰

输入:随机向量X =喜,I = 1..N 。 手段对于x向量= meanxi,I = 1..N 输出:协方差矩阵西格玛(N * N)。 计算: 1)找到所有的COV(XI,XJ)= 1 / N *(XI-meanxi)*(XJ-meanxj),I,J = 1 ... N 2)西格玛(I,J)= COV(XI,XJ),对称矩阵。 这是算法正确的,有没有副作用?

Input : random vector X=xi, i=1..n. vector of means for X=meanxi, i=1..n Output : covariance matrix Sigma (n*n). Computation : 1) find all cov(xi,xj)= 1/n * (xi-meanxi) * (xj-meanxj), i,j=1..n 2) Sigma(i,j)=cov(xi,xj), symmetric matrix. Is this algorithm correct and has no side-effects?

推荐答案

每个应该是与它本身的变化和平均向量(随机变量)。

Each xi should be a vector (random variable) with it's own variance and mean.

协方差矩阵是对称的,所以你只需要计算一半的它(和复制的其余部分),并具有喜的主对角线上的差异。

Covariance matrix is symmetric, so you just need to compute one half of it (and copy the rest) and has variance of xi at main diagonal.

 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

其中,xi的方差(VAR):

where variance (var) of 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(喜,XJ)是的皮尔逊积差相关系数

修改 或者,因为COV(X,Y)= E(X * Y) - E(X)* E(Y)

EDIT or, since 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] ;

where .* is Matlab-like element-wise multiplication. So if x = [x1, x2], y = [y1, y2] then z = x.*y = [x1*y1, x2*y2];