首页 > 解决方案 > 在 MATLAB 中估计 AR 模型系数时的不一致

问题描述

我正在尝试估计 AR[2] 模型的系数

x(t) = a_1*x(t-1) + a_2*x(t-2) + e(t), e(t) ~ N(0, sigma^2)

在 MATLAB 中。对于a_1 = 2*cos(2*pi/T)*exp(-1/tau), a_2 = -exp(-2/tau),AR[2] 模型对应于具有周期 T 和弛豫时间 的线性阻尼振荡器tau。我模拟了这个过程的一些数据,T = 30它们tau = 100对应于a_1 = 1.9368, a_2 = -0.9802

T = 30; tau = 100;
a_1 = 2*cos(2*pi/T)*exp(-1/tau); a_2 = -exp(-2/tau);

simuMdl = arima(2,0,0);
simuMdl.Constant = 0;
simuMdl.Variance = 1e-1;
simuMdl.AR{1} = a_1;
simuMdl.AR{2} = a_2;

data = simulate(simuMdl, 600);
data = data(501:end);
plot(data)

链接到模拟数据图

我只取最后 100 个时间点来确保系统不再受初始条件的影响。现在,当尝试估计参数时estimate,使用使用最大似然估计的命令时一切正常:

ToEstMdl = arima(2,0,0); ToEstMdl.Constant = 0;
EstMdl = estimate(ToEstMdl, data);
EstMdl.AR
%'[1.9319]    [-0.9745]'

但是,当我使用 中实现的 Yule-Walker-Equations 时aryule,我得到一个完全不同的结果,它根本不匹配真正的参数值:

aryule(data, 2)
%'1.0000   -1.4645    0.5255'

有谁知道为什么 Yule-Walker 方程对 MLE 方法有这样的缺点?

标签: matlabautoregressive-models

解决方案


Yule-Walker (YW) 是一种基于矩的方法。因此,随着数据点的增加,它的估计会变得更好。您可以在此示例中通过使用所有 600 个数据点来检查它,看看如果您使用了所有数据点并且 MLE 仍然会比它更好,您可以获得的“最佳”YW 估计是多少。您还可以将数据点增加到 5000 而不是 600,在这种情况下,您会看到最好的 YW(使用所有 5000 个点的那个)将开始接近 MLE 估计值。


推荐阅读