Repository navigation
Expand file tree
/
Copy pathserver.R
More file actions
121 lines (103 loc) · 4.26 KB
/
Copy pathserver.R
File metadata and controls
121 lines (103 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
source('helpers.R')
#Download last 4 years of data
energy.df <- getenergydata(energy_futures)
start.date <- head(energy.df$date, 1)
end.date <- tail(energy.df$date, 1)
# Forecast interval parameter
forecast.days <- 365
shinyServer(function(input, output) {
# Energy Prices plot using ggplot2
output$prices.plot <- renderPlot({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
ggplot(data = energy.df , aes_string('date', tag)) +
geom_line() +
stat_smooth(
method = input$method, formula = y ~ x, size = 1
) +
xlab('')
})
# Forecasted data with auto.arima plot
output$prediction.plot <- renderPlot({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
selected.energy <- ts(zoo(energy.df[tag],
order.by = energy.df$date))
arima.fit <- auto.arima(selected.energy,
approximation = FALSE,
trace = FALSE)
pred <- forecast(arima.fit, h = forecast.days)
arimaForecastPlot(pred, start = start.date, ylabel = tag)
})
# Data first differences plot
output$diff.plot <- renderPlot({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
selected.energy <- ts(zoo(energy.df[tag],
order.by = energy.df$date))
ifelse(
input$chcklog,
selected.diff <- diff(log10(selected.energy)),
selected.diff <- diff(selected.energy)
)
diff.df <- data.frame(date = energy.df[2:nrow(energy.df),'date'],
price = selected.diff)
ggplot(data = diff.df , aes_string('date', tag)) +
geom_line() +
xlab('')
})
# ARIMA results from auto.arima
output$text.arima <- renderPrint({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
selected.energy <- ts(zoo(energy.df[tag],
order.by = energy.df$date))
arima.fit <- auto.arima(selected.energy,
approximation = FALSE,
trace = FALSE)
summary(arima.fit)
})
#Date information
output$text.sd <- renderText({
paste0("Start Date: ",
start.date <- head(energy.df$date, 1))
})
output$text.ed <- renderText({
paste0("End Date: ",
end.date <- tail(energy.df$date, 1))
})
#Show table with real prices
output$energy.table <- renderDataTable(
energy.df[, grepl(paste0(paste(input$energy_id, 'Adjusted', sep = '.'), '|date'), names(energy.df))]
, options = list(pageLength = 10)
)
#Residuals plot
output$residuals.plot <- renderPlot({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
selected.energy <- ts(zoo(energy.df[tag],
order.by = energy.df$date))
arima.fit <- auto.arima(selected.energy,
approximation = FALSE,
trace = FALSE)
par(mfrow = c(1, 2))
acf(ts(arima.fit$residuals), na.action = na.pass, main = 'ACF Residuals')
pacf(ts(arima.fit$residuals), na.action = na.pass, main ='PACF Residuals')
})
#Compute price forecasts
forecast.table <- reactive({
tag <- paste(input$energy_id, 'Adjusted', sep = '.')
selected.energy <- ts(zoo(energy.df[tag],
order.by = energy.df$date))
arima.fit <- auto.arima(selected.energy,
approximation = FALSE,
trace = FALSE)
pred <- forecast(arima.fit, h = forecast.days)
pred <- as.data.frame(pred)
pred <- cbind(date = 0, pred[-1])
pred$date <-
seq(from = end.date + 1,
to = end.date + forecast.days,
by = "1 day")
return(pred)
})
#Show price forecasts
output$table.arima <- renderDataTable({
forecast.table()
}, options = list(pageLength = 10))
})