У меня большой набор данных с более 150 категориальными и непрерывными переменными. Каждое наблюдение (строка) принадлежит либо к группе А, либо к группе В. Например:
set.seed(16)
mydf <- data.frame(ID = 1:500, group = sample(c("A", "B", "B", "B"), 500, replace = TRUE),
length = rnorm(n = 500, mean = 0, sd = 1),
weight = runif(500, min=0, max=1),
color = sample(c("red", "orange", "yellow", "green", "blue"), 500, replace = TRUE),
size = sample(c("big", "small"), 500, replace = TRUE),
age = sample(c("old", "young"), 500, replace = T))
Я работаю над оптимизацией схемы графиков, чтобы визуализировать взаимосвязь между групповыми и пропорциональными счетами для категориальных переменных. Пока что с некоторой помощью из предыдущего поста ({ ссылка }) у меня есть графики, использующие сетку граней ggplot2, но я столкнулся с двумя проблемами.
Проблема A: Столбчатые диаграммы расположены в алфавитном порядке по значениям (например, большой, старый, маленький, молодой), а не сгруппированы по категории (возраст: молодой рядом со старым; размер: большой рядом с маленьким и др. c). Проблема B: Для категориальных переменных только с двумя возможными значениями я хотел бы только построить соотношение в группе A и группе B для одного из значений. Например, только нанесите на график пропорцию группы A против группы B, которые являются «старыми», поскольку график доли «молодых» не предоставил бы никакой новой информации. Другие категориальные переменные, такие как цвет с несколькими значениями, должны иметь гистограмму для каждой возможности.
Я решил проблему A, установив уровни факторов в нужном порядке построения с помощью «mutate (value = factor (value, levels = c)» («большой», «маленький», «молодой», « старые "," красные "," оранжевые "," желтые "," зеленые "," синие ")))" и теперь порядок заговора выглядит так, как указано, с возрастными группами рядом друг с другом, цветами рядом друг с другом, и т. д. c.
data_cat <-
mydf %>% select(-ID) %>%
mutate_if(.predicate = is.factor, .funs = as.character) %>%
mutate(group = factor(group)) %>%
pivot_longer(cols = which(sapply(., is.character)), names_to = 'key', values_to = 'value')%>%
count(group, key, value) %>%
group_by(group, key) %>%
mutate(percent = n/ sum(n)) %>%
mutate(value = factor(value, levels=c("big", "small", "young", "old", "red", "orange", "yellow", "green", "blue"))) %>%
ggplot(data_cat) +
geom_col(aes(group, percent, fill = key)) +
facet_grid(~ value)
Я все еще остаюсь с проблемой B, подавляя построение одного из двух результатов для дихотомических категориальных переменных. Я думаю, что мне нужно найти способ извлечь "уровни факторов" из каждой переменной, а затем работать с подмножеством, где это значение == 2, искал, но еще не нашел способ сделать это.