计算 Pearson 相关性避免零值

Compute Pearson correlation avoiding zero values

我有一个稀疏矩阵 A(m,n),其中 n 是变量,m 是观测值。我想计算所有 n 个变量之间的 Pearson 相关性。

我有一些遗漏的观察结果,例如如果 A(2,3) 不可用,这意味着我没有这样的观察结果,因此,例如,如果我需要计算第 3 列和第 4 列之间的相关性,我必须丢弃第 2 行,即使 A(2,4) 可用。这就是通常计算 Pearson 相关性的方式。

相反,在 MATLAB 中,函数 corrcoef() 考虑所有值,包括缺失值(被视为零)。有没有一种简单的方法可以避免这种情况?此处提供了一个非常相似的问题 Pearson Correlation without using zero element in Matlab,但提供的工作解决方案仅用于比较两个向量而不是通用矩阵 A(m,n),其中 n > 2.

Jonas's answer 关于您链接的问题,如果您概括它,也对您有用:

Col1 = 2;
Col2 = 3;
A=magic(3); A(1,1)=0;
gooddata = A(:,Col1)~=0 & A(:,Col2)~=0;
pearson = corr(A(gooddata,Col1),A(gooddata,Col2));

因此,循环将是:

for ii = 1:length(A(1,:))
    for jj = ii:length(A(1,:))
       gooddata = A(:,ii)~=0 & A(:,jj)~=0;
       pearson(ii,jj) = corr(A(gooddata,ii),A(gooddata,jj));
    end
end