如何解决构造Arima(0,0,0) White Noise时fitted(arima_model)中的Error "object is not a matrix"

How to Solve Error "object is not a matrix" in fitted(arima_model) when constructing Arima(0,0,0) White Noise

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

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 数据

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(data, "tsp") <- c(start, end, frequency) object is not a matrix 中出错, 谁能给我一个 clue/explanation ?有什么我遗漏的或者这是一些错误吗?

我还注意到与上面 2 模型的摘要模型有点不同,如下所示:

Summary Model

summary(model)
summary(model2)

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

太糟糕了,你的问题陈述得如此糟糕,因为我认为它实际上很有趣,比我更有知识的人应该会回答它。
几个小时以来,我一直在研究函数、方法和命名空间,结果我认为是名称 masking/conflict/scoping 的情况。 (我不是计算机科学家,我不知道所有的单词和所有的东西)

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

library(forecast)

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

# or
fitted(auto.arima(time))

此工作的原因是 Arima() returns 一个包含原始时间序列和拟合值的对象。 fitted() 然后简单地 returns 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() 内部,评估是不同的,但我不完全确定如何。

然而,教训是一样的:如果您将变量命名为与函数相同的名称,就会发生奇怪的事情。