在 R 中获取 sjPlot 以显示和排序估计值

Get sjPlot in R to show and sort estimates

我正在尝试在 sjPlot 中制作交互图,以显示在我的预测变量的两个条件下我的结果的概率百分比。一切正常,除了 show.values = T 和 sort.est = T 参数,它们似乎什么也没做。有没有办法让它工作?或者,如果没有,我如何提取 sjPlot 用于创建此图的数据框?寻找某种方法来标记或制表显示的概率值。谢谢!

这是一些示例数据以及我目前拥有的数据:

set.seed(100)
dat <- data.frame(Species = rep(letters[1:10], each = 5),
                  threat_cat = rep(c("recreation", "climate", "pollution", "fire", "invasive_spp"), 10),
                  impact.pres = sample(0:1, size = 50, replace = T),
                  threat.pres = sample(0:1, size = 50, replace = T))

mod <- glm(impact.pres ~ 0 + threat_cat/threat.pres, 
           data = dat, family = "binomial")

library(sjPlot)
library(ggpubr)
plot_model(mod, type = "int", 
           title = "", 
           axis.title = c("Threat category", "Predicted probabilities of threat being observed"), 
           legend.title = "Threat predicted",
           colors = c("#f2bf10",
                      "#4445ad"),
           line.size = 2,
           dot.size = 4,
           sort.est = T,
           show.values = T)+
  coord_flip()+
  theme_pubr(legend = "right", base_size = 30)

sjPlot 生成一个 ggplot 对象,因此您可以检查美学映射和基础数据。经过一番挖掘后,您会发现默认映射对于文本标签的 x、y 位置已经正确,因此您需要做的就是在图中添加一个 geom_text,只需要指定标签作为美学映射。您可以从存储在 ggplot 对象中的名为 predicted 的列中获取标签。

结果是,如果您将以下图层添加到绘图中:

geom_text(aes(label = scales::percent(predicted)), 
          position = position_dodge(width = 1), size = 8)

你得到

整理标签比较棘手。您必须 fiddle 使用绘图的内部组件才能执行此操作。假设我们将上面的图存储为 p,那么我们可以按预测百分比排序:

p$data <- as.data.frame(p$data)
ord <- p$data$x[p$data$group == 1][order(p$data$predicted[p$data$group == 1])]
p$data$x <-  match(p$data$x, ord)
p$scales$scales[[1]]$labels <- p$scales$scales[[1]]$labels[ord]

p