auto.arima()在给定相同数据的情况下似乎选择了不同的模型

时间:2019-02-07 21:07:53

标签: r arima

我尝试使用类似https://otexts.com/fpp2/lagged-predictors.html中的auto.arima示例的方法,并注意到根据是否显式指定(所有)数据行,我得到不同的结果。 MWE:

library(forecast); library(fpp2)
nrow(insurance)
auto.arima(insurance[,1], xreg=insurance[,2], stationary=TRUE)
auto.arima(insurance[1:40,1], xreg=insurance[1:40,2], stationary=TRUE)

nrow(insurance)显示有40行,因此我认为insurance[,1]insurance[1:40,1]相同,第二列也类似。但是,第一种方法导致“具有ARIMA(3,0,0)错误的回归”,而第二种方法导致“具有ARIMA(1,0,2)错误的回归”。

为什么这些看似等效的调用会导致选择的模型不同?

2 个答案:

答案 0 :(得分:1)

请注意,insurance[,1]有标签,而insurance[1:40,1]没有标签。如果您通过as.numeric(insurance[,1]),您实际上会收到“ ARIMA(1,0,2)”。因此,我敢打赌,它与第一个参数是否带有标签有关...也请注意,xreg=insurance[,2]xreg=insurance[1:40,2]都可以起作用

答案 1 :(得分:0)

科里在正确的方向上微调了我:insurance[,1]是一个“时间序列”,而insurance[1:40,1]是一个数字。也就是说,is.ts(insurance[,1])TRUE,而is.ts(insurance[1:40,1])FALSEforecast程序包具有一个subset函数,该函数保留了时间序列结构,因此is.ts(subset(insurance[,1],start=1,end=40))TRUE并且

auto.arima(subset(insurance[,1],start=1,end=40), 
           xreg=subset(insurance[,2],start=1,end=40), stationary=TRUE)

与我的问题的第一个版本(使用insurance[,1]insurance[,2])输出相同的结果。

尽管我不明白,但我认为这至少可以从表面上解释“为什么” 1)为什么时间序列结构会在这里更改结果(因为所选模型似乎没有任何季节性?),以及 2)为什么在链接的示例中,Hyndman使用insurance[4:40,1]包中的subset()而不是他自己的forecast函数? 我将等着看是否有人想回答那些“更深层次的”问题,否则我可能会接受这个答案。