我提供了一个来自大气科学的 R 小演示。考虑因季节(冬季、夏季……)和地轴倾斜等原因而变化的臭氧层。您可以在下面看到一些每月的变化
(图片来源在这里。)
在这里可以看到图层中有一些月度函数。如果您询问总趋势(而不是月度数据),您最好使用标准线性回归,而分层/混合模型可以帮助您回答特定于月份的问题,例如
> coef(fitML_)
(Intercept) Month
15.656673 3.677636
> coef(fitML_hierarchial)
$Month
(Intercept)
5 25.52226
6 32.48859
7 57.14909
8 57.90293
9 32.40247
attr(,"class")
[1] "coef.mer"
唉 R 的臭氧数据只有半年之久。
小工作示例
library(ggplot2)
library(lme4)
library(forecast)
library(lmerTest)
library(gridExtra)
data(airquality)
ggplot(data=airquality) + aes(y=Ozone, x=as.Date(as.character(paste("20180", airquality$Month, airquality$Day, sep="")), format="%Y%m%d") ) + geom_smooth()
fitML_ <- lm(data=airquality, Ozone ~ Month)
fitML_hierarchial <- lmerTest::lmer(data=airquality, Ozone ~ 1 + (1|Month))
predLM_ <- predict(fitML_)
predLM_hierarchial <- predict(fitML_hierarchial)
predDates_<-seq.Date(as.Date(as.character("20181001"), format="%Y%m%d"), by = 1, length.out = 116)
#LM
g1<-ggplot(data=airquality) + aes(y=Ozone, x=as.Date(as.character(paste("20180", airquality$Month, airquality$Day, sep="")), format="%Y%m%d") ) + geom_smooth() + geom_smooth(data=data.frame(predDates=predDates_, predML=predLM_), aes(x=predDates_, y=predLM_))
#LM hierarchial
g2<-ggplot(data=airquality) + aes(y=Ozone, x=as.Date(as.character(paste("20180", airquality$Month, airquality$Day, sep="")), format="%Y%m%d") ) + geom_smooth() + geom_smooth(data=data.frame(predDates=predDates_, predML=predLM_), aes(x=predDates_, y=predLM_hierarchial))
grid.arrange(g1, g2)
#ggplot(data=airquality) + aes(y=Ozone, x=as.Date(as.character(paste("20180", airquality$Month, airquality$Day, sep="")), format="%Y%m%d") ) + geom_smooth() + geom_point(aes(x=as.Date("20180701", format="%Y%m%d"), y=25), colour="red")

在这里你可以看到层次模型试图预测每月的波动,而线性回归只是最小化整个数据的 R2。
唉,如果数据更长,你应该得到更好的预测,这里我们每个月只有一个数据点,因此预测质量很差。