计算 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
我有一个稀疏矩阵 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