根据预测在 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))
模型分为三个步骤:
- 对自变量 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 值。
- 运行 y1 和 x1...xn 之间的回归。
fit<- lm(formula=log(y1)~log(x1)+log(x2)+...+log(xn), data=data)
summary(fit)
- 使用步骤 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)
希望我理解正确。
我需要你的帮助在 R 中创建一个数据框,其中包含每个预测变量的单独列。此“新数据”将用于回归后的预测线。
网上经典例子如下:
data=read.csv("some_path", header=TRUE)
fit<- with(data, lm(y1 ~x1))
pred<-predict.lm(fit, newdata=data.frame("x1"=some_number))
模型分为三个步骤:
- 对自变量 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 值。
- 运行 y1 和 x1...xn 之间的回归。
fit<- lm(formula=log(y1)~log(x1)+log(x2)+...+log(xn), data=data)
summary(fit)
- 使用步骤 1 中“拟合”和“新数据”的结果进行预测。
pred<- predict.lm(fit, newdata)
关于这个问题有一个非常有趣的post:
这三步程序在面板数据时间序列的情况下是否可行?
我想下面的代码应该可以帮助您创建 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)
希望我理解正确。