【问题标题】:Time series modelling with irregular data使用不规则数据进行时间序列建模
【发布时间】:2011-11-18 09:50:34
【问题描述】:

我目前正在从事一个宠物项目,以根据历史基础油价格预测未来的基础油价格。数据是每周一次,但在这之间的某些时期价格缺失。

我对使用完整数据建模时间序列有点没问题,但是当涉及到不规则的时间序列时,我学到的模型可能不适用。我是否使用 xts 类并以通常的方式在 R 中处理 ARIMA 模型?

在建立预测未来价格的模型后,我想考虑原油价格波动、柴油利润率、汽车销量、经济增长等因素(多变量?)以提高准确性。有人可以阐明我如何以有效的方式做到这一点吗?在我看来,它就像一个迷宫。

编辑:在此处修剪数据:https://docs.google.com/document/d/18pt4ulTpaVWQhVKn9XJHhQjvKwNI9uQystLL4WYinrY/edit

编码:

Mod.fit<-arima(Y,order =c(3,2,6), method ="ML")

结果: 警告信息: 在 log(s2) 中:产生了 NaNs

此警告会影响我的模型准确性吗?

由于缺少数据,我无法使用 ACF 和 PACF。有没有更好的选择模型的方法?我使用 AIC(Akaike 的信息标准)来比较使用此代码的不同 ARIMA 模型。ARIMA(3,2,6) 给出了最小的 AIC。

编码:

AIC<-matrix(0,6,6)
for(p in 0:5)
for(q in 0:5)
{
mod.fit<-arima(Y,order=c(p,2,q))
AIC[p+1,q+1]<-mod.fit$aic
p
}
AIC

结果:

              [,1]     [,2]     [,3]     [,4]     [,5]     [,6] 
    [1,] 1396.913 1328.481 1327.896 1328.350 1326.057 1325.063 
    [2,] 1343.925 1326.862 1328.321 1328.644 1325.239 1318.282 
    [3,] 1334.642 1328.013 1330.005 1327.304 1326.882 1314.239 
    [4,] 1336.393 1329.954 1324.114 1322.136 1323.567 1316.150 
    [5,] 1319.137 1321.030 1320.575 1321.287 1323.750 1316.815 
    [6,] 1321.135 1322.634 1320.115 1323.670 1325.649 1318.015

【问题讨论】:

  • 欢迎来到 SO。发布一些数据总是一个好主意,因为展示几行代码来展示您已经尝试过的内容。请参阅stackoverflow.com/q/5963269/602276,了解有关编写好问题的一些提示。
  • 谢谢安德烈。感谢您的建议。我会尽快贴出代码。
  • @Andrie 我已经用编码和修剪数据更新了这个问题。你能看一下吗?谢谢!我在正确的轨道上吗?

标签: r modeling time-series forecasting


【解决方案1】:

不,通常您不需要使用 xts 然后执行 ARIMA,这需要一个额外的步骤。记录为NA 的缺失值由arima() 处理,如果使用method = "ML",则它们将被准确处理;其他方法可能无法获得缺失数据的创新。这是因为arima() 在状态空间表示中拟合了 ARIMA 模型。

如果数据正常但有缺失数据,那么上面的应该没问题。

我说一般不使用 xts 的原因只是 arima() 需要一个单变量时间序列对象 ?ts 作为其输入。但是,xts 扩展和继承自 zoo 对象,zoo 包确实 为对象提供了as.ts() 方法班级"zoo"。因此,如果您将数据放入zoo() 或xts() 对象中,则可以强制转换为"ts" 类,并且应在适当的位置包含NA,然后arima() 将在可以处理的情况下处理(即没有太多的缺失值)。

【讨论】:

  • 感谢您的建议!它非常简洁明了。我像你说的那样使用了arima(),但它返回了一个警告。它会影响模型本身吗?此外,由于 ACF 和 PACF 无法工作,还有哪些其他替代方法可以为我的数据选择 ARIMA 模型?
  • 那么为什么不应该将 xts 与 arima() 一起使用呢?从您的回答中,我了解到 xts 或 zoo 可以根据需要强制使用 as.ts() 。
  • @NathanGould 只是,正如我在上面解释的那样,需要额外的步骤才能获得所需的 `arima()1。也许最后一段中缺少“需要”。
  • @GavinSimpson 预测中的 Arima() 如何处理系列中的一些 NA 值。如果我使用 xts obejct 作为输入 Arima() 会有问题吗?
猜你喜欢
  • 2021-01-08
  • 2016-01-27
  • 2012-05-12
  • 1970-01-01
  • 2011-06-16
  • 2019-03-18
  • 1970-01-01
  • 2011-04-23
  • 2019-11-03
相关资源
最近更新 更多