Time Series Investigation of Milk Production in Major States of India Using ARIMA Modeling
Modeling and Forecasting of Milk Production in Chhattisgarh and India
# Imports
# Imports
library(fpp2)
## Warning: package 'fpp2' was built under R version 4.0.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## -- Attaching packages --------------------------------------------------------------------------- fpp2 2.4 --
## v ggplot2 3.3.2 v fma 2.4
## v forecast 8.13 v expsmooth 2.3
## Warning: package 'ggplot2' was built under R version 4.0.3
## Warning: package 'forecast' was built under R version 4.0.3
##
library(forecast)
library(ggplot2)
library("readxl")
## Warning: package 'readxl' was built under R version 4.0.3
library(moments)
## Warning: package 'moments' was built under R version 4.0.3
library(forecast)
require(forecast)
require(tseries)
## Loading required package: tseries
## Warning: package 'tseries' was built under R version 4.0.3
require(markovchain)
## Loading required package: markovchain
## Warning: package 'markovchain' was built under R version 4.0.3
## Package: markovchain
## Version: 0.8.5-3
## Date: 2020-12-03
## BugReport: https://github.com/spedygiorgio/markovchain/issues
require(data.table)
## Loading required package: data.table
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in Pakistan" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$Pakistan
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4209000 5773750 10380500 12627086 19084250 28109000
sd(original_data) # calculate standard deviation
## [1] 7540331
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.5334464
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 1.880945
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set 25338.39 179751.4 120493.9 0.2595034 1.455225 0.3178252
## ACF1
## Training set -0.01911074
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 0.9868946
## Beta: 0.3584389
## Damping Parameter: 1
## Gamma-1 Values: -0.005289493
## Gamma-2 Values: 0.009289828
##
## Seed States:
## [,1]
## [1,] 4730320.9197
## [2,] 144576.0120
## [3,] 1161.5291
## [4,] -23156.1313
## [5,] 725.8252
## [6,] -25038.9612
##
## Sigma: 179751.4
## AIC: 1454.655
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in Pakistan"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Pakistan"
paste(MAPE_Mean_All,"%")
## [1] "1.746 % MAPE 7 years forecasting SAARC Milk production in Pakistan %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Pakistan"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 23652000 23502822
## 2 2013-12-31 вторник 24370000 24121649
## 3 2014-12-31 среда 25001000 24779868
## 4 2015-12-31 четверг 25744000 25331920
## 5 2016-12-31 суббота 26510000 25948036
## 6 2017-12-31 воскресенье 27298000 26600471
## 7 2018-12-31 понедельник 28109000 27149451
## MAPE_TBATS_Model
## 1 0.631 %
## 2 1.019 %
## 3 0.884 %
## 4 1.601 %
## 5 2.12 %
## 6 2.555 %
## 7 3.414 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 27768278
## 2 2020-12-31 четверг 28426497
## 3 2021-12-31 пятница 28978550
## 4 2022-12-31 суббота 29594665
## 5 2023-12-31 воскресенье 30247100
## 6 2024-12-31 вторник 30796080
## 7 2025-12-31 среда 31414907
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 16437.32 166425 99196.88 0.2896213 1.073816 0.2616504 -0.03808877
# Print Model Parameters
model_bats
## BATS(0.544, {0,0}, 0.998, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0.544361
## Alpha: 0.9867143
## Beta: 0.4119543
## Damping Parameter: 0.998458
##
## Seed States:
## [,1]
## [1,] 7707.8541597
## [2,] 0.0208483
## attr(,"lambda")
## [1] 0.5443614
##
## Sigma: 102.5477
## AIC: 1430.339
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in Pakistan"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in Pakistan"
paste(MAPE_Mean_All,"%")
## [1] "0.751 % MAPE 7 years forecasting SAARC Milk production in Pakistan %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in Pakistan"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 23652000 23604177
## 2 2013-12-31 вторник 24370000 24261379
## 3 2014-12-31 среда 25001000 24925762
## 4 2015-12-31 четверг 25744000 25597270
## 5 2016-12-31 суббота 26510000 26275848
## 6 2017-12-31 воскресенье 27298000 26961440
## 7 2018-12-31 понедельник 28109000 27653994
## MAPE_bats_Model
## 1 0.202 %
## 2 0.446 %
## 3 0.301 %
## 4 0.57 %
## 5 0.883 %
## 6 1.233 %
## 7 1.619 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 28353455
## 2 2020-12-31 четверг 29059771
## 3 2021-12-31 пятница 29772889
## 4 2022-12-31 суббота 30492759
## 5 2023-12-31 воскресенье 31219327
## 6 2024-12-31 вторник 31952545
## 7 2025-12-31 среда 32692361
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in `China, mainland`" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$`China, mainland`
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 917000 1166250 1885000 1957335 2737500 3100000
sd(original_data) # calculate standard deviation
## [1] 791574
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.09956085
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 1.450104
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set 4547.584 38491.59 25951.82 0.4323523 1.426527 0.5495366
## ACF1
## Training set -0.03622683
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 0.9312581
## Beta: 0.1720789
## Damping Parameter: 1
## Gamma-1 Values: -0.009681016
## Gamma-2 Values: 0.008120177
##
## Seed States:
## [,1]
## [1,] 885291.763
## [2,] 2352.081
## [3,] -1283.867
## [4,] 6395.803
## [5,] -1743.830
## [6,] -1847.356
##
## Sigma: 38491.59
## AIC: 1297.459
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in `China, mainland`"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in `China, mainland`"
paste(MAPE_Mean_All,"%")
## [1] "6.772 % MAPE 7 years forecasting SAARC Milk production in `China, mainland` %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in `China, mainland`"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 3080000 3109069
## 2 2013-12-31 вторник 3050000 3141529
## 3 2014-12-31 среда 3100000 3181382
## 4 2015-12-31 четверг 2990666 3230758
## 5 2016-12-31 суббота 3005201 3262918
## 6 2017-12-31 воскресенье 2946374 3307867
## 7 2018-12-31 понедельник 3003323 3362639
## MAPE_TBATS_Model
## 1 0.944 %
## 2 3.001 %
## 3 2.625 %
## 4 8.028 %
## 5 8.576 %
## 6 12.269 %
## 7 11.964 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 3395099
## 2 2020-12-31 четверг 3434953
## 3 2021-12-31 пятница 3484329
## 4 2022-12-31 суббота 3516488
## 5 2023-12-31 воскресенье 3561438
## 6 2024-12-31 вторник 3616210
## 7 2025-12-31 среда 3648670
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set -1935.931 40750.93 23809.33 0.06616459 1.197824 0.5041687
## ACF1
## Training set -0.132177
# Print Model Parameters
model_bats
## BATS(0, {0,0}, 1, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0
## Alpha: 0.9732246
## Beta: 0.2432013
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 13.686930648
## [2,] 0.003080326
## attr(,"lambda")
## [1] 3.369018e-07
##
## Sigma: 0.01756693
## AIC: 1259.558
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in `China, mainland`"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in `China, mainland`"
paste(MAPE_Mean_All,"%")
## [1] "6.443 % MAPE 7 years forecasting SAARC Milk production in `China, mainland` %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in `China, mainland`"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 3080000 3091986
## 2 2013-12-31 вторник 3050000 3133081
## 3 2014-12-31 среда 3100000 3174723
## 4 2015-12-31 четверг 2990666 3216919
## 5 2016-12-31 суббота 3005201 3259675
## 6 2017-12-31 воскресенье 2946374 3303000
## 7 2018-12-31 понедельник 3003323 3346900
## MAPE_bats_Model
## 1 0.389 %
## 2 2.724 %
## 3 2.41 %
## 4 7.565 %
## 5 8.468 %
## 6 12.104 %
## 7 11.44 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 3391384
## 2 2020-12-31 четверг 3436459
## 3 2021-12-31 пятница 3482133
## 4 2022-12-31 суббота 3528414
## 5 2023-12-31 воскресенье 3575311
## 6 2024-12-31 вторник 3622830
## 7 2025-12-31 среда 3670982
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in India" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$India
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10929000 14313750 28547500 34725088 49628250 91817140
sd(original_data) # calculate standard deviation
## [1] 22691830
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.8041301
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 2.578639
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 163237.7 607563 493032.2 0.7495706 2.317169 0.4204822 -0.04750128
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 1.135479
## Beta: 0.3232109
## Damping Parameter: 1
## Gamma-1 Values: -0.0005794413
## Gamma-2 Values: 0.0004366506
##
## Seed States:
## [,1]
## [1,] 10636498.27
## [2,] -333350.95
## [3,] -13434.89
## [4,] -232143.56
## [5,] -154919.57
## [6,] 55215.47
##
## Sigma: 607563
## AIC: 1578.879
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in India"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in India"
paste(MAPE_Mean_All,"%")
## [1] "4.051 % MAPE 7 years forecasting SAARC Milk production in India %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in India"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 67675432 67682808
## 2 2013-12-31 вторник 70442617 70563893
## 3 2014-12-31 среда 74709900 72816364
## 4 2015-12-31 четверг 76459000 74730907
## 5 2016-12-31 суббота 81266300 77355807
## 6 2017-12-31 воскресенье 86261680 79632439
## 7 2018-12-31 понедельник 91817140 81827328
## MAPE_TBATS_Model
## 1 0.011 %
## 2 0.172 %
## 3 2.535 %
## 4 2.26 %
## 5 4.812 %
## 6 7.685 %
## 7 10.88 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 84708413
## 2 2020-12-31 четверг 86960884
## 3 2021-12-31 пятница 88875426
## 4 2022-12-31 суббота 91500327
## 5 2023-12-31 воскресенье 93776959
## 6 2024-12-31 вторник 95971847
## 7 2025-12-31 среда 98852933
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 169496.8 689136.3 504977.5 0.7031322 2.22926 0.4306697 -0.02727572
# Print Model Parameters
model_bats
## BATS(0.77, {0,0}, 1, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0.770463
## Alpha: 1.115592
## Beta: 0.2071654
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 334769.596180
## [2,] -1.312595
## attr(,"lambda")
## [1] 0.7704627
##
## Sigma: 13822.66
## AIC: 1581.164
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in India"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in India"
paste(MAPE_Mean_All,"%")
## [1] "4.546 % MAPE 7 years forecasting SAARC Milk production in India %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in India"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 67675432 67687320
## 2 2013-12-31 вторник 70442617 69935932
## 3 2014-12-31 среда 74709900 72201265
## 4 2015-12-31 четверг 76459000 74483033
## 5 2016-12-31 суббота 81266300 76780960
## 6 2017-12-31 воскресенье 86261680 79094785
## 7 2018-12-31 понедельник 91817140 81424253
## MAPE_bats_Model
## 1 0.018 %
## 2 0.719 %
## 3 3.358 %
## 4 2.584 %
## 5 5.519 %
## 6 8.308 %
## 7 11.319 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 83769121
## 2 2020-12-31 четверг 86129154
## 3 2021-12-31 пятница 88504126
## 4 2022-12-31 суббота 90893819
## 5 2023-12-31 воскресенье 93298021
## 6 2024-12-31 вторник 95716530
## 7 2025-12-31 среда 98149149
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in Nepal" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$Nepal
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 340000 482250 596618 678285 856086 1338277
sd(original_data) # calculate standard deviation
## [1] 279431.2
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.7663647
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 2.412837
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 2140.325 12074.91 8539.213 0.2344735 1.60696 0.5074679 -0.04518789
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 1.157697
## Beta: 0.209391
## Damping Parameter: 1
## Gamma-1 Values: -0.0003674468
## Gamma-2 Values: -0.0004999581
##
## Seed States:
## [,1]
## [1,] 299689.1851
## [2,] 10651.6178
## [3,] -935.5607
## [4,] 779.2784
## [5,] 696.6762
## [6,] 1923.7177
##
## Sigma: 12074.91
## AIC: 1179.209
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in Nepal"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Nepal"
paste(MAPE_Mean_All,"%")
## [1] "3.369 % MAPE 7 years forecasting SAARC Milk production in Nepal %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Nepal"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 1153838 1147760
## 2 2013-12-31 вторник 1188433 1180643
## 3 2014-12-31 среда 1167773 1209898
## 4 2015-12-31 четверг 1167154 1246415
## 5 2016-12-31 суббота 1210441 1281470
## 6 2017-12-31 воскресенье 1245954 1312594
## 7 2018-12-31 понедельник 1338277 1348808
## MAPE_TBATS_Model
## 1 0.527 %
## 2 0.655 %
## 3 3.607 %
## 4 6.791 %
## 5 5.868 %
## 6 5.349 %
## 7 0.787 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 1381691
## 2 2020-12-31 четверг 1410947
## 3 2021-12-31 пятница 1447463
## 4 2022-12-31 суббота 1482518
## 5 2023-12-31 воскресенье 1513642
## 6 2024-12-31 вторник 1549856
## 7 2025-12-31 среда 1582740
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set 357.1187 11267.57 8026.917 -0.06524403 1.438529 0.4770232
## ACF1
## Training set 0.04559581
# Print Model Parameters
model_bats
## BATS(0.012, {0,0}, 1, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0.012029
## Alpha: 1.19226
## Beta: -0.01190352
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 13.6679832
## [2,] 0.0291863
## attr(,"lambda")
## [1] 0.01202911
##
## Sigma: 0.02441833
## AIC: 1167.955
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in Nepal"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in Nepal"
paste(MAPE_Mean_All,"%")
## [1] "2.787 % MAPE 7 years forecasting SAARC Milk production in Nepal %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in Nepal"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 1153838 1140165
## 2 2013-12-31 вторник 1188433 1168947
## 3 2014-12-31 среда 1167773 1198446
## 4 2015-12-31 четверг 1167154 1228681
## 5 2016-12-31 суббота 1210441 1259669
## 6 2017-12-31 воскресенье 1245954 1291429
## 7 2018-12-31 понедельник 1338277 1323980
## MAPE_bats_Model
## 1 1.185 %
## 2 1.64 %
## 3 2.627 %
## 4 5.272 %
## 5 4.067 %
## 6 3.65 %
## 7 1.068 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 1357341
## 2 2020-12-31 четверг 1391533
## 3 2021-12-31 пятница 1426575
## 4 2022-12-31 суббота 1462488
## 5 2023-12-31 воскресенье 1499295
## 6 2024-12-31 вторник 1537017
## 7 2025-12-31 среда 1575676
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in `Sri Lanka`" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$`Sri Lanka`
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18320 29411 42535 45636 62135 85914
sd(original_data) # calculate standard deviation
## [1] 17528.07
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.3694499
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 1.882833
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 1305.45 8719.842 5599.515 1.577394 14.92159 1.126319 -0.03532745
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 0.9971949
## Beta: 0.01798248
## Damping Parameter: 1
## Gamma-1 Values: -0.01634612
## Gamma-2 Values: 0.008369212
##
## Seed States:
## [,1]
## [1,] 27277.6818
## [2,] -1678.4463
## [3,] 1781.1336
## [4,] 220.3718
## [5,] -1730.0898
## [6,] -1766.6832
##
## Sigma: 8719.842
## AIC: 1146.005
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
paste(MAPE_Mean_All,"%")
## [1] "30.458 % MAPE 7 years forecasting SAARC Milk production in `Sri Lanka` %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 61710 44335.45
## 2 2013-12-31 вторник 54060 44215.58
## 3 2014-12-31 среда 45854 50277.39
## 4 2015-12-31 четверг 36118 48155.16
## 5 2016-12-31 суббота 66128 42665.94
## 6 2017-12-31 воскресенье 68591 43464.42
## 7 2018-12-31 понедельник 85914 41448.19
## MAPE_TBATS_Model
## 1 28.155 %
## 2 18.21 %
## 3 9.647 %
## 4 33.327 %
## 5 35.48 %
## 6 36.632 %
## 7 51.756 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 41328.32
## 2 2020-12-31 четверг 47390.14
## 3 2021-12-31 пятница 45267.90
## 4 2022-12-31 суббота 39778.68
## 5 2023-12-31 воскресенье 40577.17
## 6 2024-12-31 вторник 38560.94
## 7 2025-12-31 среда 38441.06
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 214.8835 9087.791 5102.434 -2.24465 13.93984 1.026333 -0.03144049
# Print Model Parameters
model_bats
## BATS(0.216, {0,0}, -, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0.216358
## Alpha: 0.9829001
##
## Seed States:
## [,1]
## [1,] 40.15351
## attr(,"lambda")
## [1] 0.2163576
##
## Sigma: 2.104403
## AIC: 1130.562
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
paste(MAPE_Mean_All,"%")
## [1] "25.282 % MAPE 7 years forecasting SAARC Milk production in `Sri Lanka` %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in `Sri Lanka`"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 61710 46339.52
## 2 2013-12-31 вторник 54060 46339.52
## 3 2014-12-31 среда 45854 46339.52
## 4 2015-12-31 четверг 36118 46339.52
## 5 2016-12-31 суббота 66128 46339.52
## 6 2017-12-31 воскресенье 68591 46339.52
## 7 2018-12-31 понедельник 85914 46339.52
## MAPE_bats_Model
## 1 24.908 %
## 2 14.281 %
## 3 1.059 %
## 4 28.3 %
## 5 29.925 %
## 6 32.441 %
## 7 46.063 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 46339.52
## 2 2020-12-31 четверг 46339.52
## 3 2021-12-31 пятница 46339.52
## 4 2022-12-31 суббота 46339.52
## 5 2023-12-31 воскресенье 46339.52
## 6 2024-12-31 вторник 46339.52
## 7 2025-12-31 среда 46339.52
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in Bangladesh" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$Bangladesh
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13090 20100 23377 24770 27750 39000
sd(original_data) # calculate standard deviation
## [1] 6580.095
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.6500564
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 2.441656
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set -45.62149 1570.798 1115.194 -0.758213 5.649507 1.09059
## ACF1
## Training set -0.003429975
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 0.9407896
## Beta: 0.1002629
## Damping Parameter: 1
## Gamma-1 Values: -0.002555942
## Gamma-2 Values: 0.01155586
##
## Seed States:
## [,1]
## [1,] 13161.3401
## [2,] 1130.1226
## [3,] -280.0889
## [4,] 101.4288
## [5,] 334.2858
## [6,] 186.5834
##
## Sigma: 1570.798
## AIC: 971.1757
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in Bangladesh"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Bangladesh"
paste(MAPE_Mean_All,"%")
## [1] "12.293 % MAPE 7 years forecasting SAARC Milk production in Bangladesh %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Bangladesh"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 38000 38218.04
## 2 2013-12-31 вторник 39000 38693.99
## 3 2014-12-31 среда 35173 39012.80
## 4 2015-12-31 четверг 35303 40355.38
## 5 2016-12-31 суббота 35432 41683.17
## 6 2017-12-31 воскресенье 35562 42555.17
## 7 2018-12-31 понедельник 35691 43599.09
## MAPE_TBATS_Model
## 1 0.574 %
## 2 0.785 %
## 3 10.917 %
## 4 14.311 %
## 5 17.643 %
## 6 19.665 %
## 7 22.157 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 44075.04
## 2 2020-12-31 четверг 44393.85
## 3 2021-12-31 пятница 45736.42
## 4 2022-12-31 суббота 47064.22
## 5 2023-12-31 воскресенье 47936.22
## 6 2024-12-31 вторник 48980.14
## 7 2025-12-31 среда 49456.09
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 340.776 1674.575 1064.698 0.8069479 5.202474 1.041208 -0.04360055
# Print Model Parameters
model_bats
## BATS(1, {0,0}, -, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Alpha: 1.031937
##
## Seed States:
## [,1]
## [1,] 19302.71
##
## Sigma: 1674.575
## AIC: 961.7012
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in Bangladesh"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in Bangladesh"
paste(MAPE_Mean_All,"%")
## [1] "4.573 % MAPE 7 years forecasting SAARC Milk production in Bangladesh %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in Bangladesh"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 38000 37237.33
## 2 2013-12-31 вторник 39000 37237.33
## 3 2014-12-31 среда 35173 37237.33
## 4 2015-12-31 четверг 35303 37237.33
## 5 2016-12-31 суббота 35432 37237.33
## 6 2017-12-31 воскресенье 35562 37237.33
## 7 2018-12-31 понедельник 35691 37237.33
## MAPE_bats_Model
## 1 2.007 %
## 2 4.52 %
## 3 5.869 %
## 4 5.479 %
## 5 5.095 %
## 6 4.711 %
## 7 4.333 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 37237.33
## 2 2020-12-31 четверг 37237.33
## 3 2021-12-31 пятница 37237.33
## 4 2022-12-31 суббота 37237.33
## 5 2023-12-31 воскресенье 37237.33
## 6 2024-12-31 вторник 37237.33
## 7 2025-12-31 среда 37237.33
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1
Full_original_data<-read_excel("F:/Phd/ALL Russia Analysis/SAARC milk production final.xlsx")
y_lab<- "forecasting SAARC Milk production in Myanmar" # input name of data
Actual_date_interval <- c("1961/12/31","2018/12/31")
Forecast_date_interval <- c("2019/12/31","2025/12/31")
validation_data_days <-7
frequency<-"years"
# Data Preparation & calculate some of statistics measures
original_data<-Full_original_data$Myanmar
summary(original_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18180 49035 93736 103086 159709 305631
sd(original_data) # calculate standard deviation
## [1] 74419.61
skewness(original_data) # calculate Cofficient of skewness
## [1] 0.9504659
kurtosis(original_data) # calculate Cofficient of kurtosis
## [1] 3.201248
rows <- NROW(original_data)
training_data<-original_data[1:(rows-validation_data_days)]
testing_data<-original_data[(rows-validation_data_days+1):rows]
AD<-fulldate<-seq(as.Date(Actual_date_interval[1]),as.Date(Actual_date_interval[2]), frequency) #input range for actual date
FD<-seq(as.Date(Forecast_date_interval[1]),as.Date(Forecast_date_interval[2]), frequency) #input range forecasting date
N_forecasting_days<-nrow(data.frame(FD))
validation_dates<-tail(AD,validation_data_days)
validation_data_by_name<-weekdays(validation_dates)
forecasting_data_by_name<-weekdays(FD)
data_series<-ts(training_data)
#plot
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
## TBATS Model
# Data Modeling
data_series<-ts(training_data)
model_TBATS<-forecast:::fitSpecificTBATS(data_series,use.box.cox=FALSE, use.beta=TRUE, seasonal.periods=c(6),use.damping=FALSE,k.vector=c(2))
accuracy(model_TBATS) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE
## Training set 1682.294 10178.43 6496.924 1.690186 8.622555 0.9309968
## ACF1
## Training set -0.006797351
# Print Model Parameters
model_TBATS
## TBATS(1, {0,0}, 1, {<6,2>})
##
## Call: NULL
##
## Parameters
## Alpha: 0.6496769
## Beta: 0.2621229
## Damping Parameter: 1
## Gamma-1 Values: 0.003815186
## Gamma-2 Values: -0.004483384
##
## Seed States:
## [,1]
## [1,] 12559.6504
## [2,] -861.8135
## [3,] 653.3233
## [4,] 1416.4450
## [5,] 3195.4670
## [6,] 1277.1974
##
## Sigma: 10178.43
## AIC: 1161.782
plot(model_TBATS,main =paste(y_lab))
# Testing Data Evaluation
forecasting_tbats <- predict(model_TBATS, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_tbats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using TBATS Model for ==> forecasting SAARC Milk production in Myanmar"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_TBATS<-paste(round(MAPE_Per_Day,3),"%")
MAPE_TBATS_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Myanmar"
paste(MAPE_Mean_All,"%")
## [1] "115.646 % MAPE 7 years forecasting SAARC Milk production in Myanmar %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in TBATS Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in TBATS Model for ==> forecasting SAARC Milk production in Myanmar"
data.frame(date_TBATS=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_TBATS=validation_forecast,MAPE_TBATS_Model)
## date_TBATS validation_data_by_name actual_data forecasting_TBATS
## 1 2012-12-31 понедельник 171184 333191.1
## 2 2013-12-31 вторник 175526 351438.5
## 3 2014-12-31 среда 179751 370668.5
## 4 2015-12-31 четверг 184142 398602.2
## 5 2016-12-31 суббота 188490 421902.8
## 6 2017-12-31 воскресенье 192134 440604.3
## 7 2018-12-31 понедельник 193841 462956.4
## MAPE_TBATS_Model
## 1 94.639 %
## 2 100.22 %
## 3 106.212 %
## 4 116.465 %
## 5 123.833 %
## 6 129.321 %
## 7 138.833 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_TBATS=tail(forecasting_tbats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_TBATS
## 1 2019-12-31 вторник 481203.8
## 2 2020-12-31 четверг 500433.8
## 3 2021-12-31 пятница 528367.5
## 4 2022-12-31 суббота 551668.0
## 5 2023-12-31 воскресенье 570369.6
## 6 2024-12-31 вторник 592721.7
## 7 2025-12-31 среда 610969.0
plot(forecasting_tbats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph2<-autoplot(forecasting_tbats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph2
##bats model
# Data Modeling
data_series<-ts(training_data)
autoplot(data_series ,xlab=paste ("Time in ", frequency, sep=" "), ylab = y_lab, main=paste ("Actual Data :", y_lab, sep=" "))
model_bats<-bats(data_series)
accuracy(model_bats) # accuracy on training data
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 547.6818 10763.15 6829.284 -1.85141 7.643323 0.9786233 0.1023617
# Print Model Parameters
model_bats
## BATS(0.339, {0,0}, 1, -)
##
## Call: bats(y = data_series)
##
## Parameters
## Lambda: 0.338569
## Alpha: 0.82674
## Beta: -0.008284143
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 72.08607
## [2,] 2.79474
## attr(,"lambda")
## [1] 0.338569
##
## Sigma: 5.03121
## AIC: 1127.109
plot(model_bats,main =paste(y_lab))
# Testing Data Evaluation
forecasting_bats <- predict(model_bats, h=N_forecasting_days+validation_data_days)
validation_forecast<-head(forecasting_bats$mean,validation_data_days)
MAPE_Per_Day<-round( abs(((testing_data-validation_forecast)/testing_data)*100) ,3)
paste ("MAPE % For ",validation_data_days,frequency,"by using bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE % For 7 years by using bats Model for ==> forecasting SAARC Milk production in Myanmar"
MAPE_Mean_All<-paste(round(mean(MAPE_Per_Day),3),"% MAPE ",validation_data_days,frequency,y_lab,sep=" ")
MAPE_bats<-paste(round(MAPE_Per_Day,3),"%")
MAPE_bats_Model<-paste(MAPE_Per_Day ,"%")
paste (" MAPE that's Error of Forecasting for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] " MAPE that's Error of Forecasting for 7 days in bats Model for ==> forecasting SAARC Milk production in Myanmar"
paste(MAPE_Mean_All,"%")
## [1] "95.673 % MAPE 7 years forecasting SAARC Milk production in Myanmar %"
paste ("MAPE that's Error of Forecasting day by day for ",validation_data_days," days in bats Model for ==> ",y_lab, sep=" ")
## [1] "MAPE that's Error of Forecasting day by day for 7 days in bats Model for ==> forecasting SAARC Milk production in Myanmar"
data.frame(date_bats=validation_dates,validation_data_by_name,actual_data=testing_data,forecasting_bats=validation_forecast,MAPE_bats_Model)
## date_bats validation_data_by_name actual_data forecasting_bats
## 1 2012-12-31 понедельник 171184 319048.1
## 2 2013-12-31 вторник 175526 332029.9
## 3 2014-12-31 среда 179751 345356.3
## 4 2015-12-31 четверг 184142 359031.8
## 5 2016-12-31 суббота 188490 373060.7
## 6 2017-12-31 воскресенье 192134 387447.5
## 7 2018-12-31 понедельник 193841 402196.5
## MAPE_bats_Model
## 1 86.377 %
## 2 89.163 %
## 3 92.13 %
## 4 94.975 %
## 5 97.921 %
## 6 101.655 %
## 7 107.488 %
data.frame(FD,forecating_date=forecasting_data_by_name,forecasting_by_bats=tail(forecasting_bats$mean,N_forecasting_days))
## FD forecating_date forecasting_by_bats
## 1 2019-12-31 вторник 417312.3
## 2 2020-12-31 четверг 432799.0
## 3 2021-12-31 пятница 448661.3
## 4 2022-12-31 суббота 464903.3
## 5 2023-12-31 воскресенье 481529.6
## 6 2024-12-31 вторник 498544.4
## 7 2025-12-31 среда 515952.3
plot(forecasting_bats)
x1_test <- ts(testing_data, start =(rows-validation_data_days+1) )
lines(x1_test, col='red',lwd=2)
graph1<-autoplot(forecasting_bats,xlab = paste ("Time in ", frequency , sep=" "),ylab = y_lab)
graph1