【问题标题】:How to add data from forecast dataframe to another dataframe so it can be plotted如何将预测数据帧中的数据添加到另一个数据帧以便绘制
【发布时间】:2021-03-09 05:58:26
【问题描述】:

这里有另一个可能很愚蠢的问题的新人。我正在使用预测库根据我在另一个数据框中的几个变量生成预测数据框。现在我想用预测将行添加到我的原始数据框中。理想情况下,我想要新列中的预测数据,因此绘制时的外观可能会有所不同(如果有区别,我正在使用 ggplot2)。我最初尝试了 geom_forecast() 函数,我发现它完全没用,但也许这只是我的经验不足。

任何帮助将不胜感激。

ETA 数据是这样的

df_data <- data.frame("date" = c(as.Date("2021-03-05") - 0:35), "var1" = c(NA, NA, NA, 0.04408070, 0.04422306, 0.04460695, 0.04532817, 0.04602877, 0.04674434, 0.04752608, 0.04828689, 0.04910968, 0.05006677, 0.05102092, 0.05237367, 0.05300535, 0.05322645, 0.05454669, 0.05696812, 0.05860335, 0.05991309, 0.06093534, 0.06195960, 0.06351324, 0.06489379, 0.06568839, 0.06681679, 0.06866297, 0.07080985, 0.07217151, 0.07294732, 0.07450025, 0.07681193, 0.07929639, 0.08152944, 0.08349083), "var2" = c(NA, NA, NA, 890393.0000, 1024662.5714, 1115569.2857, 1172178.7143, 1211248.7143, 1230645.5714, 1239683.1429, 1238111.8571, 1226921.2857, 1201435.5714, 1174988.7143, 1120524.8571, 1088202.8571, 1084565.5714, 1091217.1429, 1099910.8571, 1103150.0000, 1125253.7143, 1188580.7143, 1224574.4286, 1248414.7143, 1283050.2857, 1342914.0000, 1416645.5714, 1452003.2857, 1445888.4286, 1446316.5714, 1462926.5714, 1475569.2857, 1474624.0000, 1469220.1429, 1496057.2857, 1516546.2857))

ETA2 这是我用来创建预测的代码和我想要添加预测的图

var1_ts <- ts(df_data$var1[36:4], start = min(df_data$date), end = max(df_data$date)- 3, frequency = 1)
df_forecast_var1 <- as.data.frame(holt(var1_ts, h = 17))

var2_ts <- ts(df_data$var2[36:4], start = min(df_data$date), end = max(df_data$date)- 3, frequency = 1)
df_forecast_var2 <- as.data.frame(forecast::forecast(auto.arima(var2_ts), h = 17))


p1 <- ggplot(df_data, aes(date, var1)) + geom_line(color = "magenta", size = 1) 
p2 <- ggplot(df_data, aes(date, var2)) + geom_line(color = "green", size = 1)

【问题讨论】:

  • edit 提出您的问题并提供minimal reproducible example - 谢谢。
  • @Uwe 我已经添加了我的数据的样子
  • @Uwe 再次更新,因此人们可以实际复制数据。对不起。正如我所说,我是新人,我会做得更好。

标签: r dataframe ggplot2 forecasting


【解决方案1】:

您能否以一种可以用它创建数据框的方式提供数据。我不愿意手动输入你的数据。

一般来说,您可以将预测作为新行添加到数据中,但目前它们的时间格式与您的训练数据不同。有一个名为 fable 的新预测包,它使时间序列预测的数据争论变得更加容易。

如果您以更有用的方式提供数据,我将更新我的答案,以展示如何使用您现有的代码实现您想要的结果。

我写这个作为答案,因为我没有足够的声誉来发表评论。

【讨论】:

  • 感谢您的反馈。我更新了问题。
【解决方案2】:

我认为forecast::geom_forecast() 给出不满意结果的原因是因为date 向量是反转的,从2021-03-05 及时向后运行到2021-01-29

df_data <- data.frame("date" = c(as.Date("2021-03-05") - 0:35), "var1" = c(NA, NA, NA, 0.04408070, 0.04422306, 

要解决此问题,您可以在创建 df_data 时使用 date = as.Date("2021-03-05") - 35:0 或将现有 data.frame df_data 中的行顺序颠倒

df_rev <- df_data[nrow(df_data):1, ]

现在,geom_forcast() 给出了合理的结果,至少对我而言:

library(forecast)
library(ggplot2)
ggplot(df_rev, aes(date, var1)) + 
  geom_line(color = "magenta", size = 1) +
  geom_forecast(model = holt, h = 17)

ggplot(df_rev, aes(date, var2)) + 
  geom_line(color = "green", size = 1) +
  geom_forecast(model = auto.arima, h = 17)

【讨论】:

  • 谢谢!是的,正是日期顺序让 geom_forecast 表现得很奇怪。我确实有一些后续 Q(如果单独的 Q 更合适,请告诉我)1)有没有办法将预测限制为正数? 2) 我尝试使用参数 PI = FALSE 删除置信区间,但它不起作用并导致绘图失败。 3) geom_forecast 似乎无法识别参数“模型”,所以我无法检查不同模型的外观。 4)可以提取预测的点值吗?
  • @Drewnonymous,恐怕其他问题超出了我的知识范围。因此,我建议您可以搜索 SO 以查找已经存在的答案,或者为您的每个观点发布一个新问题。谢谢。
  • 还是谢谢你!我刚刚开始学习 R 并感谢您的回复。
猜你喜欢
  • 2021-03-12
  • 2021-12-12
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多