Time Series forecasting with R

The first step to make any prediction with a Time Series, is look up your data.

The data used in this document are "airpass"

Load this piece of code to see the form of your data.

###################################
# DATA ANALYSIS SCRIPT            #
# Autor: Juan Antonio Breña Moral #
# Email: bren@juanantonio.info    #
###################################

#Function used to load libraries
#FORECAST PACKAGES: www-personal.buseco.monash.edu.au/~hyndman/Rlibrary/forecast/
LOAD_LIBRARIES <- function(){
	library("forecast") 
}

INSTALL_LIBRARIES <- function(){
	install.packages("forecast");
	install.packages("tseries");
}
  
# Funcion que genera el mensaje de cabecera.
HEADER <-function(){
	cat("\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
	cat("\n:: TIME SERIES FORECASTING | AUTHOR: Juan Antonio Breña Moral   ::")
	cat("\n:: VERSION: 2006-07-09 | DOWNLOADS: http://www.juanantonio.info ::")
	cat("\n:: EMAIL: bren@juanantonio.info                                 ::")
	cat("\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
	cat("\n:: DESCRIPTION:                                                 ::")
	cat("\n:: Without description (2006.07.09)                             ::")
	cat("\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n")
}

JAB.PREDICTION.EDA <- function(DATOS){
    par(mfrow= c(3,1));
    hist(DATOS, probability =T);
    lines(density(DATOS));
    boxplot(DATOS, horizontal=T);
    qqnorm(DATOS);
    abline(0,1,col="red")
    par(mfrow= c(1,1)); 
}

#FROM: http://tolstoy.newcastle.edu.au/R/help/99b/0171.html
mykurtosis <- function(x) { 
    m4 <- mean((x-mean(x))^4) 
    kurt <- m4/(sd(x)^4)-3 
    kurt 
} 

myskewness <- function(x) { 
    m3 <- mean((x-mean(x))^3) 
    skew <- m3/(sd(x)^3) 
    skew 
} 

JAB.PREDICTION.EDA_TABLE <- function(DATAS){
	COLUMN_NAMES <- c("MEAN","MEDIAN","SD","KURTOSIS","SKEWNESS");
	DATA <- c();
	DATA[1] <- mean(DATAS);
	DATA[2] <- median(DATAS);
	DATA[3] <- sd(DATAS);
	DATA[4] <- mykurtosis(DATAS);
	DATA[5] <- myskewness(DATAS);
	names(DATA) <- COLUMN_NAMES;
	
	print("JAB: EDA VIEW 1.0")
	print(DATA);
	stem(DATAS);
}

JAB.PREDICTION.NORMAL_TESTS <- function(DATAS){
COLUMN_NAMES <- c("SHAPIRO","ANDERSON-DARLING",
"CRAMER-VON MISES","KS","JARQUE-BERA");
	DATA <- c();
	DATA[1] <- shapiro.test(DATAS)$p.value;
	DATA[2] <- ad.test(DATAS)$p.value;
	DATA[3] <- cvm.test(DATAS)$p.value;
	DATA[4] <- lillie.test(DATAS)$p.value;
	DATA[5] <- jarque.bera.test(DATAS)$p.value;
	names(DATA) <- COLUMN_NAMES;
	
	print("JAB: NORMAL TEST TABLE 1.0")
	print(DATA);
}
LOAD_LIBRARIES();
data(airpass);
DATA <- airpass;

JAB.PREDICTION.EDA(DATA);
JAB.PREDICTION.EDA_TABLE(DATA);
JAB.PREDICTION.NORMAL_TESTS(DATA);

[1] "JAB: EDA VIEW 1.0"
       MEAN      MEDIAN          SD    KURTOSIS    SKEWNESS 
280.2986111 265.5000000 119.9663169  -0.4298441   0.5710676 

  1 | 011222223333344444
  1 | 55555566677777788888889999
  2 | 0000000112333333344444444
  2 | 6667777778889
  3 | 00111111222224444
  3 | 5555666666666799
  4 | 00011111222234
  4 | 66677779
  5 | 114
  5 | 56
  6 | 12

[1] "JAB: NORMAL TEST TABLE 1.0"
     SHAPIRO ANDERSON-DARLING CRAMER-VON MISES               KS      JARQUE-BERA 
6.832743e-05     1.137693e-04     5.996618e-04     1.017376e-03     1.154777e-02

The seasonal form of the data is multiplicative, then when you make your predictions, use "multiplicative" propertie

JAB.TIMESERIES.FORECASTISTING <- function(DATA,PERIODOS_PREDICCION){
    DATA.FORECAST <- pegels(DATA, model="ZZZ", h=PERIODOS_PREDICCION, 
    transform="none",bootstrap="parametric", initialization=3)
    plot(DATA.FORECAST);
}
JAB.TIMESERIES.FORECASTISTING(DATA,12);