Проблема с уровнями ошибочной маркировки sjPlot :: plot_xtab - PullRequest
0 голосов
/ 15 апреля 2020

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, который, кажется, решает эту проблему.

enter image description here

1 Ответ

0 голосов
/ 15 апреля 2020

Похоже, ошибка была введена в последней версии 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")

enter image description here

             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
...