如何用ARMA模型拟合股价时间序列?
我在MATLAB2007上建立了ARMA模型,分析股价时间序列,模型已经有了,但是不知道如何得到拟合输出时序。分析需要拟合输出图,作拟合误差分析。以下是我的程序,请高手指点。x = ;
figure(1)
plot(x);
%扩充ADF单位根检验
= ... %Augmented Dickey-Fuller unit root test based on AR model withdrift
dfARDTest(x,[],0.05,'T')
z = price2ret(x); %股价序列非平稳,一阶差分z(i) = log(x(i)/x(i-1))/(i-(i-1))
figure(2)
plot(z);
%一元线性回归,求残差residuals
X = z(1:length(z)-1,1);
Y = z(2:length(z),1);
lxx=0;
lxy=0;
for k=1:length(X)
lxx=lxx+(X(k)-mean(X))^2;
lxy=lxy+(X(k)-mean(X))*(Y(k)-mean(Y));
end
b=lxy/lxx;
a=mean(Y)-b*mean(X);
for k = 1:length(X)
Y1(k,1) = a+b*X(k); %估计值
residuals (k,1) = Y(k)-Y1(k); %残差
end
figure(3)
subplot(2,1,1)
autocorr(z); %一阶差分序列z自相关函数图MA(q),观察系数是否在区间(-2T^(1/2),-2T^(1/2))内
subplot(2,1,2)
parcorr(z); %一阶差分序列z偏相关函数图AR(p),观察系数是否在区间(-2T^(1/2),-2T^(1/2))内
%---------------------------------------------------模型定阶或识别-------------------
%扩充ADF单位根检验,检验序列z平稳性
= ... %Augmented Dickey-Fuller unit root test based on AR model withdrift
dfARDTest(z,[],0.05,'T')
%确定ARMA模型阶数,选择相关度大、下降幅度大的阶数作测试,在此选择|ACF|>0.05的阶为q,|PACF|>0.05的阶为p,邻近的阶数也参与测试
u = iddata(z);
test = [];
%p = ; %自回归对应PACF,给定滞后长度上限p和q,一般取为T/10、ln(T)或T^(1/2),这里取T/10=12
%q = ; %移动平均对应ACF
for p = 0:12 %自回归对应PACF,给定滞后长度上限p和q,一般取为T/10、ln(T)或T^(1/2),这里取T/10=12
for q = 0:12 %移动平均对应ACF
m = armax(u,)
AIC = aic(m) %armax(p,q),选择对应FPE最小,AIC值最小的模型
% = lbqtest(z, , 0.05) %Ljung-Box Q-statistic lack-of-fit hypothesis test
test = ;
end
end
for k = 1:size(test,1)
if test(k,3) == min(test(:,3)) %选择AIC值最小的模型
p_test = test(k,1)
q_test = test(k,2)
break;
end
end
%------------------------------------------模型参数估计--------------------------
m = armax(u,) %armax(p,q),对应AIC值最小
AIC = aic(m) %选择AIC值最小的模型
%----------------------------------------这段拟合程序有问题??????????????
uu = iddata([],idinput(size(z,1)));
y = sim(m,uu); %ARIMA拟合
yh = y.OutputData;
%----------------------------------------这段拟合程序有问题??????????????
%-----------------------------------------检验-------------------------------
figure(4)
e = resid(m,u); %残差分析
plot(e);
%检验残差的自相关和偏相关函数
figure(5)
subplot(2,1,1)
autocorr(e.OutputData) %一阶差分序列z自相关函数图MA(q),置信水平0.95
subplot(2,1,2)
parcorr(e.OutputData) %一阶差分序列z偏相关函数图AR(p),置信水平0.95
errors = z-yh; %误差
%errors = pe(m,u);
%perf(i) = mse(errors); %均方误差
%figure(3)
%plot(y);
%compare(data,m,1) %1步预测
figure(6)
subplot(1,2,1)
plot(u);
hold on ;
plot(y,'-.r') ;
hold off
title('拟合效果');
xlabel('采样点');ylabel('收盘价');
legend('实际值','拟合值')
subplot(1,2,2)
bar(errors);
hold off
title('拟合误差');
xlabel('采样点');ylabel('误差');
%---------------------------------------反差分-------------------------------------
figure(7);
plot(ret2price(z,x(1)));
hold on ;
plot(ret2price(yh,x(2)),'-.r') ;
hold off
title('拟合效果');
xlabel('采样点');ylabel('收盘价');
legend('实际值','拟合值')
[ 本帖最后由 songzi91 于 2008-10-17 15:15 编辑 ] 请问楼主的问题搞定没有啊? 学习......
页:
[1]