Изобретем велосипед снова или построим график комбинаций бинарных переменных

Про пакет 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), в которой показано, как работать с различными настройками графика.

Читайте так же: