sjPlot::plot_xtab 错误标记因子水平的问题

Problem with sjPlot::plot_xtab mislabelling factor levels

sjPlot::plot_xtab 是一个有用的工具,可以快速生成带有计数和百分比标签的分组条形图。不过,我一直遇到一个非常烦人的问题。 plot_xtab 正在对我感兴趣的因素的水平进行重新排序和错误标记。似乎正在发生的事情是它按词汇顺序对级别进行排序,但随后用标签顺序中的实际因素标签错误地标记了它们。这当然是一个严重的问题。这是一个可重现的例子:

library(tidyverse)
library(forcats)
library(gtools)
library(sjPlot)
data("mtcars")

cars <- as_tibble(mtcars) %>% 
  mutate(carb_cat=case_when(carb <3~"Low", carb==3 | carb ==4~"Med", carb>4~"High"), 
    carb_cat=fct_relevel(carb_cat, "Low", "Med", "High"))

unique(cars$carb_cat)

cars$mpg_3 <- quantcut(cars$mpg, q=3)

plot_xtab(cars$mpg_3, cars$carb_cat, show.total = F)

当我按 cars$mpg_3 绘制 cars$carb_cat 时,plot_xtab 重新排序并错误标记了我的因子水平。如果将条形上的计数与下面的频率 table 进行比较,您会注意到实际水平 "High" 在条形和图例中标记为 "Low"、"Medium"被标记为 "High","Low" 被标记为 "Medium"。

cars %>% count(carb_cat)

  carb_cat     n
  <fct>    <int>
1 Low         17
2 Med         13
3 High         2

我已经 运行 使用真实数据多次研究这个问题,而且我在 plot_xtab 中看到的任何论点似乎都没有解决这个问题。

看起来在最新版本的 sjPlot(自 2.8.2 起)中引入了一个错误。在 2.8.0 版本中,我得到了正确的图表:

library(tidyverse)
library(forcats)
library(gtools)
library(sjPlot)

data(mtcars)

cars <- mtcars %>% 
  mutate(carb_cat=case_when(carb <3~"Low", 
                            carb==3 | carb ==4~"Med", 
                            carb>4~"High"), 
         carb_cat=fct_relevel(carb_cat, "Low", "Med", "High"))

cars$mpg_3 <- quantcut(cars$mpg, q=3)

plot_xtab(cars$mpg_3, cars$carb_cat, show.total = F) +
   ggtitle("sjPlot version 2.8.0")

             carb_cat
mpg_3         Low Med High
  [10.4,16.7]   2   8    1
  (16.7,21.4]   5   5    1
  (21.4,33.9]  10   0    0