## -----------------------------------------------------------------------------
library(PSF)

## -----------------------------------------------------------------------------
nottem_model <- psf(nottem)
nottem_model

## -----------------------------------------------------------------------------
sunspots_model <- psf(sunspots)
sunspots_model

## -----------------------------------------------------------------------------
nottem_preds <- predict(nottem_model, n.ahead = 12)
nottem_preds

## -----------------------------------------------------------------------------
sunspots_preds <- predict(sunspots_model, n.ahead = 48)
sunspots_preds

## ---- fig.width = 7, fig.height = 4-------------------------------------------
plot(nottem_model, nottem_preds)

## ---- fig.width = 7, fig.height = 4-------------------------------------------
plot(sunspots_model, sunspots_preds)

## -----------------------------------------------------------------------------
library(PSF)
library(forecast)
options(warn=-1)
  
## Consider data `sunspots` with removal of last years's readings
# Training Data
train <- sunspots[1:2772]

# Test Data
test <- sunspots[2773:2820]

PSF <- NULL
ARIMA <- NULL
ETS <- NULL

for(i in 1:5)
{
  set.seed(i)
  
  # for PSF
  psf_model <- psf(train)
  a <- predict(psf_model, n.ahead = 48)

  # for ARIMA
  b <- forecast(auto.arima(train), 48)$mean
  
  # for ets
  c <- as.numeric(forecast(ets(train), 48)$mean)
  
  ## For Error Calculations
  # Error for PSF
  PSF[i] <- sqrt(mean((test - a)^2))
  # Error for ARIMA
  ARIMA[i] <- sqrt(mean((test - b)^2))
  # Error for ETS
  ETS[i] <- sqrt(mean((test - c)^2))

}

## Error values for PSF
  PSF
  mean(PSF)
  
## Error values for ARIMA
  ARIMA
  mean(ARIMA)
  
## Error values for ETS
  ETS
  mean(ETS)