循环用于预测数据框上的值

时间:2014-10-01 02:44:35

标签: r

我有一个带有日期列和100列的数据框,其中包含不同位置的值,应该进行预测。我使用来自包tbats()的{​​{1}}和forecast()进行预测,这对第一列(我从数据框中提取)非常有效。 但现在我想在所有列上运行循环。在此循环中,应为每列计算拟合模型(forecast),然后使用tbats()计算每列的未来值(均为独立的)(365天)。

我无法弄清楚循环,我尝试了类似的东西:

forecast

for(i in names(test)) df <- data.frame(forecast(tbats(ts(test[i],frequency=365)),h=365))

我想要一个数据框,它看起来与原始数据集中的数据框完全相同,但是具有未来日期的预测值。所以列:日期,location_1,location_2,....

我该怎么做这样的循环?

2 个答案:

答案 0 :(得分:0)

尝试使用函数apply(),它将作用于数据框中的所有行。您可能需要删除包含日期的第一列:

apply(df[,-1], 2, function (x) forecast(tbats(ts(x,frequency=365)), h=365))

答案 1 :(得分:0)

如果您需要mean值列,请尝试:

 lst1 <- lapply(dat[,-1], function(x) forecast(tbats(ts(x, frequency=365)), h=365))
 resM <- do.call(data.frame, do.call(rbind, lst1)[,"mean"])
 dim(resM)
 #[1] 365   3
 head(resM,2)
 #  location_1 location_2 location_3
 #1 -0.01576029   2.742711   25.04357
 #2 -0.02351485   2.722169   25.04353

或者如果您需要fitted values

 resF <- do.call(data.frame,do.call(rbind, lst1)[,"fitted"])
 dim(resF)
 #[1] 455   3

 resF1 <- cbind(Date=dat[,1], resF)
 resF1[,-1] <- lapply(resF1[,-1], as.numeric)
 str(resF1)
 #'data.frame': 455 obs. of  4 variables:
 #$ Date      : Date, format: "2010-10-24" "2010-10-25" ...
 #$ location_1: num  0.444 0.337 0.333 0.284 0.225 ...
 #$ location_2: num  3.02 3.01 3.04 3.05 3.08 ...
 #$ location_3: num  25 25 25 25 25 ...

数据

 set.seed(42)
 dat <- data.frame(Date=seq(as.Date("2010-10-24"), length.out=455, by=1),
      location_1=rnorm(455), location_2=rnorm(455, 3, 15), location_3=rnorm(455, 25))