对于相同的数据,auto.arima()似乎会选择不同的模型
我在中尝试了类似于对于相同的数据,auto.arima()似乎会选择不同的模型,r,arima,R,Arima,我在中尝试了类似于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(insu
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)误差回归”
为什么这些看似等价的调用会导致选择不同的模型?请注意,
insurance[,1]
有标签,而insurance[1:40,1]
没有标签。如果您通过as.numeric(保险[,1])
您将实际收到“ARIMA(1,0,2)”。所以我打赌这与第一个参数是否有标签有关……还要注意的是,如果xreg=insurance[,2]
或xreg=insurance[1:40,2]
它们都会起作用,那么它们都会朝着正确的方向运行:insurance[,1]
是一个“时间序列”,而insurance[1:40,1]
是数字。也就是说,is.ts(保险[1])
是TRUE
但是is.ts(保险[1:40,1])
是FALSE
。forecast
包有一个保持时间序列结构的子集
函数,因此is.ts(子集(保险[,1],开始=1,结束=40))
isTRUE
和
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
包中获得?
我会等着看是否有人想回答那些“更深层次”的问题,否则我可能会接受这个答案