Base Chunks

Libraries

require(fredr)
## Loading required package: fredr
## Warning: package 'fredr' was built under R version 4.3.2
require(fpp3)
## Loading required package: fpp3
## Warning: package 'fpp3' was built under R version 4.3.2
## ── Attaching packages ────────────────────────────────────────────── fpp3 0.5 ──
## ✔ tibble      3.2.1     ✔ tsibble     1.1.4
## ✔ dplyr       1.1.4     ✔ tsibbledata 0.4.1
## ✔ tidyr       1.3.0     ✔ feasts      0.3.2
## ✔ lubridate   1.9.3     ✔ fable       0.3.3
## ✔ ggplot2     3.5.1     ✔ fabletools  0.4.2
## Warning: package 'tibble' was built under R version 4.3.2
## Warning: package 'dplyr' was built under R version 4.3.2
## Warning: package 'tidyr' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.2
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tsibble' was built under R version 4.3.3
## Warning: package 'tsibbledata' was built under R version 4.3.2
## Warning: package 'feasts' was built under R version 4.3.3
## Warning: package 'fabletools' was built under R version 4.3.3
## Warning: package 'fable' was built under R version 4.3.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()
require(ggplot2)

API Key (Hidden)

Load Data

mydata=read.csv('c:/users/lfult/downloads/solar.csv')
mydata=mydata %>% mutate(date = yearmonth(Date))
mydata=as_tsibble(mydata, index=date)

Convert to tsibble

ts=as_tsibble(mydata, index = date)
train=as_tsibble(ts[1:252,], index=date)
test=as_tsibble(ts[253:nrow(ts),], index=date)

Build Models

m1=train %>%model(ARIMA(Solar.Energy))
m2=train %>% model(ETS(Solar.Energy))

Plots

autoplot(ts)
## Plot variable not specified, automatically selected `.vars = Solar.Energy`

ts%>%ACF(Solar.Energy)%>%autoplot()

ts%>%PACF(Solar.Energy)%>%autoplot()

Forecast

f1=m1 %>% forecast(test)
f2=m2 %>%  forecast(test)

Accuracy on Test Set

a1=accuracy(f1, test)
a2=accuracy(f2, test)
rbind(a1, a2)
## # 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 ARIMA(Solar.Energy) Test   2.93  3.81  2.94  17.3  17.3   NaN   NaN 0.942
## 2 ETS(Solar.Energy)   Test   2.01  2.73  2.01  11.9  12.0   NaN   NaN 0.944

Report

print(report(m1))
## Series: Solar.Energy 
## Model: ARIMA(0,1,1)(0,1,0)[12] 
## 
## Coefficients:
##          ma1
##       0.1150
## s.e.  0.0596
## 
## sigma^2 estimated as 0.01272:  log likelihood=182.93
## AIC=-361.85   AICc=-361.8   BIC=-354.9
## # A mable: 1 x 1
##       `ARIMA(Solar.Energy)`
##                     <model>
## 1 <ARIMA(0,1,1)(0,1,0)[12]>
print(report(m2))
## Series: Solar.Energy 
## Model: ETS(M,A,M) 
##   Smoothing parameters:
##     alpha = 0.2686296 
##     beta  = 0.0233078 
##     gamma = 0.6602268 
## 
##   Initial states:
##      l[0]        b[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]
##  5.258423 0.001545375 0.7897562 0.8289165 1.019765 1.129126 1.250015 1.253833
##     s[-6]    s[-7]    s[-8]     s[-9]    s[-10]    s[-11]
##  1.204373 1.182043 1.068159 0.9492061 0.6842931 0.6405152
## 
##   sigma^2:  3e-04
## 
##      AIC     AICc      BIC 
## 226.5055 229.1209 286.5058 
## # A mable: 1 x 1
##   `ETS(Solar.Energy)`
##               <model>
## 1        <ETS(M,A,M)>

Plot

# Plot the forecasts
f1df <- as.data.frame(f1)
f2df <- as.data.frame(f2)
tsdf <- as.data.frame(ts)

# Plot using ggplot2
ggplot(tsdf, aes(x = date, y = Solar.Energy)) +
  geom_line(color = "black", linewidth = .5) +
  geom_line(data = f1df, aes(x = date, y = .mean, color = "ARIMA Forecast"), linetype = "dashed") +
  geom_line(data = f2df, aes(x = date, y = .mean, color = "ETS Forecast"), linetype = "dotted") +
  ggtitle("Forecast Comparison") +
  xlab("Year") +
  ylab("Value") +
  scale_color_manual(name = "Forecast",
                     values = c("ARIMA Forecast" = "blue", "ETS Forecast" = "red")) +
  theme_minimal() +
  theme(legend.position = "bottom")