corr()与稀疏矩阵 - MATLAB

时间:2015-08-19 22:02:26

标签: matlab correlation sparse-matrix

我想知道MATLAB是否有一个工具箱可以用稀疏矩阵进行常见的矩阵运算。

使用密集矩阵,我可以计算相关图矩阵:

R = rand(10,100)
[r,p] = corr(R)

使用稀疏矩阵我很乐意:

S = sprand(10,100,.2)
[r,p] = corr(S)

但是,引发了以下错误:

Error using betainc
Inputs must be real, full, and double or single.

Error in tcdf (line 70)
    p(t) = betainc(xsq(t) ./ (v(t) + xsq(t)), 0.5, v(t)/2, 'upper') / 2;

Error in corr>pvalPearson (line 720)
    p = 2*tcdf(-abs(t),n-2);

Error in corr>corrPearson (line 321)
            pval(ltri) = pvalPearson(tail, coef(ltri), n);

Error in corr (line 204)
        [coef,pval] = corrFun(rows,tail,x);

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

Cmon ppl,让我们做一些数学!设x是随机向量。相关矩阵CORR(x_i,x_j)中的条目由下式给出:

CORR(x_i, x_j) = COV(x_i, x_j) / (SQRT(VAR(x_i)) *SQRT(VAR(x_j));

也就是说,为了构建我们的相关矩阵,我们需要协方差矩阵,它也给出了各个方差。协方差公式:COV(x) = E[x*x'] - E[x]E[x]'。然后,我们可以使用样本时刻(即E[x*x']X'*X/n)近似人口时刻mean(X)

因此以下Matlab代码:

[n, k]  = size(X);
Exxprim = full(X'*X)/n; %I'm shocked if this isn't full so let's drop sparse now 
Ex   = full(mean(X))'; %same deal
COVX = (Exxprim - Ex*Ex');
STDEVX = sqrt(diag(COVX));
CORRX = COVX ./ (STDEVX * STDEVX');

如果X'* X和mean(X)可以更有效地完成,因为X很稀疏,这可能会有所帮助。