You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:32:12