【问题标题】:weighted correlation for case of matrix矩阵情况的加权相关
【发布时间】:2014-03-17 00:06:24
【问题描述】:

我对如何计算矩阵的加权相关性有疑问,从维基百科我创建了以下三个代码

1.加权平均计算

function [y]= weighted_mean(x,w);
n=length(x);
%assume that weight vector and input vector have same length
sum=0.0;
sum_weight=0.0;
 for i=1:n
    sum=sum+ x(i)*w(i);
    sum_weight=sum_weight+w(i);
 end
y=sum/sum_weight;
end

2.加权协方差

function result=cov_weighted(x,y,w)
n=length(x);
sum_covar=0.0;
sum_weight=0;
 for i=1:n
     sum_covar=sum_covar+w(i)*(x(i)-weighted_mean(x,w))*(y(i)-weighted_mean(y,w));
     sum_weight=sum_weight+w(i);
 end
 result=sum_covar/sum_weight;
end

最后是加权相关

3.

function corr_weight=weighted_correlation(x,y,w);
corr_weight=cov_weighted(x,y,w)/sqrt(cov_weighted(x,x,w)*cov_weighted(y,y,w));
end

现在我想对矩阵应用加权相关方法,与此链接相关

http://www.mathworks.com/matlabcentral/fileexchange/20846-weighted-correlation-matrix/content/weightedcorrs.m

我不明白如何申请,这就是为什么我创造了我自己,但在输入的情况下需要矩阵,非常感谢

【问题讨论】:

    标签: matlab matrix statistics covariance correlation


    【解决方案1】:

    @dato-datuashvili 也许我提供的信息太多...

    1) 我想强调的是,加权相关矩阵的评估非常少见。发生这种情况是因为您必须事先提供权重。除非您有明确的理由选择权重,否则没有明确的方法可以提供它们。

    您如何判断样品的测量值是否比另一次测量值更重要?

    话虽如此,权重由您决定!你必须选择它们!

    因此,人们通常只考虑相关矩阵(没有权重或所有权重都相同,例如 w_i=1)。

    如果你有明确的方法来选择好的权重,就不要考虑这部分了。

    2) 我了解到您想测试您的代码。所以,为了做到这一点,你必须有相关的随机变量。如何生成它们?

    多元正态分布是最简单的情况。请参阅有关它们的维基百科页面:Multivariate Normal Distribution(请参阅项目“从分布中绘制值”。维基百科向您展示了如何使用 Choleski 分解从该分布中生成随机数)。 2变量的情况要简单得多。例如见Generate Correlated Normal Random Variables

    好消息是,如果您使用的是 Matlab,那么有一个功能适合您。见Matlab: Random numbers from the multivariate normal distribution。]

    为了使用此函数,您必须提供所需的均值和协方差。 [请注意,您在这里扮演自然的角色。您正在生成数据!在现实生活中,您要将您的功能应用于真实数据。我想说的是,这一步只对测试有用。此外,请注意在 Matlab 函数中您提供方差并评估相关性(由标准误差归一化的协方差)这一事实。在二维情况下(即您的函数的情况,可以直接提供相关性。请参阅上面我提供给您的 Math.Stackexchange 页面]

    3) 最后,您可以将它们应用到您的函数中。从正态多元分布生成 X 和 Y,并将权重向量 w 提供给您的函数 corr_weight_correlation,您就完成了!

    希望我能提供你所需要的!

    丹尼尔

    更新:

    % From the matlab page
    mu = [2 3];
    SIGMA = [1 1.5; 1.5 3];
    n=100;
    [x,y] = mvnrnd(mu,SIGMA,n);
    % Using your code
    w=ones(n,1);
    corr_weight=weighted_correlation(x,y,w); % Remember that Sigma is covariance and Corr_weight is correlation. In order to calculate the same thing, just use result=cov_weighted instead.
    

    【讨论】:

    • 但它是在一维数据的情况下,对吗?如果我的 x 和 y 是矩阵?
    • @dato-datuashvili x 和 y 是一维的,但要生成它们,您必须使用二维正态分布!正是mathworks.com/help/stats/mvnrnd.html 的第一个例子。在此示例中,您的符号中为 r=[x,y],您的符号中为 case=n。
    • 好的,谢谢,如果我有一些具体的问题,我会发布它
    • @dato-datuashvili 当然!我明天会在这里。巴西现在快凌晨 3 点了。我在上面包含了一个更新,只是为了帮助其他人。但是,我无法测试,因为我家里没有matlab。
    • 好的,谢谢,没问题,在格鲁吉亚现在是白天,所以我们下次可以讨论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2012-11-04
    • 1970-01-01
    • 2012-10-01
    • 2018-01-18
    相关资源
    最近更新 更多