Question 3.1
frameData <- function(){
dat <- read.csv("house_data_30min.csv")
time <- as.numeric(dat[ , 1])
heating <- as.numeric(dat[ , 2])
tempExternal <- as.numeric(dat[ , 3])
iSolar <- as.numeric(dat[ , 4])
series <- seq(1, length(time))
dat.f <- data.frame(series, time, heating, tempExternal, iSolar)
return(dat.f)
}
dat.f <- frameData()
rm(frameData)
n <- length(dat.f$series) - 4
Read the data and plot the given quantities as a function of time. Indicate the test data in the plots. Comment on the evolution of the values over time.
plot(dat.f$series, dat.f$heating, type = "l", col = "blue", lwd = 1, lty = 1, cex = 0.8, bty = "n",
main = "Training and Testing Data of Heating Power Inside the Building",
xlab = "Series", ylab = "Heat Power Inside (W)")
points(dat.f$series[(n+1):(n+4)], dat.f$heating[(n+1):(n+4)],
col = "blue", lty = 1, pch = 16, cex = 0.8)
legend("topleft", inset = .02, legend = c("Training Data", "Testing Data"), col = c("blue", "blue"),
pch = c(NaN, 16), lty = c(1, 1), lwd = c(2, 2))

plot(dat.f$series, dat.f$tempExternal, type = "l", col = "blue", lwd = 1, lty = 1, cex = 0.8, bty = "n",
main = "Training and Testing Data of External Temperature", xlab = "Series", ylab = "Temperature (Celsius D)")
points(dat.f$series[(n+1):(n+8)], dat.f$tempExternal[(n+1):(n+8)],
col = "blue", lty = 1, pch = 16, cex = 0.8)
legend("bottomleft", inset = .02, legend = c("Training Data", "Testing Data"), col = c("blue", "blue"),
pch = c(NaN, 16), lty = c(1, 1), lwd = c(2, 2))

plot(dat.f$series, dat.f$iSolar, type = "l", col = "blue", lwd = 1, lty = 1, cex = 0.8, bty = "n",
main = "Training and Testing Data of Solar Irradiation", xlab = "Series", ylab = "Solar Irradiation (W / m2)")
points(dat.f$series[(n+1):(n+8)], dat.f$iSolar[(n+1):(n+8)],
col = "blue", lty = 1, pch = 16, cex = 0.8)
legend("topleft", inset = .02, legend = c("Training Data", "Testing Data"), col = c("blue", "blue"),
pch = c(NaN, 16), lty = c(1, 1), lwd = c(2, 2))

Question 3.2
# Plot the time series / residuals and its ACF, PACF, and Ljung-Box plot
plotTimeSeriesResidual <- function(dat, num_lag = 20, ...){
# If the input dat is arima model, just take its residuals are the dat.
if(class(dat) == "Arima")
dat <- dat$residuals
par(mfrow = c(4, 1), mgp = c(2, 0.7, 0), mar = c(1, 1, 1, 1), oma = c(2, 2, 4, 2),
cex.lab = 0.8, cex.axis = 0.8)
plot(dat, type = "l", bty = "n")
title(main = paste("TS, ACF, PACF and p Values for Ljung-Box Statistic"), cex.main = 1.5, line = 1, outer = TRUE)
# ACF and PACF
acf(dat, lag.max = num_lag, xaxt = "n", bty = "n")
axis(1, at = seq(0, 20, by = 1), las = 0, outer = FALSE)
pacf(dat, lag.max = num_lag, xaxt = "n", bty = "n")
axis(1, at = seq(1, 20, by = 1), las = 0, outer = FALSE)
# Ljung-Box Plot
value_p <- sapply(1: num_lag, function(i) Box.test(dat, i, type = "Ljung-Box")$p.value)
plot(1L: num_lag, value_p, xlab = "lag", ylab = "p value", ylim = c(0, 1), bty = "n", xaxt = "n")
axis(1, at = seq(1, 20, by = 1), las = 0, outer = FALSE)
abline(h = 0.05, lty = 2, col = "blue")
}
plotTimeSeriesResidual(dat.f$heating)

Question 3.3: ARIMA Model
mod_arima_1 <- arima(dat.f$heating, order = c(1, 0, 0))
mod_arima_1
Call:
arima(x = dat.f$heating, order = c(1, 0, 0))
Coefficients:
ar1 intercept
0.9002 73.5528
s.e. 0.0195 3.5272
sigma^2 estimated as 62.43: log likelihood = -1695, aic = 3395.99
plotTimeSeriesResidual(mod_arima_1)

mod_arima_2 <- arima(dat.f$heating, order = c(1, 0, 0), include.mean = F)
mod_arima_2
Call:
arima(x = dat.f$heating, order = c(1, 0, 0), include.mean = F)
Coefficients:
ar1
0.9938
s.e. 0.0042
sigma^2 estimated as 65.52: log likelihood = -1708.11, aic = 3420.23
plotTimeSeriesResidual(mod_arima_2)

mod_arima_3 <- arima(dat.f$heating, order = c(1, 0, 2))
mod_arima_3
Call:
arima(x = dat.f$heating, order = c(1, 0, 2))
Coefficients:
ar1 ma1 ma2 intercept
0.9037 0.0742 -0.0932 73.5135
s.e. 0.0247 0.0544 0.0503 3.5590
sigma^2 estimated as 61.42: log likelihood = -1691.06, aic = 3392.12
plotTimeSeriesResidual(mod_arima_3)

LS0tCnRpdGxlOiAiZHR1MDI0MTdhMzogQVJJTUFYIE1vZGVsIGZvciBCdWlsZGluZyBEYXRhIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKYXV0aG9yOiBFZHdhcmQgSi4gWHUgKEppZSBYdSksIHMxODEyMzgKZGF0ZTogMTd0aCBBcHJpbCwgMjAxOQotLS0KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIENsZWFyIHZhcmlhYmxlcwpybShsaXN0PWxzKCkpCmxpYnJhcnkoa25pdHIpCmBgYAoKIyBRdWVzdGlvbiAzLjEKCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQpmcmFtZURhdGEgPC0gZnVuY3Rpb24oKXsKICAgIGRhdCA8LSByZWFkLmNzdigiaG91c2VfZGF0YV8zMG1pbi5jc3YiKQogICAgdGltZSA8LSBhcy5udW1lcmljKGRhdFsgLCAxXSkKICAgIGhlYXRpbmcgPC0gYXMubnVtZXJpYyhkYXRbICwgMl0pCiAgICB0ZW1wRXh0ZXJuYWwgPC0gYXMubnVtZXJpYyhkYXRbICwgM10pCiAgICBpU29sYXIgPC0gYXMubnVtZXJpYyhkYXRbICwgNF0pCiAgICBzZXJpZXMgPC0gc2VxKDEsIGxlbmd0aCh0aW1lKSkKICAgIGRhdC5mIDwtIGRhdGEuZnJhbWUoc2VyaWVzLCB0aW1lLCBoZWF0aW5nLCB0ZW1wRXh0ZXJuYWwsIGlTb2xhcikKICAgIHJldHVybihkYXQuZikKfQpkYXQuZiA8LSBmcmFtZURhdGEoKQpybShmcmFtZURhdGEpCm4gPC0gbGVuZ3RoKGRhdC5mJHNlcmllcykgLSA0CmBgYAoKUmVhZCB0aGUgZGF0YSBhbmQgcGxvdCB0aGUgZ2l2ZW4gcXVhbnRpdGllcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUuIEluZGljYXRlIHRoZSB0ZXN0IGRhdGEgaW4gdGhlIHBsb3RzLiBDb21tZW50IG9uIHRoZSBldm9sdXRpb24gb2YgdGhlIHZhbHVlcyBvdmVyIHRpbWUuCgpgYGB7ciwgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDExLCB3YXJuaW5nPUZBTFNFfQpwbG90KGRhdC5mJHNlcmllcywgZGF0LmYkaGVhdGluZywgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBsd2QgPSAxLCBsdHkgPSAxLCBjZXggPSAwLjgsIGJ0eSA9ICJuIiwgCiAgICAgbWFpbiA9ICJUcmFpbmluZyBhbmQgVGVzdGluZyBEYXRhIG9mIEhlYXRpbmcgUG93ZXIgSW5zaWRlIHRoZSBCdWlsZGluZyIsIAogICAgIHhsYWIgPSAiU2VyaWVzIiwgeWxhYiA9ICJIZWF0IFBvd2VyIEluc2lkZSAoVykiKQpwb2ludHMoZGF0LmYkc2VyaWVzWyhuKzEpOihuKzQpXSwgZGF0LmYkaGVhdGluZ1sobisxKToobis0KV0sIAogICAgICAgY29sID0gImJsdWUiLCBsdHkgPSAxLCBwY2ggPSAxNiwgY2V4ID0gMC44KQpsZWdlbmQoInRvcGxlZnQiLCBpbnNldCA9IC4wMiwgbGVnZW5kID0gYygiVHJhaW5pbmcgRGF0YSIsICJUZXN0aW5nIERhdGEiKSwgY29sID0gYygiYmx1ZSIsICJibHVlIiksIAogICAgICAgcGNoID0gYyhOYU4sIDE2KSwgbHR5ID0gYygxLCAxKSwgbHdkID0gYygyLCAyKSkKYGBgCgpgYGB7ciwgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDExfQpwbG90KGRhdC5mJHNlcmllcywgZGF0LmYkdGVtcEV4dGVybmFsLCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIsIGx3ZCA9IDEsIGx0eSA9IDEsIGNleCA9IDAuOCwgYnR5ID0gIm4iLCAKICAgICBtYWluID0gIlRyYWluaW5nIGFuZCBUZXN0aW5nIERhdGEgb2YgRXh0ZXJuYWwgVGVtcGVyYXR1cmUiLCB4bGFiID0gIlNlcmllcyIsIHlsYWIgPSAiVGVtcGVyYXR1cmUgKENlbHNpdXMgRCkiKQpwb2ludHMoZGF0LmYkc2VyaWVzWyhuKzEpOihuKzgpXSwgZGF0LmYkdGVtcEV4dGVybmFsWyhuKzEpOihuKzgpXSwgCiAgICAgICBjb2wgPSAiYmx1ZSIsIGx0eSA9IDEsIHBjaCA9IDE2LCBjZXggPSAwLjgpCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGluc2V0ID0gLjAyLCBsZWdlbmQgPSBjKCJUcmFpbmluZyBEYXRhIiwgIlRlc3RpbmcgRGF0YSIpLCBjb2wgPSBjKCJibHVlIiwgImJsdWUiKSwgCiAgICAgICBwY2ggPSBjKE5hTiwgMTYpLCBsdHkgPSBjKDEsIDEpLCBsd2QgPSBjKDIsIDIpKQpgYGAKCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBmaWcuaGVpZ2h0ID0gNSwgZmlnLndpZHRoID0gMTF9CnBsb3QoZGF0LmYkc2VyaWVzLCBkYXQuZiRpU29sYXIsIHR5cGUgPSAibCIsIGNvbCA9ICJibHVlIiwgbHdkID0gMSwgbHR5ID0gMSwgY2V4ID0gMC44LCBidHkgPSAibiIsIAogICAgIG1haW4gPSAiVHJhaW5pbmcgYW5kIFRlc3RpbmcgRGF0YSBvZiBTb2xhciBJcnJhZGlhdGlvbiIsIHhsYWIgPSAiU2VyaWVzIiwgeWxhYiA9ICJTb2xhciBJcnJhZGlhdGlvbiAoVyAvIG0yKSIpCnBvaW50cyhkYXQuZiRzZXJpZXNbKG4rMSk6KG4rOCldLCBkYXQuZiRpU29sYXJbKG4rMSk6KG4rOCldLCAKICAgICAgIGNvbCA9ICJibHVlIiwgbHR5ID0gMSwgcGNoID0gMTYsIGNleCA9IDAuOCkKbGVnZW5kKCJ0b3BsZWZ0IiwgaW5zZXQgPSAuMDIsIGxlZ2VuZCA9IGMoIlRyYWluaW5nIERhdGEiLCAiVGVzdGluZyBEYXRhIiksIGNvbCA9IGMoImJsdWUiLCAiYmx1ZSIpLCAKICAgICAgIHBjaCA9IGMoTmFOLCAxNiksIGx0eSA9IGMoMSwgMSksIGx3ZCA9IGMoMiwgMikpCmBgYAoKIyBRdWVzdGlvbiAzLjIKCmBgYHtyfQojIFBsb3QgdGhlIHRpbWUgc2VyaWVzIC8gcmVzaWR1YWxzIGFuZCBpdHMgQUNGLCBQQUNGLCBhbmQgTGp1bmctQm94IHBsb3QKcGxvdFRpbWVTZXJpZXNSZXNpZHVhbCA8LSBmdW5jdGlvbihkYXQsIG51bV9sYWcgPSAyMCwgLi4uKXsKICAgICMgSWYgdGhlIGlucHV0IGRhdCBpcyBhcmltYSBtb2RlbCwganVzdCB0YWtlIGl0cyByZXNpZHVhbHMgYXJlIHRoZSBkYXQuCiAgICBpZihjbGFzcyhkYXQpID09ICJBcmltYSIpCiAgICAgICAgZGF0IDwtIGRhdCRyZXNpZHVhbHMKICAgIHBhcihtZnJvdyA9IGMoNCwgMSksIG1ncCA9IGMoMiwgMC43LCAwKSwgbWFyID0gYygxLCAxLCAxLCAxKSwgb21hID0gYygyLCAyLCA0LCAyKSwgCiAgICAgICAgY2V4LmxhYiA9IDAuOCwgY2V4LmF4aXMgPSAwLjgpCiAgICBwbG90KGRhdCwgdHlwZSA9ICJsIiwgYnR5ID0gIm4iKQogICAgdGl0bGUobWFpbiA9IHBhc3RlKCJUUywgQUNGLCBQQUNGIGFuZCBwIFZhbHVlcyBmb3IgTGp1bmctQm94IFN0YXRpc3RpYyIpLCBjZXgubWFpbiA9IDEuNSwgbGluZSA9IDEsIG91dGVyID0gVFJVRSkKICAgICMgQUNGIGFuZCBQQUNGCiAgICBhY2YoZGF0LCBsYWcubWF4ID0gbnVtX2xhZywgeGF4dCA9ICJuIiwgYnR5ID0gIm4iKQogICAgYXhpcygxLCBhdCA9IHNlcSgwLCAyMCwgYnkgPSAxKSwgbGFzID0gMCwgb3V0ZXIgPSBGQUxTRSkKICAgIHBhY2YoZGF0LCBsYWcubWF4ID0gbnVtX2xhZywgeGF4dCA9ICJuIiwgYnR5ID0gIm4iKQogICAgYXhpcygxLCBhdCA9IHNlcSgxLCAyMCwgYnkgPSAxKSwgbGFzID0gMCwgb3V0ZXIgPSBGQUxTRSkKICAgICMgTGp1bmctQm94IFBsb3QKICAgIHZhbHVlX3AgPC0gc2FwcGx5KDE6IG51bV9sYWcsIGZ1bmN0aW9uKGkpIEJveC50ZXN0KGRhdCwgaSwgdHlwZSA9ICJManVuZy1Cb3giKSRwLnZhbHVlKQogICAgcGxvdCgxTDogbnVtX2xhZywgdmFsdWVfcCwgeGxhYiA9ICJsYWciLCB5bGFiID0gInAgdmFsdWUiLCB5bGltID0gYygwLCAxKSwgYnR5ID0gIm4iLCB4YXh0ID0gIm4iKQogICAgYXhpcygxLCBhdCA9IHNlcSgxLCAyMCwgYnkgPSAxKSwgbGFzID0gMCwgb3V0ZXIgPSBGQUxTRSkKICAgIGFibGluZShoID0gMC4wNSwgbHR5ID0gMiwgY29sID0gImJsdWUiKQp9CmBgYAoKYGBge3IsIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQgPSAxMSwgZmlnLndpZHRoID0gMTF9CnBsb3RUaW1lU2VyaWVzUmVzaWR1YWwoZGF0LmYkaGVhdGluZykKYGBgCgojIFF1ZXN0aW9uIDMuMzogQVJJTUEgTW9kZWwKCmBgYHtyfQptb2RfYXJpbWFfMSA8LSBhcmltYShkYXQuZiRoZWF0aW5nLCBvcmRlciA9IGMoMSwgMCwgMCkpCm1vZF9hcmltYV8xCmBgYAoKYGBge3IsIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQgPSAxMSwgZmlnLndpZHRoID0gMTF9CnBsb3RUaW1lU2VyaWVzUmVzaWR1YWwobW9kX2FyaW1hXzEpCmBgYAoKYGBge3IsIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQgPSAxMSwgZmlnLndpZHRoID0gMTF9Cm1vZF9hcmltYV8yIDwtIGFyaW1hKGRhdC5mJGhlYXRpbmcsIG9yZGVyID0gYygxLCAwLCAwKSwgaW5jbHVkZS5tZWFuID0gRikKbW9kX2FyaW1hXzIKcGxvdFRpbWVTZXJpZXNSZXNpZHVhbChtb2RfYXJpbWFfMikKYGBgCgpgYGB7ciwgd2FybmluZz1GQUxTRSwgZmlnLmhlaWdodCA9IDExLCBmaWcud2lkdGggPSAxMX0KbW9kX2FyaW1hXzMgPC0gYXJpbWEoZGF0LmYkaGVhdGluZywgb3JkZXIgPSBjKDEsIDAsIDIpKQptb2RfYXJpbWFfMwpwbG90VGltZVNlcmllc1Jlc2lkdWFsKG1vZF9hcmltYV8zKQpgYGAKCgoKCgoKCgoKCgoKCgo=