#r #time-series #forecasting #fable-r
#r #временные ряды #прогнозирование #fable-r
Вопрос:
Я работаю над книгой «Принципы и практика прогнозирования». В частности, я работаю над разделом о полезных предикторах, который находится здесь: https://otexts.com/fpp3/useful-predictors.html .
В тексте упоминаются переменные вмешательства, но я не могу запустить переменные спайка или шага. Я проверил stackoverflow и посмотрел онлайн, но не нашел примеров. Приведенный ниже код возвращает нулевую модель, независимо от того, использую ли я spike или step, любая помощь в запуске переменных вмешательства будет оценена.
library(tidyverse)
library(fpp3)
fit_consBest <- us_change %>%
model(
lm = TSLM(Consumption ~ Income Savings Unemployment trend() season()),
step = TSLM(formula = Consumption ~ Income step(object = lm, scope = Income Savings Unemployment))
)
# All of the reporting methods below return NULL models or errors:
report(fit_consBest)
fit_consBest %>%
select(step)
glance(fit_consBest)
Ответ №1:
step()
Функция выполняет пошаговую регрессию, она не создает пошаговый предиктор.
Вот пример, в котором используется предиктор шага. В этом случае шаг происходит в первом квартале 1975 года (т.е. 0 до этого и 1 после).
library(fpp3)
#> ── Attaching packages ─────────────────────────────────────── fpp3 0.4.0.9000 ──
#> ✓ tibble 3.1.6 ✓ tsibble 1.1.1
#> ✓ dplyr 1.0.7 ✓ tsibbledata 0.3.0.9000
#> ✓ tidyr 1.1.4 ✓ feasts 0.2.2.9000
#> ✓ lubridate 1.8.0 ✓ fable 0.3.1.9000
#> ✓ ggplot2 3.3.5
#> ── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
#> x lubridate::date() masks base::date()
#> x dplyr::filter() masks stats::filter()
#> x tsibble::intersect() masks base::intersect()
#> x tsibble::interval() masks lubridate::interval()
#> x dplyr::lag() masks stats::lag()
#> x tsibble::setdiff() masks base::setdiff()
#> x tsibble::union() masks base::union()
fit_consBest <- us_change %>%
model(
lm = TSLM(Consumption ~ Income Savings Unemployment trend() season()),
step = TSLM(Consumption ~ Income (year(Quarter) >= 1975))
)
glance(fit_consBest)
#> # A tibble: 2 × 15
#> .model r_squared adj_r_squared sigma2 statistic p_value df log_lik AIC
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl>
#> 1 lm 0.776 0.768 0.0944 94.1 2.61e-58 8 -43.2 -457.
#> 2 step 0.148 0.139 0.350 17.0 1.61e- 7 3 -176. -203.
#> # … with 6 more variables: AICc <dbl>, BIC <dbl>, CV <dbl>, deviance <dbl>,
#> # df.residual <int>, rank <int>
tidy(fit_consBest)
#> # A tibble: 11 × 6
#> .model term estimate std.error statistic p.value
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 lm (Intercept) 0.441 0.0650 6.79 1.38e-10
#> 2 lm Income 0.741 0.0397 18.7 7.36e-45
#> 3 lm Savings -0.0528 0.00293 -18.0 5.96e-43
#> 4 lm Unemployment -0.343 0.0680 -5.04 1.06e- 6
#> 5 lm trend() -0.00113 0.000391 -2.89 4.34e- 3
#> 6 lm season()year2 -0.0760 0.0617 -1.23 2.19e- 1
#> 7 lm season()year3 -0.0478 0.0626 -0.763 4.46e- 1
#> 8 lm season()year4 -0.0865 0.0619 -1.40 1.64e- 1
#> 9 step (Intercept) 0.485 0.138 3.52 5.45e- 4
#> 10 step Income 0.273 0.0469 5.82 2.39e- 8
#> 11 step year(Quarter) >= 1975TRUE 0.0658 0.140 0.471 6.38e- 1
Создано 2021-12-04 пакетом reprex (v2.0.1)
Комментарии:
1. Отличный ответ, очень понятный, большое вам спасибо!