原文链接:
http://tecdat.cn/?p=9024tecdat.cn用GAM进行建模时间序列
我已经准备了一个文件,其中包含四个用电时间序列以进行分析。数据操作将由data.table
程序包完成。
将提及的智能电表数据读到data.table
。
DT <- as.data.table(read_feather("DT_4_ind"))
使用GAM回归模型。将工作日的字符转换为整数,并使用recode
包中的函数car
重新编码工作日,以适应一周中出现的情况:1.星期一,…,7星期日。
DT[, week_num := as.integer(car::recode(week,
"'Monday'='1';'Tuesday'='2';'Wednesday'='3';'Thursday'='4';
'Friday'='5';'Saturday'='6';'Sunday'='7'"))]
将信息存储在日期变量中,以简化工作。
n_type <- unique(DT[, type])
n_date <- unique(DT[, date])
n_weekdays <- unique(DT[, week])
period <- 48
让我们看一下用电量的一些数据并对其进行分析。
data_r <- DT[(type == n_type[1] & date %in% n_date[57:70])]
ggplot(data_r, aes(date_time, value)) +
geom_line() +
theme(panel.border = element_blank(),
panel.background = element_blank(),
panel.grid.minor = element_line(colour = "grey90"),
panel.grid.major = element_line(colour = "grey90"),
panel.grid.major.x = element_line(colour = "grey90"),
axis.text = element_text(size = 10),
axis.title = element_text(size = 12, face = "bold")) +
labs(x = "Date", y = "Load (kW)")
![eae5a5a3e23f4ec4ca41f25e1c7fda4a.png](https://i-blog.csdnimg.cn/blog_migrate/f07a74b6080f43cbdd63dd71757a993f.png)
在绘制的时间序列中可以看到两个主要的季节性:每日和每周。我们在一天中有48个测量值,在一周中有7天,因此这将是我们用来对响应变量进行建模的自变量–电力负荷。
训练我们的第一个GAM。通过平滑函数s
对自变量建模,对于每日季节性,使用三次回归样条,对于每周季节性,使用P样条。
gam_1 <- gam(Load ~ s(Daily, bs = "cr", k = period) +
s(Weekly, bs = "ps", k = 7),
data = matrix_gam,
fami