我正在使用以下代码
计算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
我使用的是句号= 60 但问题是如果安全数据少于60个数据点,我不想计算z得分。我可以在Matlab中使用一个函数,它将在循环中处理这个问题。
答案 0 :(得分: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
答案 1 :(得分: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