如何解决错误"对象不是矩阵"在拟合(arima_model)时构造Arima(0,0,0)白噪声

时间:2017-12-03 17:37:15

标签: r forecasting arima

所以,这里有一个可重现的例子,说明为什么会出现这个错误:

Time Series Data

data = c(48,148,284,72,48,24,48,24,48,24,24,0,96,24,48,96,72,24,96,24,48)
time = ts(data, start=c(2015,2), end=c(2016,10), frequency=12)

我正在尝试将这个时间序列构建成Arima模型,auto.arima推荐我Arima(0,0,0)到这个时间序列数据,这是白噪声,但在成功创建模型后,错误开始于我尝试提取模型的拟合值

Error in getting fitted model

model = arima(time,order=c(0,0,0))
fitted(model)

我不明白这个错误是什么意思,因为这个,我尝试使用AirPassengers的另一个时间序列数据来确保它可以得到拟合值,这里是我使用的AirPassengers数据< / p>

Data AirPassengers

Y= window(AirPassengers, start=c(1949,7), end=c(1950,10))
model2 = arima(Y, order=c(0,0,0))
fitted(model2)

然后我尝试创建相同的Arima模型并尝试获得模型的拟合值,并且它完美无缺地运行,没有任何像这样的错误

Successfully get fitted value of AirPassengers

知道了这两个例子后,我无法弄清楚为什么第一个模型在attr(数据,&#34; tsp&#34;)&lt; -c(开始,结束,频率)对象中获得错误不是矩阵, 谁能给我一个线索/解释?我有什么遗漏或这是一些错误吗?

我也注意到上面两个模型的摘要模型有点不同:

Summary Model

summary(model)
summary(model2)

感谢您注意我的问题,欢迎任何反馈:)

1 个答案:

答案 0 :(得分:1)

太糟糕了,你的问题陈述得很糟糕,因为我认为它实际上非常有趣,而且比我更了解的人应该回答它。
我现在一直在推动函数,方法和命名空间几个小时,而且我认为这是一个名称屏蔽/冲突/范围的情况。 (我不是计算机科学家,我不知道所有的单词和所有的东西)

修复很简单,您只需使用Arima()代替arima(),或直接使用auto.arima()

library(forecast)

model.ARIMA <- Arima(time, order=c(0,0,0))
fitted(model.ARIMA)

# or
fitted(auto.arima(time))

这项工作的原因是Arima()返回一个对象,其中包含原始时间序列和已包含的拟合值。 fitted()然后只返回model.ARIMA$fitted

另一方面,

arima()不包括返回对象中的拟合值,因此fitted()必须计算它们。这很简单,你只需从原始时间序列中减去残差。唯一的问题是,虽然残差包含在模型对象中,但原始时间序列不是,因此需要应用一些技巧。会发生的是fitted()调用另一个函数getResponse(),它在您的案例model.ARIMA$series中搜索环境中是否有名称包含在模型对象(time)中的对象。出现问题是因为time在创建之前已经存在,即作为函数time()。通常这不是一个问题,因为R倾向于理解何时需要变量以及何时需要该函数,例如:

c <- 4
c
c(1, c)
c <- base::c
c

getResponse()内部,评估的方式不同,但我不确定如何。

然而,课程是相同的:如果你将变量命名为与函数相同,则可能会发生奇怪的事情。