d <- read.csv('https://stats.dip.jp/01_ds/data/load/load_tp_y2022_h12_tokyo.csv')
rownames(d) <- paste0('No.',1:nrow(d))
colnames(d) <- c('date','hr','gw','tp')
library(DT)
datatable(d)
n <- nrow(d)
ii.tr <- sample(1:n,size = floor(0.8*n))
d.tr <- d[ ii.tr, ]
d.te <- d[-ii.tr, ]
fit <- lm(gw ~ tp,data = d.tr)
gwhat <- predict(fit,newdata = d.te)
RMSE <- sqrt(mean((d.te$gw -gwhat)^2))
RMSE
## [1] 6.282425
get.accuracy <- function(yhat,y,digits = 2)
{
d <- data.frame(MBE = mean(yhat - y),
MAE = mean(abs(yhat - y)),
MAPE = mean(abs((yhat - y) / y)) * 100,
RMSE = sqrt(mean((yhat - y)^2)))
return(round(d,digits))
}
(a <- get.accuracy(d.te$gw,gwhat))
## MBE MAE MAPE RMSE
## 1 0.24 5.27 14.46 6.28
fit <- lm(gw ~ poly(tp,2,raw = TRUE),data = d)
library(sjPlot)
tab_model(fit)
|
gw
|
Predictors
|
Estimates
|
CI
|
p
|
(Intercept)
|
57.11
|
55.11 – 59.10
|
<0.001
|
tp [1st degree]
|
-2.85
|
-3.07 – -2.62
|
<0.001
|
tp [2nd degree]
|
0.08
|
0.07 – 0.08
|
<0.001
|
Observations
|
364
|
R2 / R2 adjusted
|
0.693 / 0.691
|
tp.p <- seq(0,50,1)
conf <- predict(fit,newdata = data.frame(tp = tp.p),interval = 'confidence')
pred <- predict(fit,newdata = data.frame(tp = tp.p),interval = 'prediction')
COL <- c(rgb(255, 0, 0,105,max = 255),
rgb( 0, 0,255,105,max = 255),
rgb( 0,155, 0,105,max = 255),
rgb(140,140,140,105,max = 255),
rgb(180,180,180,105,max = 255))
matplot (x = d$tp,y = d$gw,type = 'p',pch = 16,col = COL[1],ylim = c(20,80),main = '2次多項式回帰モデルを使った需要予測',xlab = '気温[℃]',ylab = '電力需要[GW]')
gray.area <- function(x,lwr,upr,col)
{
polygon(c(x,rev(x)),c(lwr,rev(upr)),col = col,border = NA)
}
gray.area(tp.p,conf[,'lwr'],conf[,'upr'],col = COL[4])
gray.area(tp.p,pred[,'lwr'],pred[,'upr'],col = COL[5])
matlines(x = tp.p,y = conf[,'fit'],col = COL[2],lwd = 3)
legend('topright',
pch = c(16,NA,NA,NA),col = COL[-3],
lty = c(NA,1,NA,NA),lwd = c(NA,3,NA,NA),
fill = c(NA,NA,COL[4],COL[5]),border = F,
legend = c('電気','予測値','95%信頼区間','95%予測区間'))
