使用回归的预测对数变化值预测未来价格

问题描述 投票:0回答:1

我有这个问题,我希望有人可以帮助我。我有一个数据集,其中显示了几年中每天多种商品的价格(每列)。我对数据框的一部分进行了如下所示的回归,然后为剩余的时间段创建了预测值。我的预测值为宠物价格的对数变化。为了澄清起见,我已经拥有了宠物价格的所有实际值,但是我只是想使用这种方法来预测它们。

lin <- lm(diff(log(pet)) ~ diff(log(bron)) + diff(log(yen)) + 
               diff(yal) - 1, data = codData[1:634,])

predictions <- (predict(lin, newdata = codData[635:1025,]))

我现在的问题是,我想获得宠物价格的实际预测值,通常可以通过将第一个预测的对数变化+ 1乘以我要预测的宠物的第一个价格来获得。我是宠物价格的第一个预测值。然后,我将第二个预测的对数变化+ 1乘以pet的新预测值,依此类推。我不确定如何在R中做到这一点。有人有什么想法吗?

提前感谢!

获取样本数据的代码

codData <- structure(list(date = structure(c(1306800000, 1306886400, 1306972800, 
                                          1307059200, 1307318400, 1307404800, 1307491200, 1307577600, 1307664000, 
                                          1307923200, 1308009600, 1308096000, 1308182400, 1308268800, 1308528000, 
                                          1308614400, 1308700800, 1308787200, 1308873600, 1309132800, 1309219200, 
                                          1309305600, 1309392000, 1309478400, 1309824000, 1309910400, 1309996800, 
                                          1310083200, 1310342400, 1310428800, 1310515200, 1310601600, 1310688000, 
                                          1310947200, 1311033600, 1311120000, 1311206400, 1311292800, 1311552000, 
                                          1311638400, 1311724800, 1311811200, 1311897600, 1312156800, 1312243200, 
                                          1312329600, 1312416000, 1312502400, 1312761600, 1312848000, 1312934400, 
                                          1313020800, 1313107200, 1313366400, 1313452800, 1313539200, 1313625600, 
                                          1313712000, 1313971200, 1314057600, 1314144000, 1314230400, 1314316800, 
                                          1314576000, 1314662400, 1314748800), class = c("POSIXct", "POSIXt"
                                          ), tzone = "UTC"), yal = c(3.05, 2.96, 3.04, 2.99, 3.01, 3.01, 
                                                                     2.98, 3.01, 2.99, 3, 3.11, 2.98, 2.93, 2.94, 2.97, 2.99, 3.01, 
                                                                     2.93, 2.88, 2.95, 3.05, 3.14, 3.18, 3.22, 3.16, 3.12, 3.17, 3.03, 
                                                                     2.94, 2.92, 2.92, 2.98, 2.94, 2.94, 2.91, 2.96, 3.03, 2.99, 3.03, 
                                                                     2.99, 3.01, 2.98, 2.82, 2.77, 2.66, 2.64, 2.47, 2.58, 2.4, 2.2, 
                                                                     2.17, 2.34, 2.24, 2.29, 2.23, 2.17, 2.08, 2.07, 2.1, 2.15, 2.29, 
                                                                     2.23, 2.19, 2.28, 2.19, 2.23), sp = c(1345.2, 1314.55, 1312.9399, 
                                                                                                           1300.16, 1286.17, 1284.9399, 1279.5601, 1289, 1270.98, 1271.83, 
                                                                                                           1287.87, 1265.42, 1267.64, 1271.5, 1278.36, 1295.52, 1287.14, 
                                                                                                           1283.5, 1268.45, 1280.1, 1296.67, 1307.41, 1320.64, 1339.67, 
                                                                                                           1337.88, 1339.22, 1353.22, 1343.8, 1319.49, 1313.64, 1317.72, 
                                                                                                           1308.87, 1316.14, 1305.4399, 1326.73, 1325.84, 1343.8, 1345.02, 
                                                                                                           1337.4301, 1331.9399, 1304.89, 1300.67, 1292.28, 1286.9399, 1254.05, 
                                                                                                           1260.34, 1200.0699, 1199.38, 1119.46, 1172.53, 1120.76, 1172.64, 
                                                                                                           1178.8101, 1204.49, 1192.76, 1193.89, 1140.65, 1123.53, 1123.8199, 
                                                                                                           1162.35, 1177.6, 1159.27, 1176.8, 1210.08, 1212.92, 1218.89), 
                       pet = c(102.63, 100.13, 100.54, 100.49, 98.85, 98.98, 100.93, 
                               101.71, 99.02, 96.98, 99.17, 95.29, 94.96, 92.96, 93.25, 
                               93.4, 94.59, 91.75, 91.25, 90.81, 92.89, 94.93, 94.92, 94.7, 
                               96.8, 96.64, 98.49, 96.31, 95.05, 96.77, 97.89, 95.73, 97.32, 
                               96, 97.7, 98.14, 99.25, 99.82, 99.13, 99.44, 97.31, 97.13, 
                               95.92, 95.33, 93.25, 91.93, 86.44, 87.07, 80.74, 81.12, 81.55, 
                               85.46, 85.25, 87.89, 86.93, 87.45, 81.58, 82.63, 84.12, 86.12, 
                               85.17, 84.94, 85.42, 87.45, 88.76, 88.91), bron = c(419.25, 
                                                                                   409.5, 409.7, 412.4, 412.25, 414.65, 411.25, 410.5, 404.45, 
                                                                                   403.38, 415.85, 411.63, 412.3, 410.05, 407.7, 408.35, 405.85, 
                                                                                   406.58, 408.45, 407.2, 409.85, 421.8, 426.45, 430.25, 432.95, 
                                                                                   432.4, 442.15, 439.08, 434.5, 438.52, 438.52, 437.95, 440.73, 
                                                                                   440.55, 446.45, 442.42, 437.92, 440.2, 440.33, 447.3, 443.15, 
                                                                                   447.3, 448.3, 441, 438.3, 433.65, 421.4, 412.35, 393.05, 
                                                                                   403.55, 389.5, 404.1, 399.5, 403.67, 399.25, 404, 394.13, 
                                                                                   396.85, 393.98, 401.25, 401.27, 409.17, 409.8, 409.5, 414.7, 
                                                                                   418.2), yen = c(929.87, 932.16, 927.79, 922.76, 925.77, 921.77, 
                                                                                                   925.73, 926.87, 934, 929.98, 928.28, 939.99, 939.99, 934.44, 
                                                                                                   934.93, 929.78, 932.43, 936.68, 940.12, 938.95, 935.56, 930.47, 
                                                                                                   927.23, 925.86, 929.43, 932.42, 930.49, 931.15, 939.64, 938.86, 
                                                                                                   929.71, 930.59, 929.31, 931.59, 929.23, 925.3, 919.2, 919.95, 
                                                                                                   918.83, 912.58, 917.17, 919.02, 915.52, 918.61, 920.61, 918.09, 
                                                                                                   932.46, 926.3, 931.17, 921.45, 931.42, 929.27, 929.41, 922.31, 
                                                                                                   923.17, 920.27, 926.05, 924.52, 926.53, 923.23, 926.24, 929.12, 
                                                                                                   923.74, 922.74, 924.79, 925.04)), row.names = c(NA, -66L), class = c("tbl_df", 
                                                                                                                                                                        "tbl", "data.frame"))

Data picture

r regression prediction forecasting price
1个回答
0
投票

我建议您阅读这些文章以熟悉寓言包https://www.mitchelloharawild.com/blog/fable/

library(tidyverse)
library(lubridate)
library(tsibble)
library(fable)

df_example <- codData %>%
  mutate(simple_date = as_date(date)) %>% 
  select(-date) %>%
  as_tsibble(index = simple_date) %>%
  tsibble::fill_gaps() %>% 
  tidyr::fill(yal:yen)

fit <- df_example %>% 
  filter(simple_date < yearmonth("2011 08")) %>%
  model(linear_reg = TSLM(log(pet) ~ log(bron) + log(yen) + log(yal)))

forecasts_result <- fit %>% forecast(df_example)

forecasts_result %>% 
  filter(simple_date >= yearmonth("2011 08")) %>% 
  autoplot(df_example)

“”

forecasts_result %>% 
  accuracy(df_example)
#> # A tibble: 1 x 9
#>   .model     .type    ME  RMSE   MAE   MPE  MAPE  MASE  ACF1
#>   <chr>      <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 linear_reg Test  -3.34  6.30  4.70 -3.97  5.34   NaN 0.947

另一个选择是使用VAR模型

var_fit <- df_example %>%
  filter(simple_date < yearmonth("2011 08")) %>%
  model(VAR_MODEL =VAR(vars(yal,pet,bron,yen) ~ AR(7)))

forecast_result_var <- var_fit %>% 
  forecast(h = 31)

forecast_result_var %>% 
  autoplot(df_example)

“”

forecast_result_var %>% 
  accuracy(df_example)
#> # A tibble: 4 x 10
#>   .model    .response .type      ME   RMSE    MAE    MPE  MAPE  MASE  ACF1
#>   <chr>     <fct>     <chr>   <dbl>  <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>
#> 1 VAR_MODEL yal       Test   -0.448  0.477  0.450 -20.2  20.2   4.53 0.713
#> 2 VAR_MODEL pet       Test  -10.7   11.3   10.7   -12.6  12.6   4.33 0.639
#> 3 VAR_MODEL bron      Test  -32.0   34.7   32.0    -7.95  7.95  4.75 0.746
#> 4 VAR_MODEL yen       Test   41.8   45.3   41.8     4.52  4.52  6.19 0.827

reprex package(v0.3.0)在2020-01-05创建

© www.soinside.com 2019 - 2024. All rights reserved.