-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLab 9.R
More file actions
128 lines (88 loc) · 3.87 KB
/
Lab 9.R
File metadata and controls
128 lines (88 loc) · 3.87 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
122
123
124
125
126
127
128
install.packages("TTR")
install.packages("forecast")
library(TTR)
library(forecast)
kings <- scan("http://robjhyndman.com/tsdldata/misc/kings.dat",skip=3)
kings
kingstimeseries <- ts(kings)
kingstimeseries
births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
birthstimeseries <- ts(births, frequency=12, start=c(1946,1))
birthstimeseries
souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))
souvenirtimeseries
plot.ts(kingstimeseries)
plot.ts(birthstimeseries)
plot.ts(souvenirtimeseries)
logsouvenirtimeseries <- log(souvenirtimeseries)
plot.ts(logsouvenirtimeseries)
library("TTR")
kingstimeseriesSMA3 <- SMA(kingstimeseries,n=3)
plot.ts(kingstimeseriesSMA3)
kingstimeseriesSMA8 <- SMA(kingstimeseries,n=8)
plot.ts(kingstimeseriesSMA8)
birthstimeseriescomponents <- decompose(birthstimeseries)
birthstimeseriescomponents$seasonal
plot(birthstimeseriescomponents)
birthstimeseriescomponents <- decompose(birthstimeseries)
birthstimeseriesseasonallyadjusted <- birthstimeseries - birthstimeseriescomponents$seasonal
plot(birthstimeseriesseasonallyadjusted)
rain <- scan("http://robjhyndman.com/tsdldata/hurst/precip1.dat",skip=1)
rainseries <- ts(rain,start=c(1813))
plot.ts(rainseries)
rainseriesforecasts <- HoltWinters(rainseries, beta=FALSE, gamma=FALSE)
rainseriesforecasts
rainseriesforecasts$fitted
plot(rainseriesforecasts)
rainseriesforecasts$SSE
HoltWinters(rainseries, beta=FALSE, gamma=FALSE, l.start=23.56)
library("forecast")
rainseriesforecasts2 <- forecast(rainseriesforecasts, h=8)
rainseriesforecasts2
plot(rainseriesforecasts2)
acf(rainseriesforecasts2$residuals, lag.max=20 , na.action = na.pass)
Box.test(rainseriesforecasts2$residuals, lag=20, type="Ljung-Box")
plot.ts(rainseriesforecasts2$residuals)
plotForecastErrors <- function(forecasterrors) {
# make a histogram of the forecast errors
mybinsize <- IQR(forecasterrors) / 4
mysd <- sd(forecasterrors)
mymin <- min(forecasterrors) - mysd * 5
mymax <- max(forecasterrors) + mysd * 3
# generate normally distributed data with mean 0 and standard deviation mysd
mynorm <- rnorm(10000, mean = 0, sd = mysd)
mymin2 <- min(mynorm)
mymax2 <- max(mynorm)
if (mymin2 < mymin) {
mymin <- mymin2
}
if (mymax2 > mymax) {
mymax <- mymax2
}
# create bins for the histogram
mybins <- seq(mymin, mymax, mybinsize)
# make a red histogram of the forecast errors, with the normally distributed data overlaid
hist(forecasterrors, col = "red", freq = FALSE, breaks = mybins)
# freq = FALSE ensures the area under the histogram = 1
# generate histogram data for normally distributed data
myhist <- hist(mynorm, plot = FALSE, breaks = mybins)
# plot the normal curve as a blue line on top of the histogram of forecast errors
points(myhist$mids, myhist$density, type = "l", col = "blue", lwd = 2)
}
# Removing any NA values from residuals
rainseriesforecasts2$residuals <- rainseriesforecasts2$residuals[!is.na(rainseriesforecasts2$residuals)]
# Plotting the forecast errors
plotForecastErrors(rainseriesforecasts2$residuals)
skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)
skirtsseries <- ts(skirts,start=c(1866))
plot.ts(skirtsseries)
skirtsseriesforecasts <- HoltWinters(skirtsseries, gamma=FALSE)
skirtsseriesforecasts
plot(skirtsseriesforecasts)
HoltWinters(skirtsseries, gamma=FALSE, l.start=608, b.start=9)
skirtsseriesforecasts2 <- forecast(skirtsseriesforecasts, h=19)
plot(skirtsseriesforecasts2)
acf(na.omit(skirtsseriesforecasts2$residuals), lag.max=20)
Box.test(na.omit(skirtsseriesforecasts2$residuals), lag=20, type="Ljung-Box" ,
na.action = na.pass)