Discussion 3

Discussion 3

Part 1. Judgmental Forecasting

Judgmental forecasting is a forecasting method that relies on expert knowledge, experience, and subjective interpretation rather than solely on historical data. One real-world situation in which judgmental forecasting may outperform purely statistical methods is the outbreak of COVID-19 and its impact on the economy and businesses.

At the beginning of the pandemic, there was little relevant historical data that could be used to accurately predict its consequences. Although the world had experienced previous disease outbreaks, COVID-19 affected countries, industries, and consumer behavior on an unprecedented global scale. Therefore, statistical models based mainly on past trends would have had difficulty capturing sudden changes such as lockdowns, travel restrictions, supply-chain disruptions, and shifts toward remote work and online shopping.

Judgmental inputs could have improved forecasting accuracy by incorporating insights from experts in public health, economics, logistics, and technology. For example, epidemiologists could provide estimates about infection rates and the expected duration of restrictions, while economists could evaluate the potential effects on employment, consumer spending, and business activity. Logistics experts could assess possible supply-chain disruptions, and technology specialists could anticipate increased demand for cloud computing, video conferencing, and digital services. The Delphi method could also be used to collect anonymous forecasts from multiple experts over several rounds until a reasonable consensus was reached.

However, judgmental forecasting also has limitations. Expert opinions can be affected by overconfidence, personal experience, groupthink, political pressure, and confirmation bias. Experts may also focus too heavily on recent or highly visible events while overlooking other possible outcomes. To reduce these problems, organizations should gather opinions from experts with diverse backgrounds. Judgmental forecasts should also be compared with statistical models whenever sufficient data becomes available. Forecast accuracy should be regularly evaluated, and forecasts should be updated as new information emerges.

Overall, COVID-19 demonstrates why judgmental forecasting can be especially useful during unprecedented events. Statistical methods remain valuable, but when historical patterns suddenly become unreliable, expert judgment and scenario analysis can provide information that historical data alone cannot capture.

Part 2. Times Series Regression Models

library(fpp3)
Warning: package 'fpp3' was built under R version 4.5.2
── Attaching packages ──────────────────────────────────────────── fpp3 1.0.3 ──
✔ tibble      3.3.0     ✔ tsibble     1.2.0
✔ dplyr       1.2.1     ✔ tsibbledata 0.4.1
✔ tidyr       1.3.1     ✔ ggtime      0.2.0
✔ lubridate   1.9.4     ✔ feasts      0.5.0
✔ ggplot2     4.0.3     ✔ fable       0.5.0
Warning: package 'dplyr' was built under R version 4.5.2
Warning: package 'ggplot2' was built under R version 4.5.2
Warning: package 'tsibble' was built under R version 4.5.2
Warning: package 'ggtime' was built under R version 4.5.2
Warning: package 'feasts' was built under R version 4.5.2
Warning: package 'fabletools' was built under R version 4.5.2
Warning: package 'fable' was built under R version 4.5.2
── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
✖ lubridate::date()    masks base::date()
✖ dplyr::filter()      masks stats::filter()
✖ tsibble::intersect() masks base::intersect()
✖ tsibble::interval()  masks lubridate::interval()
✖ dplyr::lag()         masks stats::lag()
✖ tsibble::setdiff()   masks base::setdiff()
✖ tsibble::union()     masks base::union()
#Data prep

us_change
# A tsibble: 198 x 6 [1Q]
   Quarter Consumption Income Production Savings Unemployment
     <qtr>       <dbl>  <dbl>      <dbl>   <dbl>        <dbl>
 1 1970 Q1       0.619  1.04      -2.45    5.30        0.9   
 2 1970 Q2       0.452  1.23      -0.551   7.79        0.5   
 3 1970 Q3       0.873  1.59      -0.359   7.40        0.5   
 4 1970 Q4      -0.272 -0.240     -2.19    1.17        0.700 
 5 1971 Q1       1.90   1.98       1.91    3.54       -0.1000
 6 1971 Q2       0.915  1.45       0.902   5.87       -0.1000
 7 1971 Q3       0.794  0.521      0.308  -0.406       0.1000
 8 1971 Q4       1.65   1.16       2.29   -1.49        0     
 9 1972 Q1       1.31   0.457      4.15   -4.29       -0.200 
10 1972 Q2       1.89   1.03       1.89   -4.69       -0.1000
# ℹ 188 more rows
glimpse(us_change)
Rows: 198
Columns: 6
$ Quarter      <qtr> 1970 Q1, 1970 Q2, 1970 Q3, 1970 Q4, 1971 Q1, 1971 Q2, 197…
$ Consumption  <dbl> 0.61856640, 0.45198402, 0.87287178, -0.27184793, 1.901344…
$ Income       <dbl> 1.0448013, 1.2256472, 1.5851538, -0.2395449, 1.9759249, 1…
$ Production   <dbl> -2.45248553, -0.55145947, -0.35865175, -2.18569087, 1.909…
$ Savings      <dbl> 5.2990141, 7.7898938, 7.4039841, 1.1698982, 3.5356669, 5.…
$ Unemployment <dbl> 0.9, 0.5, 0.5, 0.7, -0.1, -0.1, 0.1, 0.0, -0.2, -0.1, -0.…
names(us_change)
[1] "Quarter"      "Consumption"  "Income"       "Production"   "Savings"     
[6] "Unemployment"
us_change|>
  autoplot(Income)+
  labs(
    title="Quarterly Change in U.S Personal Income",
    x="Quarter",
    y="Precentage change in income"
  )

us_change |>
  select(Quarter, Income, Production, Unemployment) |>
  pivot_longer(
    cols = -Quarter,
    names_to = "Variable",
    values_to = "Change"
  ) |>
  ggplot(aes(x = Quarter, y = Change)) +
  geom_line() +
  facet_wrap(
    ~ Variable,
    scales = "free_y"
  ) +
  labs(
    title = "Quarterly Changes in Income and Predictor Variables",
    x = "Quarter",
    y = "Percentage change"
  )

AddingExternal Predictors

Production and unemployment could be a possible external economic predictor for the income because they play as key economic indicators how the society is working, if they represent good, the income may rise and vice versa.

us_change|>
  ggplot(aes(x=Production, y=Income))+
  geom_point() +
  geom_smooth(method="lm", se=FALSE)+
  labs(
    title= "Income Change Versus Production Change",
    x="Productin percentage change",
    y="Income Percentage change"
  )
`geom_smooth()` using formula = 'y ~ x'

us_change |>
  ggplot(aes(x = Unemployment, y = Income)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(
    title = "Income Change versus Unemployment Change",
    x = "Change in unemployment",
    y = "Income percentage change"
  )
`geom_smooth()` using formula = 'y ~ x'

Set the Training and Test Sets

train <- us_change |>
  slice_head(n = nrow(us_change) - 20)

test <- us_change |>
  slice_tail(n = 20)


range(train$Quarter)
<yearquarter[2]>
[1] "1970 Q1" "2014 Q2"
# Year starts on: January
range(test$Quarter)
<yearquarter[2]>
[1] "2014 Q3" "2019 Q2"
# Year starts on: January

Baseline Model

This is a benchmark for determining whether the prodcution and unemployment would improve forecast accuracy.

baseline<-train |>
  model(
    baseline=TSLM(
      Income ~ trend()+
        season()
    )
  )

TSLM with External Predictors

This is a model with the external predictors, production and income.

external_fit <- train |>
  model(
    external_tslm = TSLM(
      Income ~
        trend() +
        season() +
        Production +
        Unemployment
    )
  )

tslm_models<- train|>
  model(
    baseline=TSLM(
      Income~ trend()+ season()
    ),
    external_tslm=TSLM(
      Income~
        trend()+
        season()+
        Production+
        Unemployment
    )
  )

tslm_models|>report()
Warning in report.mdl_df(tslm_models): Model reporting is only supported for
individual models, so a glance will be shown. To see the report for a specific
model, use `select()` and `filter()` to identify a single model.
# 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 baseline     0.0181      -0.00461  0.890     0.797  0.529      5   -240. -13.9
2 external…    0.0892       0.0572   0.835     2.79   0.0129     7   -233. -23.3
# ℹ 6 more variables: AICc <dbl>, BIC <dbl>, CV <dbl>, deviance <dbl>,
#   df.residual <int>, rank <int>

Forecast Using Test

tslm_forecasts <- tslm_models |>
  forecast(new_data = test)

tslm_accuracy <- tslm_forecasts |>
  accuracy(test)

tslm_accuracy |>
  select(
    .model,
    RMSE,
    MAE,
    MAPE
  )
# A tibble: 2 × 4
  .model         RMSE   MAE  MAPE
  <chr>         <dbl> <dbl> <dbl>
1 baseline      0.483 0.368  67.8
2 external_tslm 0.467 0.353  60.1
tslm_accuracy|>
  arrange(RMSE)
# A tibble: 2 × 10
  .model        .type    ME  RMSE   MAE   MPE  MAPE  MASE RMSSE    ACF1
  <chr>         <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
1 external_tslm Test  0.279 0.467 0.353  56.7  60.1   NaN   NaN -0.0350
2 baseline      Test  0.268 0.483 0.368  58.3  67.8   NaN   NaN  0.0741

Adding production and unemployment improved forecast accuracy. The external-predictor model produced lower RMSE and MAE than the baseline trend and-seasonality model. This suggests that production and unemployment contained useful information about quarterly income changes beyond the information captured by trend and seasonality alone.

Part 3.

Judgmental forecasting is strongest when data are limited or when structural change makes historical relationships unreliable, while time series regression is stronger when consistent historical data and meaningful predictors are available. Judgmental forecasting offers adaptability but is exposed to human bias.

The time series regression analysis provided a more objective and measurable approach. I modeled quarterly changes in U.S. personal income using trend, seasonality, production, and unemployment. Adding the external predictors improved forecast accuracy slightly: RMSE decreased from 0.483 to 0.467, while MAE decreased from 0.368 to 0.353. This suggests that production and unemployment contained useful information about income changes beyond trend and seasonality alone. The model was also more statistically meaningful than the baseline model, although the improvement was modest rather than dramatic.