在Matlab中找到滚动的z-score

时间:2013-08-09 11:39:49

标签: matlab dataset

我想根据过去10天的标准偏差和过去10天的简单移动平均值计算横截面时间序列数据中当前点的z得分。我无法在Matlab中使用z-score功能,因为它期待计算z得分。目前我的解决方案是

for i=11:length(equity.(1))

 z(i) = (x(i)-mean(x(i-10:i))/std(x(i-10:i);

end

但问题是我想立刻为整个数据集执行此操作。有没有办法一次处理整个矩阵并计算给定回顾期间的z分数(在我的情况下为10天)。

1 个答案:

答案 0 :(得分:3)

这实际上是否更高效我不知道,但一种方式(im2col需要图像处理工具箱):

data = 1:40; %dummy data
% presuming "ten days" means day of interest + 9 days back
n = 10;
data2 = im2col(data,[1,n],'sliding');

%mean/std for each column:
dmean = mean(data2);
dstd = std(data2); 

z = (data(n:end)-dmean)./dstd;

您也可以从文件交换中尝试this