0

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

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

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

end

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

4

1 回答 1

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;

您也可以从文件交换中尝试此操作。

于 2013-08-09T12:53:15.923 回答