这章主要讲的是贝叶斯理论在多层次模型中的运用
贝叶斯回归
用贝叶斯理论建立回归模型也是目前比较新的一种办法:
参考:https://zhuanlan.zhihu.com/p/86009986
以一元回归为例,其实当我们确定一个决策变量的值,带入我们计算出来的回归方程中,每次所计算的响应变量的值都是不同的,因此可以拟合成一个分布:
而对于每一个确定的决策变量,带入我们计算出来的回归方程中,做若干次线性回归预测计算如下:
我们看到每一个确定的决策变量点对应的响应变量都呈现出一定的波动
在贝叶斯回归中导致这个现象其实是因为我们假定回归参数满足一个先验分布:
这样就造成了响应变量值的波动
[图片上传失败...(image-f8574c-1581498793833)]
ω不再是存在一个固定的最优值,而是服从一个分布,也即是说它是一个随机变量,因此:
y帽 也可以看作是一个随机变量的函数:
MCMC Estimation
这一部分我仅仅做简单的介绍:
对推导有兴趣的同学可以参阅一下:
《贝叶斯统计》 茆诗松
《贝叶斯统计及其R实现》黄长全
MCMC是一种反复利用先验的密度分布结合样本的一些具体信息来估计后验的密度分布的模型参数(比方说回归系数,随机影响等),对于后验密度分布来说,它的参数值将进行许多次的模拟
我们对每个样本进行随机取样,当每一个样本被画上去,后验值都会更新,这个取样和更新的过程将会重复好多次,直到发现后验密度分布收敛为止
MCMC分为两个部分, Markov chain 反应取样的随机过程, Monte Carlo segment 反应后验概率分布的随机模拟
MCMCglmm for Normally Distributed Response Variable
对于正态分布数据,例如阅读分数和词汇分数是两个独立变量,而学生嵌套在学校里面
我们在R里面可以利用MCMCglmm()函数进行建模:
library(MCMCglmm)
prime_time.nomiss<-na.omit(prime_time)
attach(prime_time.nomiss)
model9.1<-MCMCglmm(geread~gevocab, random = ~school, data = prime_time.nomiss)
plot(model9.1) summary(model9.1)
比方说,post.mean表示拟合的概率密度函数的均值参数 ;1 - 95% CI表示密度分布函数的95%左极限,u - 95% CI表示95%右极限,这个指标代表密度函数的分布的胖瘦程度
而在贝叶斯回归中,Location effect这项中,斜率项和截距项不再是存在一个固定的最优值,而是服从一个分布,也即是说它是一个随机变量
其中MCMCglmm()重复MCMC算法13000次
由图可知,贝叶斯回归的截距项模拟如上部所示,词汇分数的模拟如下部所示
贝叶斯回归的学校项如上部所示,残差项的模拟如下部所示
我们通过:
#VCV
autocorr(model9.1$VCV)
#Sol
autocorr(model9.1$Sol)
可以参看模拟的具体过程中的相关性,其实模拟的过程可以看成类似的时间序列分析
这里的units代表残差
这个结果代表的是相关性,即school与units的相关性,以及lag 0 school(units)与各个lag的school(units)的自相关
左上角的school(units)代表的是no lag的school(units)分别与下面的各个lag的school(units)计算相关性
比方说no lag school与no lag 的units的相关性为-0.0549,10 lags先验的school估计值与0 lag units的相关性为-0.035
类似的:
也一样
接下来,我们限制一下模拟次数(10000次)
model9.1b<-MCMCglmm(geread~gevocab, random = ~school, data = prime_time.nomiss, nitt = 100000, thin = 50, burnin = 10000) plot(model9.1b) summary(model9.1b)
固定效应多元
model9.2<-MCMCglmm(geread~gevocab+senroll, random = ~school, data = prime_time.nomiss) plot(model9.2)
我们看下相关性和自相关性:
#VCV
autocorr(model9.2$VCV)
#Sol
autocorr(model9.2$Sol)
我们看下具体的参数情况:
summary(model9.3)
两项随机效应
这里只做结果展示
model9.4<-MCMCglmm(geread~gevocab, random = ~school+gevocab, data = prime_time.nomiss) plot(model9.4) summary(model9.4)
再来是相关性与自相关:
#VCV
autocorr(model9.4$VCV)
#Sol
autocorr(model9.4$Sol)
最后我们看下模型指标:
summary(Model9.4)