library(forecast)
## Warning: package 'forecast' was built under R version 3.4.4
library(xts)
## Warning: package 'xts' was built under R version 3.4.4
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(TTR)
## Warning: package 'TTR' was built under R version 3.4.4
library(tseries)
## Warning: package 'tseries' was built under R version 3.4.4
# LOADING DATASET
require(quantmod)
## Loading required package: quantmod
## Warning: package 'quantmod' was built under R version 3.4.4
## Version 0.4-0 included new data defaults. See ?getSymbols.
OXY <- new.env()
getSymbols("OXY", env = OXY, src = "yahoo",
from = as.Date("2016-10-24"), to = as.Date("2018-10-24"),return.class='ts')
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
##
## WARNING: There have been significant changes to Yahoo Finance data.
## Please see the Warning section of '?getSymbols.yahoo' for details.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.yahoo.warning"=FALSE).
## [1] "OXY"
oxy<-OXY$OXY
head(oxy)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## OXY.Open OXY.High OXY.Low OXY.Close OXY.Volume OXY.Adjusted
## 1 74.72 75.40 73.90 75.03 6117200 68.59380
## 2 74.83 75.50 74.35 74.43 4943800 68.04527
## 3 73.70 74.58 73.29 74.39 3678000 68.00869
## 4 74.73 74.89 73.72 73.79 4124700 67.46017
## 5 73.89 74.76 73.55 73.63 5823000 67.31388
## 6 73.64 73.69 72.55 72.91 4722100 66.65566
#plot to find seasonality
plot(oxy)

#Decomposed plots show an upward trend
#Possible biannual trend
plot(decompose(ts(oxy[,"OXY.Adjusted"],frequency = 100)))

#Build time series model with ARIMA
OXY.ARIMA <- ts(oxy, start=c(2016, 10), end=c(2018, 10), frequency=100)
fit.oxy <- auto.arima(OXY.ARIMA[,1])
fit.oxy
## Series: OXY.ARIMA[, 1]
## ARIMA(2,1,3)
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3
## 1.5465 -0.7384 -1.6677 0.8033 0.0526
## s.e. 0.1825 0.1285 0.2023 0.2463 0.1014
##
## sigma^2 estimated as 0.8308: log likelihood=-263
## AIC=537.99 AICc=538.43 BIC=557.78
plot(OXY.ARIMA, type='l')
title("Oxy Price")

#Use Model to foreeceast next 2 months
OXY.forecast <- forecast(fit.oxy, h=42)
OXY.forecast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2018.100 61.65908 60.49095 62.82721 59.87258 63.44558
## 2018.110 61.60916 60.05410 63.16421 59.23091 63.98740
## 2018.120 61.56646 59.77808 63.35483 58.83137 64.30154
## 2018.130 61.53729 59.56664 63.50794 58.52344 64.55113
## 2018.140 61.52371 59.37846 63.66895 58.24283 64.80458
## 2018.150 61.52424 59.19021 63.85827 57.95465 65.09383
## 2018.160 61.53510 58.98955 64.08064 57.64202 65.42818
## 2018.170 61.55149 58.77369 64.32929 57.30321 65.79977
## 2018.180 61.56883 58.54719 64.59047 56.94763 66.19003
## 2018.190 61.58353 58.31819 64.84887 56.58962 66.57744
## 2018.200 61.59347 58.09493 65.09201 56.24291 66.94403
## 2018.210 61.59798 57.88348 65.31248 55.91715 67.27881
## 2018.220 61.59762 57.68711 65.50813 55.61701 67.57823
## 2018.230 61.59373 57.50650 65.68096 55.34286 67.84461
## 2018.240 61.58798 57.34053 65.83543 55.09207 68.08390
## 2018.250 61.58196 57.18701 65.97692 54.86047 68.30346
## 2018.260 61.57690 57.04332 66.11049 54.64338 68.51043
## 2018.270 61.57352 56.90682 66.24022 54.43641 68.71062
## 2018.280 61.57202 56.77519 66.36885 54.23591 68.90814
## 2018.290 61.57221 56.64664 66.49778 54.03920 69.10522
## 2018.300 61.57360 56.51995 66.62725 53.84471 69.30249
## 2018.310 61.57561 56.39452 66.75670 53.65182 69.49941
## 2018.320 61.57770 56.27026 66.88514 53.46068 69.69473
## 2018.330 61.57944 56.14741 67.01148 53.27186 69.88702
## 2018.340 61.58060 56.02636 67.13483 53.08613 70.07507
## 2018.350 61.58109 55.90752 67.25466 52.90412 70.25806
## 2018.360 61.58101 55.79121 67.37080 52.72627 70.43574
## 2018.370 61.58051 55.67757 67.48345 52.55274 70.60827
## 2018.380 61.57980 55.56661 67.59299 52.38342 70.77618
## 2018.390 61.57908 55.45821 67.69995 52.21801 70.94014
## 2018.400 61.57848 55.35214 67.80482 52.05611 71.10085
## 2018.410 61.57809 55.24814 67.90803 51.89727 71.25891
## 2018.420 61.57792 55.14596 68.00988 51.74109 71.41476
## 2018.430 61.57796 55.04538 68.11054 51.58724 71.56868
## 2018.440 61.57814 54.94622 68.21006 51.43549 71.72079
## 2018.450 61.57839 54.84836 68.30842 51.28569 71.87108
## 2018.460 61.57864 54.75173 68.40555 51.13778 72.01949
## 2018.470 61.57884 54.65630 68.50138 50.99173 72.16595
## 2018.480 61.57898 54.56208 68.59587 50.84756 72.31039
## 2018.490 61.57903 54.46905 68.68901 50.70526 72.45280
## 2018.500 61.57901 54.37722 68.78080 50.56483 72.59320
## 2018.510 61.57895 54.28658 68.87132 50.42624 72.73167
plot(OXY.forecast)

forecasted.OXY <- as.numeric(OXY.forecast$mean)
forecasted.OXY
## [1] 61.65908 61.60916 61.56646 61.53729 61.52371 61.52424 61.53510
## [8] 61.55149 61.56883 61.58353 61.59347 61.59798 61.59762 61.59373
## [15] 61.58798 61.58196 61.57690 61.57352 61.57202 61.57221 61.57360
## [22] 61.57561 61.57770 61.57944 61.58060 61.58109 61.58101 61.58051
## [29] 61.57980 61.57908 61.57848 61.57809 61.57792 61.57796 61.57814
## [36] 61.57839 61.57864 61.57884 61.57898 61.57903 61.57901 61.57895