1

我正在使用以下代码在 Matlab 中计算横截面时间序列数据的 z 分数

bond_price = double(bond);
 for i = 1+period : noofdates
    zscores(i-period,:) = (bond_price(i,:) - mean(bond_price(i-period:i-1,:)))./std(bond_price(i-period:i-1,:));
end

我正在使用 period = 60 但问题是如果证券数据的数据点少于 60 个,我不想计算 z 分数。我可以在 Matlab 中使用一个函数来在循环中处理这个问题。

4

2 回答 2

2

我想你只是想要这个:

bond_price = double(bond);
for i = 1+period : noofdates
    if size(bond_price,1) >= 60
        zscores(i-period,:) = (bond_price(i,:) - mean(bond_price(i-period:i-1,:)))./std(bond_price(i-period:i-1,:));
    end    
end
于 2013-08-23T11:44:27.310 回答
1

您可以在循环中添加一条if语句来检查数据的有效性。例如

bond_price_tmp = bond_price(i-period:i-1,:);

if sum(isnan(bond_price_tmp)) > 0   %if your missing data is NaN 
    zscores(i-period,:) = NaN;
else
    zscores(i-period,:) = (bond_price(i,:) ...
end

或者

if sum(bond_price_tmp==0) > 0       %if your missing data is 0
    zscores(i-period,:) = 0;
else
    zscores(i-period,:) = (bond_price(i,:) ...
end
于 2013-08-23T11:45:31.617 回答