Проблема с sjPlot::plot_xtab неправильной маркировкой уровней факторов

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$carb_cat на cars$mpg_3, plot_xtab переупорядочивает и неправильно обозначает уровни факторов. Если вы сравните значения на столбцах с приведенной ниже таблицей частот, вы заметите, что фактический уровень «Высокий» помечен на столбцах и в легендах как «Низкий», «Средний» помечен как «Высокий», а «Низкий». " помечен как "Средний".

cars %>% count(carb_cat)

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

Я несколько раз сталкивался с этой проблемой, используя реальные данные, и я не вижу аргумента в plot_xtab, который, кажется, решает эту проблему.

введите здесь описание изображения


person West_End_Line    schedule 14.04.2020    source источник
comment
Я бы сообщил об этой проблеме авторам пакета.   -  person Edward    schedule 15.04.2020


Ответы (1)


Похоже, в последней версии 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
person Edward    schedule 15.04.2020
comment
Благодарю. Я сообщил об ошибке и тем временем понизил версию до 2.8.0. - person West_End_Line; 15.04.2020