AR(1)过程长期方差Matlab模拟误区咨询
嗨,我来帮你理清这里的问题——核心是你混淆了两个容易搞混的概念: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 + 21.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

