matlab - 在 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 方法有这样的缺点?
解决方案
Yule-Walker (YW) 是一种基于矩的方法。因此,随着数据点的增加,它的估计会变得更好。您可以在此示例中通过使用所有 600 个数据点来检查它,看看如果您使用了所有数据点并且 MLE 仍然会比它更好,您可以获得的“最佳”YW 估计是多少。您还可以将数据点增加到 5000 而不是 600,在这种情况下,您会看到最好的 YW(使用所有 5000 个点的那个)将开始接近 MLE 估计值。
推荐阅读
- javascript - Array.Some 必须包含至少一个填充值
- graphql - GraphQL 解析器(国家-大陆示例)
- service-worker - 为什么此 Service Worker 清单更改图标图像的请求 URL
- java - 发送键在文本框中输入前行值和新值
- javascript - 当我调整浏览器窗口窗口大小时,我的导航栏徽标组件发生变化
- fortran - 如果不支持 iso_fortran_env,在 Modern Fortran 中应该使用什么来指定一个 8 字节的实变量?
- python - 如何使用 tensorflow.keras 训练具有 4 个不同形状的辅助输出的 UNET 模型
- mysql - 参考另一个字段值以影响 MySQL w/Node.js 中的新字段值
- r - 如何修复 chol.defalt(cov) 中的错误:2 阶的前导次要不是正定的?
- c# - 当视图模型更新其绑定属性时,需要将插入符号移动到文本框的末尾