根据预测在 R 中创建数据框以将其用于预测

Creating a data frame in R from forecasts to use it for predict

我需要你的帮助在 R 中创建一个数据框,其中包含每个预测变量的单独列。此“新数据”将用于回归后的预测线。

网上经典例子如下:

data=read.csv("some_path", header=TRUE)

fit<- with(data, lm(y1 ~x1))
pred<-predict.lm(fit, newdata=data.frame("x1"=some_number))

模型分为三个步骤:

  1. 对自变量 x1...xn 执行简单 auto.arima 预测。
fit_x1<- auto.arima(x1, stepwise = FALSE)

for_x1<-forecast(fit_x1, h=10)

...

fit_xn<- auto.arima(xn, stepwise = FALSE)

for_xn<-forecast(fit_xn, h=10)


预测后,我需要创建一个包含每个预测变量 (x1...xn) 的数据框。此外,“新数据”应包含具有稍后在回归中使用的 X 的确切名称的列。在这些列中,仅应保存点预测值,不保存 Hi 和 Lo 值。

  1. 运行 y1 和 x1...xn 之间的回归。
fit<- lm(formula=log(y1)~log(x1)+log(x2)+...+log(xn), data=data)

summary(fit)
  1. 使用步骤 1 中“拟合”和“新数据”的结果进行预测。
pred<- predict.lm(fit, newdata)

关于这个问题有一个非常有趣的post: 但是,在这种特殊情况下,根据预测创建了一个新的数据框,该数据框仅生成一列,其中组合了来自不同 x 的预测。

这三步程序在面板数据时间序列的情况下是否可行?

我想下面的代码应该可以帮助您创建 newdata data.frame.

重新推导所需的库。

# library(dplyr)
# library(stats)
# library(forecast)

使用以下代码,我将创建一个包含 5 个时间序列的示例数据:

set.seed(123)

dta <- ts(dplyr::tibble(
  AA = arima.sim(list(order=c(1,0,0), ar=.5), n=100, mean = 12), 
  AB = arima.sim(list(order=c(1,0,0), ar=.5), n=100, mean = 12), 
  AC = arima.sim(list(order=c(1,0,0), ar=.5), n=100, mean = 11), 
  BA = arima.sim(list(order=c(1,0,0), ar=.5), n=100, mean = 10), 
  BB = arima.sim(list(order=c(1,0,0), ar=.5), n=100, mean = 14)
), start = c(2013, 1), frequency = 12)

head(dta)
tail(dta)

现在我们将进行批量预测并创建一个新数据data.frame/matrix

nseries <- ncol(dta)
h <- 12 # forecast horizon

newdata <- matrix(nrow = h, ncol = nseries) # empty newdata matrix

for (i in seq_len(nseries)) {
  
  newdata[,i] <- forecast::forecast(forecast::auto.arima(dta[,i]), h = h)$mean
}

colnames(newdata) <- colnames(dta)

head(newdata)

希望我理解正确。