R语言effects包plot中如何移除分类变量水平间的连接线?
移除effects包分类变量效应图的水平间连接线
首先解决你遇到的报错问题:
你用predictorEffects(M1)得到的是效应对象列表,直接在plot()里传入PexCP$treatment是错误的,应该以字符串形式指定要绘制的效应名称,比如你的分类变量是treatment,就写成plot(p, "treatment", ...)。
下面是移除连接线的正确方法,分两种场景说明:
场景1:单个变量的效应图(用predictorEffect)
如果单独提取某个分类变量的效应(如你参考的vignette示例),直接在plot()中设置lines = list(multiline = FALSE)即可移除水平间的连接线:
library(effects) library(car) # 示例数据代码 Prestige$type <- factor(Prestige$type, levels=c("bc", "wc", "prof")) lm1 <- lm(prestige ~ education + poly(women, 2) + log(income)*type, data=Prestige) # 提取单个分类变量的效应 e3.lm1 <- predictorEffect("type", lm1) # 绘制时关闭多线连接,移除分类水平间的线条 plot(e3.lm1, lines = list(multiline = FALSE))
场景2:多个变量的效应列表(用predictorEffects)
如果通过predictorEffects()得到多变量的效应列表,绘制其中某个分类变量的效应图时,同样用lines = list(multiline = FALSE)参数,同时注意指定目标效应的名称:
# 假设M1是你的模型对象 p <- predictorEffects(M1) # 绘制treatment变量的效应图,移除水平间连接线 plot(p, "treatment", main=paste("treatment", "effect plot"), symbols=TRUE, lines = list(multiline = FALSE))
补充说明
effects包的plot()函数中,lines参数不是简单的布尔值,而是用于控制线条属性的列表。直接传lines=FALSE会不符合参数格式要求,而lines = list(multiline = FALSE)才是关闭分类水平间连接线的正确方式。
内容的提问来源于stack exchange,提问作者CaroZ
相关产品推荐
相关产品推荐

