R语言 向“效应图”添加水平线,每个面板具有不同截距

mrwjdhj3  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(200)

我正在使用效应包绘制有序logistic回归的效应,我想向多面板图添加一条不同的水平线(如果预测变量没有效应,则表示预期基线概率),图中每个面板的基线概率都不同。
下面是一个示例数据集:

# Simulate some data
data = data.frame(predictor_x = rnorm(100, mean = 5, sd = 1),
                    response_y = as.factor(rbinom(100, size = 2, prob = 0.5)))
# Make a model
library(MASS)
model = polr(response_y ~ predictor_x, data = data, Hess= TRUE)
# Plot
library(effects)
p1 = plot(Effects(focal.predictor = "predictor_x", model))
# View
p1
# Try to add a red dashed line for expected probabilities
p1 + abline(h = c(0.25, 0.5, 0.25), col = "red", lty = 3) #failed

给定这些图,我想在y = 0.25处添加一条水平线,用于上图,y = 0.5用于中图,y = 0.25用于下图。
此外,我知道+通常是ggplot格式,所以我也不确定这是否会工作,或者如果你可以/如何添加更多的信息(如一条线)到一个保存的绘图对象?

pnwntuvh

pnwntuvh1#

Effect对象的plot方法使用lattice绘图系统,该系统既不基于base R也不基于ggplot。然而,ggeffect包可以使用ggplot框架有效地生成相同的绘图,该框架更容易使用。在您的情况下,我们可以执行以下操作:

library(MASS)
library(effects)
library(ggeffects)

data <- data.frame(predictor_x = rnorm(100, mean = 5, sd = 1),
                  response_y = as.factor(rbinom(100, size = 2, prob = 0.5)))

model <- polr(response_y ~ predictor_x, data = data, Hess= TRUE)

p1 <- plot(ggeffect(model))$predictor_x

p1$facet$params$nrow <- 3

p1 + 
  geom_hline(data = data.frame(response.level = c("X0", "X1", "X2"),
                               y = c(0.25, 0.5, 0.25)),
             aes(yintercept = y), color = "red3", linetype = 2) +
  geom_rug(data = within(data, response.level <- paste0("X", response_y)),
                         aes(x = predictor_x, y = 0.5), sides = "b")

相关问题