【问题标题】:acf returns "'lag.max' must be at least 0" and arima returns "only implemented for univariate time series" despite properly structured timeseries dataacf 返回“'lag.max' 必须至少为 0”,而 arima 返回“仅针对单变量时间序列实现”,尽管时间序列数据结构正确
【发布时间】:2021-10-04 12:04:40
【问题描述】:

我有一个如下所示的数据框:

  T1       T2       T3
1 4.693798 3.339923 1.960526
2 5.108974 4.041096 3.227176
3 4.323944 3.936614 3.755302
4 4.516129 3.859621 2.921308
5 4.210526 3.716563 3.601480
6 5.143293 4.007018 3.778689

然后我将其转换为时间序列数据结构并验证它是时间序列数据并且显示正确,如下所示:

propTS <- t(as.matrix(propDf[2:4]))
propTS <- as.ts(propTS)
is.ts(propTS)
time(propTS)

它输出:

      [,1]     [,2]     [,3]     [,4]     [,5]     [,6]
1 4.693798 5.108974 4.323944 4.516129 4.210526 5.143293
2 3.339923 4.041096 3.936614 3.859621 3.716563 4.007018
3 1.960526 3.227176 3.755302 2.921308 3.601480 3.778689

我觉得不错。但是当我执行下面的 acf 函数时,我收到错误,“acf 中的错误(propTS,na.action = na.pass):'lag.max' 必须至少为 0”:

acf(propTS, na.action=na.pass)

同样,当我尝试执行以下行时,我收到以下错误,“arima(propTS, order = c(1, 0, 0)) 中的错误:仅针对单变量时间序列实现”:

AR <- arima(propTS, order = c(1,0,0))

我检查了在线示例,我的数据结构似乎与人们用作此函数输入的其他时间序列数据一样。我尝试了各种其他解决方案来进行故障排除,但到目前为止还没有遇到解决方案。谁能确定我的输入可能有什么问题以及为什么将其解释为 not 单变量?它对我来说似乎是单变量的。我有每个人的列和数据的三个时间点。似乎是单变量的。

值得注意的是,即使生成一个 10x50 的随机数矩阵,然后通过与上述相同的过程转换为时间序列,此错误仍然存​​在。

propTS<-matrix(rnorm(100),nrow=10,ncol=50)

【问题讨论】:

    标签: r time-series arima autoregressive-models


    【解决方案1】:

    使用转置函数 t() 时可能会出现错误 我不确定你为什么这样做,但我认为你有自己的理由。

    propTS <- ts(as.matrix(df))
    acf(propTS, na.action = na.pass)
    

    发生第二个错误是因为 arima() 仅支持单变量时间序列,即只有一个变量,在这种情况下您有 3 个。您可以这样做(如果这是您想要的)。

    TS1 <- ts(df$T1)
    TS2 <- ts(df$T2)
    TS3 <- ts(df$T3)
    
    arima(TS1, order = c(1,0,0))
    arima(TS2, order = c(1,0,0))
    arima(TS2, order = c(1,0,0))
    

    acf 图如下所示:

    【讨论】:

    • 谢谢马里亚诺。我转置了它,因为我希望主题是列,时间点是行。我之前认为它是主题的行和时间点的列,但我注意到它输出我的时间点是 1 到 6(我的主题数),所以我转置了。
    • 关于 arima() 函数,我最初假设它输入了一个完整的时间序列矩阵。这个网页 (rpubs.com/JSHAH/481706) 看起来就是这样。但似乎您要说的是它接受自回归模型的向量,而不是矩阵。如果我想为每个系列执行 arima() ,我需要通过 for 循环或 apply 或其他东西迭代地执行它。我理解正确吗?
    • 绝对!循环或应用可能会起作用!还有 lapply() -> 像这样: lapply(lapply(df, ts), arima, order = c(1,0,0))
    猜你喜欢
    • 2017-08-21
    • 2017-04-20
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多