如何在R中筛选plot(allEffects(model))输出的指定绘图?
只展示
allEffects()输出中的特定绘图 你完全不需要去修改R生成图形数组的底层机制——effects包本身就提供了两种简洁的方法来筛选你想要的效应图,不用先生成所有10个图再处理。
方法1:先生成所有效应,再筛选特定项绘图
allEffects()返回的是一个efflist对象(本质是列表),其中每个元素对应一个单独的效应图。你可以先把效应结果存到变量里,查看所有效应的名称,再提取你关注的那两个来绘图:
# 1. 生成所有效应并存储(保留你的multiline参数) effs <- allEffects(glmer1, multiline = TRUE) # 2. 查看所有效应的名称,找到你需要的那两个 names(effs) # 输出会类似对应不同条件组合的效应名称,比如: # [1] "categoricalv1:dimensionalv1:categoricalv2:dimensionalv2 (catv2=0, dimv2=-4)" # [2] "categoricalv1:dimensionalv1:categoricalv2:dimensionalv2 (catv2=0, dimv2=0)" # ...(共10个) # 3. 提取你关注的效应(比如第2和第5个,或者用名称)并绘图 plot(effs[c(2, 5)], ylab="Proportion", xlab="Standardized Dimensional V1", main="", type="rescale", rescale.axis=FALSE, ci.style="band")
如果知道你需要的效应的具体名称,也可以用名称精准筛选:
plot(effs[c("categoricalv1:dimensionalv1:categoricalv2:dimensionalv2 (catv2=0, dimv2=-4)", "categoricalv1:dimensionalv1:categoricalv2:dimensionalv2 (catv2=1, dimv2=2)")], # 你的绘图参数... )
方法2:直接指定terms参数,只生成你需要的效应
更高效的方式是在调用allEffects()时,通过terms参数直接指定你关注的交互效应(或特定条件下的效应),这样函数只会生成你需要的内容,避免多余计算:
# 替换成你实际关注的两个效应的条件组合 target_effects <- allEffects(glmer1, terms = c("categoricalv1*dimensionalv1*categoricalv2*dimensionalv2 | catv2=0, dimv2=-4", "categoricalv1*dimensionalv1*categoricalv2*dimensionalv2 | catv2=1, dimv2=2"), multiline = TRUE) # 绘制目标效应 plot(target_effects, ylab="Proportion", xlab="Standardized Dimensional V1", main="", type="rescale", rescale.axis=FALSE, ci.style="band")
这里的terms参数支持用|来指定特定的条件组合(比如你示例中的catv2=0, dimv2=-4),精准生成你需要的那两个效应图。
这样就能完美实现只展示你关注的2个绘图,不用处理多余的图形啦。
内容的提问来源于stack exchange,提问作者alessothegreat
相关产品推荐
相关产品推荐

