【问题标题】:Form a loop for (i, j, k) where i,j and k lies in [0,5] in R 3.4.4 version为 (i, j, k) 形成一个循环,其中 i,j 和 k 在 R 3.4.4 版本中位于 [0,5] 中
【发布时间】:2018-05-18 17:18:22
【问题描述】:

我尝试的输出是创建一个 (i, j, k) 的循环,其中 i 和 k 从 [0, 3] 中获取值 [0, 5] 和 j。循环将在以下值上运行:

(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)
(0, 0, 5)
(0, 1, 0)
(0, 1, 1)
(0, 1, 2)
.
.
.
(5, 3, 5)

基本上我想运行 arima (p, d, q) 模型制作循环并从那里提取 RMSE 值。

我试过的arima代码是,

fit <- arima(df.train$Positive, order=c(0, 0, 0),include.mean = FALSE)
S <- as.data.frame(summary(fit))
S$RMSE

“S$RMSE”给出了 RMSE 值。 但请帮我运行“order= c(i, j, k)”的循环并自动获取此 RMSE 值。

我想要的结果是最后cbind这两个,做一个像,

Order      RMSE
(0, 0, 0)  xxxx
(0, 0, 1)  xxxx
(0, 0 ,2)  xxxx

【问题讨论】:

  • 你试过什么?您是否要发布reproducible example 以便其他人可以试验数据集?同时,尝试使用applyMARGIN = 1 循环遍历expand.grid(i = 0:5, j = 0:3, k = 0:5) 的行
  • 我想了解如何在创建 fit 的变量中编写循环。我对循环等概念很陌生。休息我不认为数据在这里很重要。我的数据虽然看起来像:Year- (2015, 2014, ...) Positive- (19904, 19815, ...)

标签: r loops arima


【解决方案1】:

如果无法访问您的数据,就无法测试以下代码是否能解决您的问题。

尝试使用apply 函数循环使用expand.gridijk 定义的矩阵行:

param_data <- expand.grid(i = 0:5, j = 0:3, k = 0:5)

param_data2 <- cbind(param_data, 
      apply(param_data, 1,
      FUN = function(x){
        fit <- arima(df.train$Positive, 
                     order = x,
                     include.mean = FALSE)
        S <- as.data.frame(summary(fit))
        S$RMSE
      })
)

【讨论】:

  • 显示错误“包装期间出错:来自 CSS 的非固定 AR 部分”。
【解决方案2】:

这不能回答您的确切问题,但是我相信您可能会使用 forecast 包中的 auto.arima 函数,它可以单独估计最佳 ARIMA 模型。

您也可以在那里设置最大(p,q,d) 值。

丑陋但简单的解决方案 - 我会使用三重循环:

order <- c()
RMSEs <- c()
for (i in 1:5) {
  for (j in 1:5) {
    for (k in 1:5) {
      order_temp <- sprintf('(%s, %s, %s)', i, j, k)
      order <- c(order, order_temp)
      fit <- arima(df.train$Positive, order=c(i, j, k),include.mean = FALSE)
      S <- as.data.frame(summary(fit))
      RMSEs <- c(RMSEs, S$RMSE)
    }
  }
}
result <- as.data.frame(order)
result$RMSE <- RMSEs

【讨论】:

  • 嗨@johnnyheineken,我想比较为(p,d,q)的所有组合生成的RMSE结果。所以 auto.arima 不会给出那个。
  • arima(df.train$Positive, order = c(i, j, k), include.mean = FALSE) 中的错误:来自 CSS 的非固定 AR 部分此外:警告消息:在arima(df.train$Positive, order = c(i, j, k), include.mean = FALSE) : 可能的收敛问题: optim given code = 1 给出这个结果。不知道为什么他们单独工作而不是在循环中。
【解决方案3】:

正在使用的代码,

Demo <- read.csv("C:/UsersMP.csv", header = TRUE)
Dem <- data.frame(Demo)
smp_size <- floor(0.95 * nrow(Dem))
df.train <- Dem[1:smp_size, ]
df.test <- Dem[(smp_size+1):nrow(Dem), ]
fit <- arima(df.train$Positive, order=c(0, 0, 0),include.mean = FALSE)
S1 <- as.data.frame(summary(fit))
S1$RMSE
fit1 <- arima(df.train$Positive, order=c(0, 0, 1),include.mean = FALSE)
S2 <- as.data.frame(summary(fit))
S2$RMSE
fit2 <- arima(df.train$Positive, order=c(0, 0, 2),include.mean = FALSE)
S3 <- as.data.frame(summary(fit))
S3$RMSE

它在这方面工作正常。我只是想避免重复这个任务并形成一个(i,j,k)的循环。

【讨论】:

    【解决方案4】:

    数据举例

    set.seed(1)
    df.train = data.frame("Month/Year" = paste0(month.abb,"/",rep(12:18,each=12)), Positive = rnorm(84,5000,1500))
    head(df.train)
      Month.Year Positive
    1     Jan/12 4060.319
    2     Feb/12 5275.465
    3     Mar/12 3746.557
    4     Apr/12 7392.921
    5     May/12 5494.262
    6     Jun/12 3769.297
    

    arima 模型的阶数(p,I,q)

    library(gtools)
    param = permutations(n=6,r=3,v=0:5,repeats.allowed=T)
    param = cbind(param[param[,2] <= 3,],0)
    colnames(param) <- c("p","I","q","RMSE")
    param
    

    计算调整后的有马模型的RMSE的函数

    library(forecast)
    RMSE = function(param){
      for(i in 1:nrow(param)){
      s <-data.frame(summary(Arima(df.train$Positive, order=param[i,1:3],include.mean = FALSE, method = "ML")));
      param[i,4] <- s$RMSE
      }
      return(param)
      }
    

    结果

    result = RMSE(param)
    head(result)
         p I q     RMSE
    [1,] 0 0 0 5308.368
    [2,] 0 0 1 3536.816
    [3,] 0 0 2 2820.933
    [4,] 0 0 3 2555.799
    [5,] 0 0 4 2438.050
    [6,] 0 0 5 2151.455
    

    注意:对于这种情况,根据 RMSE 的标准,最佳模型是 ARIMA (4,1,5)

    result[which(result[,4] == min(result[,4])),]
          p       I       q    RMSE 
       4.00    1.00    5.00 1226.28
    

    【讨论】:

    • 收到此错误,“param[i, 4] 中的错误
    • 这一行基本清除了环境。我已经运行了这一行并再次尝试了整个代码。报同样的错误
    • 运行这行代码remove(list = ls())。现在再次复制所有代码,然后运行代码。加载包library(forecast)在bucle中使用函数Arima小心放Arima大写A的预测并再次运行所有
    • 对于某些数据,“solve.default(res$hessian * n.used, A) 中的错误:Lapack 例程 dgesv:系统完全是奇异的:U[1,1] = 0”->这个错误来了。谁能在这里回答为什么会这样?
    • 创建一个关于该问题的新问题,并尽可能添加您正在使用的数据或示例。
    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多