# Libraries
library(prophet)
## Warning: package 'prophet' was built under R version 4.1.3
## Loading required package: Rcpp
## Loading required package: rlang
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(ggplot2)

# Ethereum data
# Load Data
data <- read.csv('C:\\Users\\Bobby\\OneDrive\\Documents\\School\\GISC 6323 - Knowledge Mining\\Final Project\\ETH-USD.csv')
head(data)
##         Date     Open     High      Low    Close Adj.Close      Volume
## 1 2021-04-30 2757.734 2796.055 2728.170 2773.207  2773.207 29777179889
## 2 2021-05-01 2772.838 2951.441 2755.908 2945.893  2945.893 28726205272
## 3 2021-05-02 2945.560 2984.892 2860.526 2952.056  2952.056 28032013047
## 4 2021-05-03 2951.176 3450.038 2951.176 3431.086  3431.086 49174290212
## 5 2021-05-04 3431.132 3523.586 3180.743 3253.629  3253.629 62402045158
## 6 2021-05-05 3240.555 3541.463 3213.102 3522.783  3522.783 48334198383
# Log transformation
ds <- data$Date
y <- log(data$Close)
df <- data.frame(ds, y)

#Convert to Date
df$Date = as.Date(data$Date,format = '%Y-%m-%d')

# Forecasting with Facebook's prophet package
m <- prophet(df)
## Disabling yearly seasonality. Run prophet with yearly.seasonality=TRUE to override this.
## Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
future <- make_future_dataframe(m, periods = 30)
forecast <- predict(m, future)

# Plot forecast
plot(m, forecast)

prophet_plot_components(m, forecast)

# Model performance
pred <- forecast$yhat[1:366]
actual <- m$history$y
pred_act <- as.data.frame(pred + actual)
plot(actual, col='red')
lines(x=pred)

actual <- as.data.frame(actual)
pred <- as.data.frame(pred)