我有一个月中几天的每小时温度和功耗数据。这种模式在这样的日子里几乎是相似的:

使用这些数据,我想预测未来一天的使用情况。我有特点:1)一天中的小时2)温度;和响应变量,功率。看数据,我相信我应该拟合三个独立的模型而不是一个模型
- 从午夜到上午 10 点的数据的第一个模型,因为在此期间使用量几乎保持不变,并且温度变化不大
- 从上午 11 点到下午 6 点的数据的第二个模型。这部分急剧增加,然后几乎恒定使用
- 从晚上 7 点到午夜的数据的第三个模型。这部分显示功率不断下降
为了遵循这种直觉,我相应地使用了三个模型,然后将这些模型的预测结合起来,输出未来一天的 24 个数字序列。这些模型中的每一个的公式是:
lm(power ~ time_hour + temperature, data = xxx),但是每个模型都使用与一天中特定时间段相对应的数据进行训练。
除了手动划分数据并使用三个单独的模型之外,还有其他现有技术可以照顾我们的直觉并且不需要手动划分数据或创建单独的模型。
在我的搜索过程中,我发现我可以使用 GAM(广义加法模型)并且我想出了以下公式
library(splines)
lm(power ~ ns(time_hour, knots =(9, 18)) + temperture, data = xxx)
使用上面的公式,我认为我在上午 9 点和下午 6 点打结。对?我不知道我应该如何在这些特定时间准确地执行温度特征的节点,以便节点temperature和节点time_hour同步。
上面的图是使用以下数据绘制的:
dframe <- structure(list(time_hour = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24), temperature = c(22.5,
24, 23.5, 20.5, 22.5, 22.5, 19.5, 23.5, 23, 20.5, 26.5, 28.5,
30, 32, 33.5, 33, 30.5, 30, 29.5, 29, 28, 27, 28, 28.5), power = c(97.04319,
95.7225, 88.59191, 88.34882, 90.17179, 88.82062, 87.73833, 89.36342,
85.31775, 91.1292, 116.79035, 149.58614, 172.32438, 171.27931,
159.53858, 162.03544, 170.78468, 164.0275, 155.86717, 135.77197,
133.01235, 116.29253, 100.87483, 97.84942)), .Names = c("time_hour",
"temperature", "power"), row.names = c(NA, -24L), class = "data.frame")
使用的最少代码是:
par(mfrow= c(1,2))
plot(dframe$time_hour ,dframe$power,type="l",xlab = "Hour of day", ylab = "power" )
plot(dframe$time_hour ,dframe$temperature,type="l",xlab = "Hour of day", ylab = "Temperature" )





