You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AR(1)过程长期方差Matlab模拟误区咨询

解析AR(1)过程长期方差计算的误区

嗨,我来帮你理清这里的问题——核心是你混淆了两个容易搞混的概念:AR(1)过程的无条件方差和长期方差(自协方差的无穷和),再加上xcorr函数的使用细节,才导致了结果的差异。

首先,明确两个关键概念的区别

你提到的理论值$1/(1-0.5^2)=1.333$,其实是AR(1)过程的无条件方差,也就是单个时刻$y_t$的方差$\gamma(0)$,公式是:
$$\gamma(0) = \frac{\sigma2}{1-\rho2}$$
而你通过累加自协方差得到的结果,对应的是长期方差(也叫谱密度在0频率处的值,或者自协方差的无穷和),公式是:
$$\sum_{k=-\infty}^{\infty}\gamma(k) = \gamma(0) + 2\sum_{k=1}^{\infty}\gamma(k)$$
对于AR(1)过程,自协方差$\gamma(k)=\rho^{|k|}\gamma(0)$,代入计算这个总和:
$$\sum_{k=-\infty}^{\infty}\gamma(k) = \gamma(0) + 2\gamma(0)\sum_{k=1}{\infty}\rhok = \frac{\sigma2}{1-\rho2} + 2*\frac{\sigma2}{1-\rho2}\frac{\rho}{1-\rho}$$
把$\rho=0.5$、$\sigma^2=1$代入,结果是$1.333 + 2
1.333*1 = 4$,和你得到的样本均值4.15非常接近(样本估计有误差很正常)。

然后看你代码里的问题

你用xcorr(Y(:,r), 'biased')计算的是有偏自协方差估计,而且返回的序列是从滞后$-(N-1)$到$+(N-1)$的(N是1000),也就是包含了负滞后和正滞后的自协方差。你用cumsum(covY,1)是从最负的滞后开始累加,直到每个对应的滞后位置,最终当累加完所有正负滞后时,得到的就是自协方差的总和——这就是为什么你的样本均值收敛到4左右,而不是1.333。

修正方案

如果你的目标是计算无条件方差(也就是你一开始误以为的“长期方差”),只需要取xcorr输出中滞后0的那个值:

for r = 1:1000
    % 获取自协方差,滞后0是中间位置
    covY = xcorr(Y(:,r), 'biased');
    unconditional_var(r) = covY(length(covY)/2 + 1); % xcorr返回的序列对称,中间为滞后0
end
mean(unconditional_var) % 这个均值会收敛到1.333左右

如果你的目标确实是计算长期方差(自协方差总和),可以直接对每条路径的自协方差求和:

long_run_var = zeros(1000,1);
for r = 1:1000
    covY = xcorr(Y(:,r), 'biased');
    long_run_var(r) = sum(covY);
end
mean(long_run_var) % 这个均值会收敛到4左右

总结一下:你之前的代码计算的是自协方差的无穷和(长期方差),而你误以为要计算的是无条件方差,这就是结果不符的原因。

内容的提问来源于stack exchange,提问作者marcellobello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:49