我使用R函数glmer
定义了二元响应混合效果模型,如下所示:
fit <-glmer(binary_r ~ cat1 + (1 | SUBJECTIDf) + (1 | cat2) + (1 | cat1:cat2),
family = binomial("logit"), data = mydata))
其中cat1
和cat2
是分类变量,SUBJECTIDf
表示标记研究的各个主题的因子变量。此外,SUBJECTIDf
和cat2
是交叉分类的因素。
我想针对上述模型执行以下操作:
创建一个表格,显示与cat1和cat2相关的每个类别组合的积极响应概率;
创建一个图(可能是一个毛虫图),显示a)中定义的概率;
和
我假设为了达到上述结果,假设上面1中定义的个体概率形成为cat1和cat2的给定组合的所有受试者的平均值或中位数。< / p>
我非常感谢有关如何继续的建议。
答案 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)
我在考虑cat1
和cat2
未进行交叉分类的设计考虑方面遇到了一些麻烦。我会敲掉一些类别:
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,但不是一次我们回溯到概率尺度。)
获取数据中找到的cat1
和cat2
的唯一组合:
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.下定义的概率的摘要统计,包括最小和最大概率。
除非我们采用分解的路线,否则这对我来说并不合理。如果我们已经预测了cat1
和cat2
的每个组合,那么我们每个组合只有一个值(即,没有&#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))