用混合效应模型预测R中的概率

时间:2016-11-07 23:10:22

标签: r binary-data prediction mixed-models multi-level

我使用R函数glmer定义了二元响应混合效果模型,如下所示:

fit <-glmer(binary_r ~ cat1 + (1 | SUBJECTIDf) + (1 | cat2) + (1 | cat1:cat2), 
                                  family = binomial("logit"), data = mydata))

其中cat1cat2是分类变量,SUBJECTIDf表示标记研究的各个主题的因子变量。此外,SUBJECTIDfcat2是交叉分类的因素。

我想针对上述模型执行以下操作:

  1. 创建一个表格,显示与cat1和cat2相关的每个类别组合的积极响应概率;

  2. 创建一个图(可能是一个毛虫图),显示a)中定义的概率;

    1. 为与cat1和cat2相关的所有类别组合创建在1.下定义的概率的摘要统计,包括最小和最大概率。
    2. 我假设为了达到上述结果,假设上面1中定义的个体概率形成为cat1和cat2的给定组合的所有受试者的平均值或中位数。< / p>

      我非常感谢有关如何继续的建议。

1 个答案:

答案 0 :(得分:0)

由于您没有提供可重现的示例,我将模拟一个...... 这部分答案仅是设置示例数据集

## crossed cat2 and SUBJECTIDf
dd <- expand.grid(cat2=factor(letters[1:10]),
                  SUBJECTIDf=factor(1:10))
## each subject gets one value of cat1:
## for example, half get A while half get B
cat_tab <- data.frame(SUBJECTIDf=factor(1:10),cat1=rep(c("A","B"),5))
dd <- merge(dd,cat_tab)

我在考虑cat1cat2未进行交叉分类的设计考虑方面遇到了一些麻烦。我会敲掉一些类别:

dd <- with(dd,dd[!(cat1=="A" & cat2 %in% c("a","b","c")),])

现在我们设计了设计,我们模拟了响应值:

library(lme4)
form <- binary_r ~ cat1 + (1 | SUBJECTIDf) + (1 | cat2) + (1 | cat1:cat2)
dd$binary_r <- simulate(form[-2],  ## RHS only
         family=binomial,
         newdata=dd,
         newparams=list(beta=0:1,
                        theta=c(2,4,1)),
         seed=101)[[1]]

在这一点上,我们提供了适合您的模型。

fit <- glmer(form, family = binomial, data=dd)
  

创建一个表格,显示与cat1和cat2相关的每个类别组合的积极响应概率;

通过设置下面的re.form来排除主题ID,我们隐式计算假设中位个体的值(即,随机效果设置为零;平均值和中位数预测重合于logit scale,但不是一次我们回溯到概率尺度。)

获取数据中找到的cat1cat2的唯一组合:

newdd <- unique(dd[,c("cat1","cat2")])
newdd$SUBJECTIDf <- NA  ## need to have SUBJECTIDf in the data frame ...
t1 <- predict(fit,newdata=newdd,type="response",
              re.form=~(1|cat2)+(1|cat1:cat2))
newdd <- data.frame(newdd[,c("cat1","cat2")],pred=t1)
head(newdd)
##   cat1 cat2        pred
## 4    A    d 0.215336024
## 5    A    e 0.944897414
## 6    A    f 0.036751551
## 7    A    g 0.003819873
## 8    A    h 0.970115614
## 9    A    i 0.003819873

我们还可以按如下方式计算所有个体的预测:

## we happen to have a factorial design, but expand.grid() would
## e.g. fill in missing values
newdd2 <- unique(dd[,c("cat1","cat2","SUBJECTIDf")])
t2 <- predict(fit,newdata=newdd2,type="response",
              re.form=NULL)
newdd2$pred <- t2
head(newdd2)

为了创建情节(见下文),我们必须在类别组合中对个人进行总结。

  

创建一个图(可能是一个毛虫图),显示a)中定义的概率;

library(ggplot2); theme_set(theme_bw())
ggplot(newdd,aes(cat2,pred,colour=cat1))+
   geom_point()+scale_colour_brewer(palette="Set1")

或者,聚合特定主题的预测:

ggplot(newdd2,aes(cat2,pred,colour=cat1))+
   stat_summary(fun.y=mean,geom="point")+
   scale_colour_brewer(palette="Set1")

我们可以在reorder()类别上使用cat2来尝试获得更明智的订单,但由于存在cat1:cat2互动,因此可能效果不佳。卡特彼勒图(即获得预测的不确定性)有点棘手,因为难以获得将条件模式(单个随机效应的值)和固定效应的不确定性结合起来的预测的不确定性。可以通过(1)假设条件模式和固定效果是独立的或(2)参数自举(bootMer)来完成,但两者都比我现在愿意采取的更麻烦。

  

为与cat1和cat2相关的所有类别组合创建在1.下定义的概率的摘要统计,包括最小和最大概率。

除非我们采用分解的路线,否则这对我来说并不合理。如果我们已经预测了cat1cat2的每个组合,那么我们每个组合只有一个值(即,没有&#34; min / max&#34;概率)。在基数R中聚合很容易,例如

 aggregate(pred~cat1:cat2,data=newdd2,
            FUN=function(x) c(min=min(x),max=max(x)))

或在tidyverse:

 library(dplyr)
 newdd2 %>% group_by(cat1,cat2) %>%
     summarise(min=min(pred),max=max(pred))