【问题标题】:calculate the correlation between a several time series计算几个时间序列之间的相关性
【发布时间】:2012-07-19 16:28:09
【问题描述】:

如果我有一个矩阵:

data = rand(365,5);

计算每列与其余列的平均值之间的相关性最合适的方法是什么。例如,对于第一列:

  R = nonzeros(tril(corrcoef(data(:,1),mean(data(:,2:end)')'),-1));

我怎样才能重复这个过程,以便我有 5 个相关值,即每个系列?

编辑:

感谢 cmets。这也可以在一行中完成:

R = arrayfun(@(x)nonzeros(tril(corrcoef(data(:,x),...
    mean(data(:,setdiff(1:size(data,2),x))')'),-1)),1:size(data,2));

对于那些希望避免循环的人。尽管在这种情况下,下面显示的方法由于其可读性而更好。

【问题讨论】:

  • corrcoef(data) 不起作用吗?它应该返回一个 5x5 矩阵,其中包含所有可能的列组合之间的相关性。
  • 它确实可以满足我的需要。我想计算每列与其他列的平均值之间的相关性,而不是每列之间的相关性

标签: matlab correlation


【解决方案1】:
for i=1:5
    x = data(:,i);
    y = mean(data(:,(1:5) ~= i)')';
    R(i) = nonzeros(tril(corrcoef(x,y),-1));
end

【讨论】:

    【解决方案2】:

    稍微简化的版本:

    R = zeros(1,5);
    for i=1:5
        x = data(:,i);
        y = mean(data(:,(1:5)~=i), 2);
        R(i) = corr(x,y);
    end
    

    【讨论】:

    • 非常感谢。也可以通过使用上面显示的方法避免循环(编辑)
    • @Kate:你并没有真正避免循环,ARRAYFUN 基本上隐藏了一个循环。更不用说这更具可读性..
    猜你喜欢
    • 2022-01-20
    • 2015-01-22
    • 2019-11-03
    • 1970-01-01
    • 2022-08-19
    • 2018-11-17
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多