我使用
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)
)
我想删除连接点的线
当我尝试使用 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
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