我想根据过去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天)。
答案 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。