Изобретем велосипед снова или построим график комбинаций бинарных переменных
Про пакет ComplexUpset в R
Что делаем
По пакету ggplot2 для R написано множество хороших книг, статей — он настолько хорош, что использование пакетов, основанных на других принципах, почти всегда менее эффективно и похоже на попытку изобрести велосипед заново. Но иногда может получиться что-то интересное, но узкоспециализированное — примером этого является пакет ComplexUpset.
ComplexUpset позволяет визуализировать комбинации бинарных переменных достаточно интересно и наглядно.
Используемая база данных — CollegeDistance из пакета AER. Преобразуем ее
library(ComplexUpset)
library(AER)
library(tidyverse)
data("CollegeDistance")
glimpse(CollegeDistance)
CollegeDistance <- as.data.frame(CollegeDistance)
tab_2 <- colnames(CollegeDistance[,c(4:7)])
CollegeDistance[,c(4:7)] <- CollegeDistance[,c(4:7)] == "yes"
head(CollegeDistance)
В итоге мы получим 4 бинарные переменные: fcollege и mcollege обозначают, закончили ли мать/отец студента колледж, home — живет ли семья студента в отдельном доме, urban — живет ли семья студента в городе.
Применяем главную функцию upset (первая переменная — имя датафрейма, вторая переменная — вектор имен бинарных переменных)
upset(CollegeDistance, tab_2)
Левая гистограмма — это количество респондентов, у которых присутствует определенный признак.
Основная таблица внизу визуализирует комбинации признаков. Так, видно, что больше всего количество студентов, которые живут в собственном доме, но не в городе, причем мать и отец не заканчивали колледж — 2188. Людей с противоположным набором — 9.
Самое главное — что это не все, можно добавлять еще графики
upset(CollegeDistance, tab_2, annotations = list('Distribution of Score'=(
ggplot(mapping=aes(y=score))
+ geom_violin(alpha=0.5, na.rm=TRUE))))
Функция поддерживает синтаксис ggplot2, и получилось добавить на график скрипичные диаграммы распределения показателя «score» для каждой из выделенной группы.
Еще один приятный бонус — функция, которая автоматически проводит непараметрический тест Крускала-Уоллиса на равенство медиан по всем подвыборкам, образованным комбинацией бинарных переменных.
upset_test(CollegeDistance, tab_2)
Получается, из количественных переменных меньше всего изменчивость у показателя «заработная плата», а выше всего — у показателя «расстояние».
Кроме того, у пакета есть шикарная виньетка (https://cran.r-project.org/web/packages/ComplexUpset/vignettes/Examples_R.html), в которой показано, как работать с различными настройками графика.