关于R语言arima函数估计观测数异常的技术问询
关于R中
arima()函数nobs、n.cond与AIC对比的问题解析 问题根源
你遇到的问题核心是对arima()函数的似然估计方法和观测数统计逻辑理解偏差:
- 默认情况下,
arima()使用**全最大似然(ML)**估计,不会丢弃任何输入的观测——AR(p)模型的前p个观测会被当作初始条件纳入似然计算,而非直接丢弃,因此nobs等于你输入的观测总数,n.cond为0(代表没有固定的初始观测,全似然会估计初始条件)。 - 你预期的“丢弃前p个观测、剩余n-p个有效观测”是**条件最小二乘法(CSS)**的行为,此时
n.cond等于AR阶数p,nobs为输入观测数减去p。
AIC报错的原因是两个模型使用ML时,输入的观测总数不同(34 vs 35),导致似然计算的观测数不一致,R会阻止这种不公平的对比。
解决方案
要实现公平的AIC对比,需保证两个模型的有效观测数一致,有两种可行方式:
方式1:使用条件最小二乘法(CSS)
指定method="CSS"参数,让模型按你预期的逻辑丢弃前p个观测,确保有效观测数相同:
library(wooldridge) data(consump) gc_1 <- consump$gc_1 # AR(1):输入4-37共34条观测,CSS下有效观测数34-1=33 mod1 <- arima(gc_1[4:37], order = c(1,0,0), method = "CSS") # AR(2):输入3-37共35条观测,CSS下有效观测数35-2=33 mod2 <- arima(gc_1[3:37], order = c(2,0,0), method = "CSS") # 查看nobs和n.cond mod1$nobs # 输出33 mod1$n.cond # 输出1 mod2$nobs # 输出33 mod2$n.cond # 输出2 # 正常对比AIC AIC(mod1, mod2)
方式2:对齐输入观测范围(使用ML)
如果坚持使用ML,需让两个模型的输入观测范围完全一致,确保似然计算的观测数相同:
# 统一使用4-37共34条观测 mod1_ml <- arima(gc_1[4:37], order = c(1,0,0)) mod2_ml <- arima(gc_1[4:37], order = c(2,0,0)) # 查看nobs,均为34 mod1_ml$nobs # 34 mod2_ml$nobs # 34 # 正常对比AIC AIC(mod1_ml, mod2_ml)
补充说明
- ML和CSS的选择取决于你的分析需求:ML更适合小样本或需要估计初始条件的场景,CSS则更直观地对应“丢弃前p个观测”的逻辑。
- 对比信息准则(AIC/BIC)时,必须保证模型基于相同的观测子集拟合,否则结果没有可比性。
内容的提问来源于stack exchange,提问作者Louki
相关产品推荐
相关产品推荐

