代码之家  ›  专栏  ›  技术社区  ›  Davide Lorino

仅从forecast()[重复]中提取预测值

  •  0
  • Davide Lorino  · 技术社区  · 8 年前

    这个问题已经有了答案:

    我有一个这样的数据框架:

    > head(forecasts)
    $`1_1`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.370299 7.335176 7.405422 7.316583 7.424015
    
    $`1_10`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.396656 7.359845 7.433467 7.340359 7.452953
    
    $`1_2`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.780033 7.752462 7.807605 7.737866 7.822201
    
    $`1_3`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.216894 7.178896 7.254892 7.158781 7.275007
    
    $`1_4`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.501195 7.465049 7.537341 7.445915 7.556475
    
    $`1_5`
             Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    Dec 2016       7.455131 7.424918 7.485345 7.408924 7.501339
    

    我只想提取 Point Forecast

    呼叫 str(forecasts) 返回大量输出,这只是“预测”变量中89个列表之一的输出:

    $ 9_9  :List of 10
      ..$ method   : chr "ARIMA(0,0,0)(0,1,0)[12] with drift"
      ..$ model    :List of 19
      .. ..$ coef     : Named num 0.00965
      .. .. ..- attr(*, "names")= chr "drift"
      .. ..$ sigma2   : num 0.0047
      .. ..$ var.coef : num [1, 1] 1.24e-06
      .. .. ..- attr(*, "dimnames")=List of 2
      .. .. .. ..$ : chr "drift"
      .. .. .. ..$ : chr "drift"
      .. ..$ mask     : logi TRUE
      .. ..$ loglik   : num 33.4
      .. ..$ aic      : num -62.7
      .. ..$ arma     : int [1:7] 0 0 0 0 12 0 1
      .. ..$ residuals: Time-Series [1:38] from 2014 to 2017: 0.00546 0.00583 0.006 0.00564 0.00563 ...
      .. ..$ call     : language .f(y = .x[[i]], x = list(x = c(5.4677292870219, 5.85045765518954, 6.02852764863892, 5.67941181324485,  5.67526620| __truncated__ ...
      .. ..$ series   : chr ".x[[i]]"
      .. ..$ code     : int 0
      .. ..$ n.cond   : int 0
      .. ..$ nobs     : int 26
      .. ..$ model    :List of 10
      .. .. ..$ phi  : num(0) 
      .. .. ..$ theta: num(0) 
      .. .. ..$ Delta: num [1:12] 0 0 0 0 0 0 0 0 0 0 ...
      .. .. ..$ Z    : num [1:13] 1 0 0 0 0 0 0 0 0 0 ...
      .. .. ..$ a    : num [1:13] 0.0677 5.6916 5.7073 5.692 5.7108 ...
      .. .. ..$ P    : num [1:13, 1:13] 0 0 0 0 0 0 0 0 0 0 ...
      .. .. ..$ T    : num [1:13, 1:13] 0 1 0 0 0 0 0 0 0 0 ...
      .. .. ..$ V    : num [1:13, 1:13] 1 0 0 0 0 0 0 0 0 0 ...
      .. .. ..$ h    : num 0
      .. .. ..$ Pn   : num [1:13, 1:13] 1 0 0 0 0 0 0 0 0 0 ...
      .. ..$ xreg     : int [1:38, 1] 1 2 3 4 5 6 7 8 9 10 ...
      .. .. ..- attr(*, "dimnames")=List of 2
      .. .. .. ..$ : NULL
      .. .. .. ..$ : chr "drift"
      .. ..$ bic      : num -60.2
      .. ..$ aicc     : num -62.2
      .. ..$ x        : Time-Series [1:38] from 2014 to 2017: 5.47 5.85 6.03 5.68 5.68 ...
      .. ..$ fitted   : Time-Series [1:38] from 2014 to 2017: 5.46 5.84 6.02 5.67 5.67 ...
      .. ..- attr(*, "class")= chr [1:2] "ARIMA" "Arima"
      ..$ level    : num [1:2] 80 95
      ..$ mean     : Time-Series [1:1] from 2017 to 2017: 6.32
      ..$ lower    : Time-Series [1, 1:2] from 2017 to 2017: 6.23 6.18
      .. ..- attr(*, "dimnames")=List of 2
      .. .. ..$ : NULL
      .. .. ..$ : chr [1:2] "80%" "95%"
      ..$ upper    : Time-Series [1, 1:2] from 2017 to 2017: 6.4 6.45
      .. ..- attr(*, "dimnames")=List of 2
      .. .. ..$ : NULL
      .. .. ..$ : chr [1:2] "80%" "95%"
      ..$ x        : Time-Series [1:38] from 2014 to 2017: 5.47 5.85 6.03 5.68 5.68 ...
      ..$ series   : chr ".x[[i]]"
      ..$ fitted   : Time-Series [1:38] from 2014 to 2017: 5.46 5.84 6.02 5.67 5.67 ...
      ..$ residuals: Time-Series [1:38] from 2014 to 2017: 0.00546 0.00583 0.006 0.00564 0.00563 ...
      ..- attr(*, "class")= chr "forecast"
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   akrun    8 年前

    我们可以从 list 使用 lapply

    lapply(forecasts, function(x) as.numeric(x$mean, na.rm = TRUE)))
    

    如果所有列表元素中的预测数相同,则可以将其转换为 matrix data.frame

    sapply(forecasts, `[[`, "mean")
    

    或者使用 tidyverse

    library(tidyverse)
    forecasts %>% 
          map_df(~ .x$mean %>% 
                  as.numeric)