【问题标题】:Compute Pearson correlation avoiding zero values计算 Pearson 相关性,避免零值
【发布时间】:2016-05-09 20:54:00
【问题描述】:

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

【问题讨论】:

    标签: matlab correlation pearson


    【解决方案1】:

    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=magic(3); a(1,1)=0;然后 a(~any(a,1)) 给我一个空矩阵
    • 谢谢,但它没有提供问题的解决方案:在你的示例中,当我计算 col 2 和 3 之间的相关性时,我需要所有三行,但第一行已被删除,因为零在 A(1,1)
    • 这适用于单个相关计算,我必须计算具有数千列的大矩阵的相关性,并且我正在寻找一种没有循环的简单方法
    • @Eugenio 您的目标应该始终是首先拥有功能代码,然后找出优化的地方。您不能先验假设循环解决方案最慢。
    • “过早的优化是万恶之源”——Donald Knuth
    猜你喜欢
    • 2020-02-06
    • 2011-04-26
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多