我一直在使用 R 中的“glmer”来模拟大约 500 人的二元结果,分成两组,每组在三个时间点测量。我感兴趣的问题是 a) 组之间随时间的变化是否不同,以及 b) 一个组中是否存在整体更高的响应。
这是我当前模型的稍微简化的版本。
m <- glmer(Shop ~ Time + Group + Time:Group + (1 | subj),
data = Shopping, family = binomial,
control = glmerControl(optimizer = "bobyqa"), nAGQ = 10)
我从这个混合效应逻辑模型中得到了一个我认为合理的结果,但我想看看贝叶斯方法是否会得出任何不同的结论。老实说,我主要想了解贝叶斯替代我多年来使用的那种“频率论”模型。
我应该在这里研究什么 R 程序?我知道在同名的 R 包中有一个叫“blme”。对于贝叶斯建模的新手来说,这是否适用于我的示例问题?
编辑
brms 的建议非常贴切。我加载了 brms、rstan 和 loo 包,并能够将 loo 和 kfold 类型的类似 AIC 的统计数据与 PROC GLIMMIX 给出的拟合统计数据进行比较(SAS 是我常用的工作工具,也是最初运行该模型的地方)。
我还扩展了它来比较更简单(没有随机截距)和过度拟合的稻草人替代模型,只是为了让自己熟悉 GLIMMIX 和 Stan 世界中的变体模型是如何存在的。
require(brms)
require(rstan)
require(loo)
options(mc.cores = parallel::detectCores())
rstan_options(auto_write = TRUE)
m_stan <- brm(FMshop ~ Time*Group + ( 1 | subj) +
age_BL,
data = Shopping, family = bernoulli)
m_stan_nomixed <- brm(FMshop ~ Time*Group +
age_BL,
data = Shopping, family = bernoulli)
m_stan_rantime <- brm(FMshop ~ Time*Group + ( 1 + Time | subj ) +
age_BL,
data = Shopping, family = bernoulli)
m_stan_kfold<-kfold(m_stan,K=10)
m_stan_kfold_nomixed<-kfold(m_stan_nomixed,K=10)
compare(m_stan_kfold,m_stan_kfold_nomixed)
m_stan_kfold_rantime<-kfold(m_stan_rantime,K=10)
compare(m_stan_kfold,m_stan_kfold_rantime)