使用 ggeffects::plot(predict_response) 和 connect_lines 删除线条并断开离散点

问题描述 投票:0回答:1

我使用

ggffects
绘制多变量 GEE 模型的预测概率 (
options(ggeffects::ggeffects_margin = "marginalmeans"
)),该模型具有使用
geepack
建模的二元预测变量(编码为 1,2)。我遇到了一些旧代码的新问题,我认为这些代码是在 ggeffects 版本 1.5.0 下编写的。我尝试重新安装该版本但没有解决问题。

有没有办法删除连接绘图上离散点的线?

使用此代码



ggeffects::plot(
  predict_response(GEE model, terms = "x"),
  ci_style = "errorbar"
) +
  ggplot2::scale_x_continuous(
    labels = c("\n No",
               "\n Yes"),
    breaks = c(1, 2),
    expand = c(0,0)
  )

生成此图 enter image description here

我想删除连接点的线

当我尝试使用 connect_lines 参数删除连接离散点的线时,它不会删除它,并且我得到与上面相同的图表

ggeffects::plot(
  predict_response(GEE model, terms = "x"),
  ci_style = "errorbar",
  connect_lines = FALSE
) +
  ggplot2::scale_x_continuous(
    labels = c("\n No",
               "\n Yes"),
    breaks = c(1, 2),
    expand = c(0,0)
  )

[1] stringr_1.5.1   forcats_1.0.0   patchwork_1.2.0 ggeffects_1.7.2 [5] geepack_1.3.12  gtsummary_2.0.3 ggplot2_3.4.4   dplyr_1.1.4

我还在 Github 上提出了一个问题 https://github.com/strengejacke/ggeffects/issues/596

r ggplot2 ggeffects
1个回答
0
投票

ggplot2
的好处之一是
ggplot
对象基本上是一个大型嵌套的
list
,在大多数情况下可以进行操作,即在您的情况下,我们可以删除添加连接线的
geom_line
层.

首先,让我们从基于

geepack

中的默认示例的最小可重现问题示例开始
library(geepack)
library(ggeffects)

### Example adapted from the geepack user guide
n_cluster <- 6
n_time <- 2
set.seed(1213)
timeorder <- rep(1:n_time, n_cluster)
x <- timeorder
idvar <- rep(1:n_cluster, each = n_time)
uuu <- rep(rnorm(n_cluster), each = n_time) # A 'random intercept'
yvar <- 1 + 2 * x + uuu + rnorm(length(x))
simdat <- data.frame(idvar, timeorder, x, yvar)

mod1 <- geeglm(yvar ~ x, id = idvar, data = simdat, corstr = "ar1")
###

p <- plot(
  predict_response(mod1, terms = "x"),
  ci_style = "errorbar"
) +
  ggplot2::scale_x_continuous(
    labels = c(
      "\n No",
      "\n Yes"
    ),
    breaks = c(1, 2)
  )

p

现在,要删除连接线,可以查看构成绘图的图层:

p$layers
#> [[1]]
#> mapping: group = ~.data[["group"]] 
#> geom_line: na.rm = FALSE, orientation = NA
#> stat_identity: na.rm = FALSE
#> position_identity 
#> 
#> [[2]]
#> geom_point: na.rm = FALSE
#> stat_identity: na.rm = FALSE
#> position_dodge 
#> 
#> [[3]]
#> mapping: ymin = ~.data[["conf.low"]], ymax = ~.data[["conf.high"]], shape = NULL 
#> geom_errorbar: na.rm = FALSE, orientation = NA, width = 0
#> stat_identity: na.rm = FALSE
#> position_dodge

从这个输出中,我们看到共有三层,第一层是

geom_line
,并且只有一个
geom_line
。要删除该层,我们可以将其设置为
NULL
:

p$layers[[1]] <- NULL

p

© www.soinside.com 2019 - 2024. All rights reserved.