主要内容

本页采用了机器翻译。点击此处可查看英文原文。

在命令行中辨识时间序列模型

本示例演示了如何仿真时间序列,并使用参数法和非参数法来估计和比较时间序列模型。

生成模型并仿真模型输出

通过创建并仿真形式为 yk=a1yk-1+a2yk-2+ek 的自回归 (AR) 多项式模型 ts_orig 来生成时间序列数据,其中 ek 表示高斯随机噪声。该噪声代表了模型中一个未测量的输入。由于该模型是时间序列模型,因此不存在观测输入。

在计算 ek 之前,请初始化随机数生成器的种子,以确保噪声值具有可重复性。

ts_orig = idpoly([1 -1.75 0.9]);
rng('default')
e = idinput(300,'rgs');

仿真该模型的观测输出 y_obs,并将 y_obs 转换为默认采样时间为一秒的 iddata 对象 y。将模型输出结果与输入噪声一起绘制成图。

y_obs = sim(ts_orig,e); 
y = iddata(y_obs);

plot(e)
hold on
plot(y_obs)
title('Input Noise and Original Model Output')
legend('RGS Noise','Model Output')
hold off

Figure contains an axes object. The axes object with title Input Noise and Original Model Output contains 2 objects of type line. These objects represent RGS Noise, Model Output.

估计模型并比较频谱

函数 etfespa 提供了两种用于进行谱分析的非参数方法。将 etfespa 得出的估计功率谱与原始模型进行比较。

ts_etfe = etfe(y);
ts_spa = spa(y);
spectrum(ts_etfe,ts_spa,ts_orig);
legend('ts_{etfe}','ts_{spa}','ts_{orig}')

MATLAB figure

现在,使用 AR 结构估计一个参数模型。估计一个二阶 AR 模型,并将其频谱与原始模型和 spa 估计值进行比较。

ts_ar = ar(y,2);
spectrum(ts_spa,ts_ar,ts_orig);
legend('ts_{spa}', 'ts_{ar}', 'ts_{orig}')

MATLAB figure

与非参数模型相比,AR 模型的频谱与原始模型的频谱吻合得更为紧密。

协方差的估计与比较

通过将每个模型的输出与其自身进行卷积,计算原始模型和 AR 模型的协方差函数。

ir_orig = sim(ts_orig,[1;zeros(24,1)]);
Ry_orig = conv(ir_orig,ir_orig(25:-1:1));
ir_ar = sim(ts_ar,[1;zeros(24,1)]);
Ry_ar = conv(ir_ar,ir_ar(25:-1:1));

此外,利用 xcorr 直接从观测到的输出 y 估计协方差 Ry

Ry = xcorr(y.y,24,'biased');

绘制原始协方差和估计协方差的绘图,并进行比较。

plot((-24:24)',[Ry_orig,Ry_ar,Ry]);
legend('Ry_{orig}', 'Ry_{ar}', 'Ry')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Ry_{orig}, Ry_{ar}, Ry.

估计的 AR 模型的协方差 Ry_ar 更接近原始协方差 Ry_orig

预测和比较模型输出结果

使用函数 compare,比较原始模型和 AR 模型的三步预测精度(或拟合百分比)。在此,compare 利用原始模型输出数据 y 计算 ts_origts_ar 模型的预测响应,假设未测量的输入 ek 为零。第四个参量 3 表示预测的步数。

compare(y,ts_orig,ts_ar,3);

MATLAB figure

图例中的百分比是拟合百分比,代表拟合优度。即使是原始模型,其预测准确率也远未达到 100%,因为预测过程中未将未测量的模型输入 ek 考虑在内。估计的 AR 模型的拟合值与原始模型接近,这表明该 AR 模型是一个良好的估计。

另请参阅

| | |

主题