R语言 如何从自回归模型中手工获得残差

fjnneemd  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(170)

我想知道如何计算残差从拟合AR模型的手。现在我可以使用stats::ar来拟合自回归模型,并通过拟合模型的$resid获得残差,但是我希望能够在给定估计的AR参数的情况下自己计算这些残差。所以我想有一个函数,它从ar模型和时间序列中获取估计的AR参数,并返回残差或去除自相关的时间序列。
我的最终目标是能够在一个数据集上估计AR系数并将其应用于另一个数据集,或者尝试从同一时间序列中删除略有不同的AR系数。
因此,例如,在这里,我希望能够通过将估计的系数应用于原始的多变量usconsumption时间序列来重现相同的ar_model$resid数据。

> library(fpp)
> ar_model <- ar(usconsumption, aic=FALSE, order.max=1)
> ar_model$ar
, , consumption

  consumption    income
1   0.3088803 0.5627686

, , income

  consumption     income
1  0.08269438 -0.2310507

> head(ar_model$resid)
         consumption     income
1970 Q1          NA         NA
1970 Q2  -0.2363646  1.0249511
1970 Q3   0.1294457  1.0084068
1970 Q4  -1.1150108 -0.9913129
1971 Q1   1.5423841  1.5613124
1971 Q2  -0.2947244  0.3983440

我尝试使用timsac::mfilter函数,但我无法得到任何接近原始ar残差的结果。

s3fp2yjn

s3fp2yjn1#

我写了这段代码来回答你的问题。它将根据ar帮助页中的公式将AR系数乘以滞后值。
不幸的是,结果并不完全正确:(我对预测值的计算与fitted(model)不同。
虽然这并没有回答你的问题,但我会把它贴在这里,以防其他用户能够发现这段代码的错误,或者把它作为完整解决方案的模板。

  • 公式 *:

x t −μ=a 1 (x t−1 −μ)++a p (x t−p −μ)+e t

library(fpp, quietly = TRUE)

# fit
model <- ar(usconsumption, aic = FALSE, order.max = 1)

# initialize
pred <- matrix(nrow = nrow(usconsumption), ncol = 2)
colnames(pred) <- colnames(usconsumption)

# predict
for (i in 2:nrow(usconsumption)) {
  pred[i, "consumption"] <- model$x.mean["consumption"] + sum((usconsumption[i-1, ] - model$x.mean) * model$ar[, ,"consumption"])
  pred[i, "income"] <- model$x.mean["income"] + sum((usconsumption[i-1, ] - model$x.mean) * model$ar[, ,"income"])
}

# compare
head(fitted(model))
#>         getResponse(object).consumption getResponse(object).income
#> 1970 Q1                              NA                         NA
#> 1970 Q2                       0.6912944                  0.7115085
#> 1970 Q3                       0.7452274                  0.3364742
#> 1970 Q4                       0.8424964                  0.6631670
#> 1971 Q1                       0.3498029                  0.4041199
#> 1971 Q2                       1.2081025                  1.0924131

head(pred)
#>      consumption    income
#> [1,]          NA        NA
#> [2,]   0.5760684 0.7801837
#> [3,]   1.2252548 0.4806877
#> [4,]   1.1345370 0.6058726
#> [5,]  -0.1613336 0.8975607
#> [6,]   1.7980539 0.5466365

创建于2023-05-22使用reprex v2.0.2

相关问题