我尝试使用类似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)错误的回归”。
为什么这些看似等效的调用会导致选择的模型不同?
答案 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])
是FALSE
。 forecast
程序包具有一个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
函数?
我将等着看是否有人想回答那些“更深层次的”问题,否则我可能会接受这个答案。