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