## Reading in the last two years of daily stock price for Agilent Technologies, Inc. (NYSE:A)
## Source: https://finance.yahoo.com/quote/A/history?p=A
## Stock price dates - 2017-10-29 through 2019-10-29
library(readr)
a <- read_csv("C:/Users/bryce_anderson/Desktop/Boston College/Predictive Analytics and Forecasting/Week 1 (PA&F)/A.csv")
## Inspecting the imported data
head(a)
## # A tibble: 6 x 7
## Date Open High Low Close AdjClose Volume
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 10/30/2017 67.8 67.9 67.1 67.5 66.3 846600
## 2 10/31/2017 67.7 68.2 67.5 68.0 66.8 1614400
## 3 11/1/2017 68.2 68.4 67.8 68.0 66.8 1357300
## 4 11/2/2017 68.1 68.4 67.8 68.1 66.9 1856900
## 5 11/3/2017 68.1 68.7 68.0 68.4 67.2 1072300
## 6 11/6/2017 68.3 68.4 67.9 68.2 67.0 995700
## Setting the data as a ts object to be compatable with autoplot
a <- ts(a)
## Plotting the adjusted close prices
par(bg="gray")
plot(a[,"AdjClose"], col="Dodgerblue", xlab="Day", ylab="Daily adjusted close price ($)", main="Daily stock price of Agilent Technologies, Inc. (NYSE:A)")

## Using the forecast() function to forecast 30 values of AdjClose
library(forecast)
forecast(a[,"AdjClose"], h=30)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 504 76.1667 74.57322 77.76019 73.72968 78.60373
## 505 76.1667 73.97237 78.36104 72.81076 79.52265
## 506 76.1667 73.50371 78.82970 72.09400 80.23940
## 507 76.1667 73.10590 79.22751 71.48560 80.84780
## 508 76.1667 72.75407 79.57934 70.94753 81.38588
## 509 76.1667 72.43520 79.89821 70.45985 81.87355
## 510 76.1667 72.14144 80.19197 70.01059 82.32282
## 511 76.1667 71.86764 80.46577 69.59185 82.74156
## 512 76.1667 71.61021 80.72320 69.19814 83.13527
## 513 76.1667 71.36650 80.96691 68.82543 83.50798
## 514 76.1667 71.13454 81.19887 68.47067 83.86274
## 515 76.1667 70.91275 81.42066 68.13147 84.20194
## 516 76.1667 70.69990 81.63351 67.80595 84.52746
## 517 76.1667 70.49498 81.83842 67.49256 84.84085
## 518 76.1667 70.29717 82.03623 67.19003 85.14338
## 519 76.1667 70.10577 82.22764 66.89731 85.43610
## 520 76.1667 69.92019 82.41322 66.61348 85.71993
## 521 76.1667 69.73992 82.59349 66.33778 85.99563
## 522 76.1667 69.56453 82.76888 66.06954 86.26387
## 523 76.1667 69.39363 82.93977 65.80819 86.52522
## 524 76.1667 69.22691 83.10650 65.55321 86.78020
## 525 76.1667 69.06406 83.26935 65.30415 87.02926
## 526 76.1667 68.90483 83.42858 65.06062 87.27279
## 527 76.1667 68.74897 83.58444 64.82226 87.51115
## 528 76.1667 68.59629 83.73712 64.58875 87.74466
## 529 76.1667 68.44659 83.88682 64.35981 87.97360
## 530 76.1667 68.29970 84.03371 64.13516 88.19825
## 531 76.1667 68.15547 84.17794 63.91458 88.41882
## 532 76.1667 68.01376 84.31965 63.69786 88.63555
## 533 76.1667 67.87444 84.45897 63.48478 88.84863
## Forecasting 30 values of AdjClose at a 95% confidence level
forecast(a[,"AdjClose"], h=30, level=95)
## Point Forecast Lo 95 Hi 95
## 504 76.1667 73.72968 78.60373
## 505 76.1667 72.81076 79.52265
## 506 76.1667 72.09400 80.23940
## 507 76.1667 71.48560 80.84780
## 508 76.1667 70.94753 81.38588
## 509 76.1667 70.45985 81.87355
## 510 76.1667 70.01059 82.32282
## 511 76.1667 69.59185 82.74156
## 512 76.1667 69.19814 83.13527
## 513 76.1667 68.82543 83.50798
## 514 76.1667 68.47067 83.86274
## 515 76.1667 68.13147 84.20194
## 516 76.1667 67.80595 84.52746
## 517 76.1667 67.49256 84.84085
## 518 76.1667 67.19003 85.14338
## 519 76.1667 66.89731 85.43610
## 520 76.1667 66.61348 85.71993
## 521 76.1667 66.33778 85.99563
## 522 76.1667 66.06954 86.26387
## 523 76.1667 65.80819 86.52522
## 524 76.1667 65.55321 86.78020
## 525 76.1667 65.30415 87.02926
## 526 76.1667 65.06062 87.27279
## 527 76.1667 64.82226 87.51115
## 528 76.1667 64.58875 87.74466
## 529 76.1667 64.35981 87.97360
## 530 76.1667 64.13516 88.19825
## 531 76.1667 63.91458 88.41882
## 532 76.1667 63.69786 88.63555
## 533 76.1667 63.48478 88.84863
## Plotting the forecasted values
aF <- forecast(a[,"AdjClose"], h=30)
autoplot(aF, main="Daily Adjusted Close Price for Agilent Technologies, Inc. (NYSE:A)", ylab="Daily Adjusted Close Stock Price ($)", xlab="Days")

## Naïve, Seasonal Naïve, and Drift forecasting methods
autoplot(aF, main="Daily Adjusted Close Price for Agilent Technologies, Inc. (NYSE:A)", ylab="Daily Adjusted Close Stock Price ($)", xlab="Days") + autolayer(snaive(aF, h=30), series="Seasonal Naïve", PI=FALSE) + autolayer(naive(aF, h=30), series="Naïve", PI=FALSE) + autolayer(rwf(aF, h=30), series="Drift", PI=FALSE)
