boxplot() в R: Как да направя BoxГрафики в RStudio

⚡ Умно обобщение

BoxГрафиката в R обобщава числово разпределение чрез медианата, квартилите, нишките и отклоненията, използвайки geom_boxplot() от ggplot2. Това ръководство изгражда диаграма тип „кутия“ върху набора от данни за качеството на въздуха и наслагва цветове, точки, трептене, прорези и групови сравнения.

  • 📐 Обобщение от пет числа: Кутията обхваща първия до третия квартил, линията маркира медианата, а мустаците достигат 1.5 пъти интерквартилния диапазон.
  • 🧱 Базов синтаксис: ggplot(df, aes(x = група, y = стойност)) + geom_boxplot() създава по една кутия на ниво от групатаping фактор.
  • ???? Стилизиране на отклонения: outlier.colour, outlier.shape и outlier.size контролират как се рисуват точките отвъд мустаците.
  • 💠 Показване на наблюдения: geom_jitter() измества припокриванетоping сочи настрани, разкривайки размера на пробата зад всяка кутия.
  • 📉 назъбен Boxе: notch = TRUE изчертава доверителния интервал на медианата и не се припокриваping прорезите показват реална разлика.
  • 🎨 Grouping: Картаping fill inside geom_boxplot() разделя всяка категория на няколко едно до друго полета.

Boxграфика в R

boxplot() в R

boxplot() в R помага да се визуализира разпределението на данните по квартил и да се открие наличието на извънредни стойности. Можете да използвате геометричния обект geom_boxplot() от библиотеката ggplot2, за да начертаете boxplot() в R.

Ще използваме набора от данни за качеството на въздуха, за да въведем boxplot() в R с ggplot. Наборът от данни записва ежедневни измервания на качеството на въздуха в Ню Йорк от май до септември 1973 г. и съдържа 153 наблюдения. Ще използваме следните променливи:

  • Озон: Числова променлива
  • Вятър: Числова променлива
  • Месец: май до септември. Числова променлива

Преди да нарисувате такава, е добре да знаете точно какво представлява всяка част от кутията.

Как да четем a Box Графика: Квартили, IQR и отклонения

Всеки елемент от боксова диаграма кодира едно число от обобщението от пет числа. Знанието кое кое е кое превръща диаграмата от декорация в анализ.

  • Долна панта: първият квартил, Q1. Двадесет и пет процента от наблюденията са под него.
  • Средна линия: втори квартил. Позицията му вътре в кутията разкрива асиметрия: линия, избутана към долната част, означава, че данните са асиметрични надясно.
  • Горна панта: третият квартил, Q3. Седемдесет и пет процента от наблюденията са под него.
  • Box височина: интерквартилният диапазон, IQR = Q3 – Q1, който обхваща средната половина на данните и е стандартната устойчива мярка за разпръскване.
  • Мустаци: Те се простират до най-екстремното наблюдение, все още в рамките на 1.5 пъти междукварталния коефициент на отклонение на най-близкия пант. Те не са минимумът и максимумът.
  • Точки отвъд мустаците: наблюдения, маркирани като отклонения от правилото 1.5 IQR.

Две предупреждения. Първо, „отклонение“ тук е статистически флаг, а не грешка: при асиметрично разпределение, като например концентрацията на озон, се очакват високи стойности и не трябва да се изтриват. Второ, квадратната диаграма скрива формата на разпределението, така че две групи с еднакви квадратчета могат да имат много различни основни данни. Добавянето на точки на трептене, както е показано по-долу, предпазва от това.

Box Графика срещу хистограма срещу графика за цигулка в R

И трите диаграми описват числово разпределение, но всяка от тях разкрива нещо, което останалите крият.

Критерии Box парцел Хистограма Сюжет за цигулка
Изпълнения Медиана, квартили, отклонения Честота във всеки интервал Пълна крива на плътността
Revдостига множество върхове Не Да Да
Флагове с отклонения Да, изрично Само визуално Не директно
Сравняване на много групи отличен непохватен добър
Изисква се избор на тунинг Не Да, брой контейнери Да, честотна лента
обект ggplot2 geom_boxplot() geom_histogram() geom_violin()

Често срещан компромис е да се начертае диаграма тип „цигулка“ с тясна кутия вътре в нея, което запазва формата на плътността и обобщението на квартилите в една диаграма. Вижте урок за хистограма за страната на бининга в сравнението.

Създаване на Box парцел

Преди да започнете да създавате своя първи boxplot() в R, трябва да манипулирате данните, както следва:

  • Стъпка 1: Импортирайте данните
  • Стъпка 2: Премахнете ненужните променливи
  • Стъпка 3: Преобразувайте Месец в подреден делител
  • Стъпка 4: Създайте нова категориална променлива, разделяйки всеки месец на три части: Начало, Среда и Край
  • Стъпка 5: Премахнете липсващите наблюдения

Всички тези стъпки се извършват с dplyr и конвейерния оператор %>%.

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality %>%

#Step 2
select(-c(Solar.R, Temp)) %>%

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

Добра практика е да проверите структурата на данните с функцията glimpse().

glimpse(data_air)

Изход:

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

Както Ozone, така и Solar.R съдържат NA стойности. Тъй като geom_boxplot() би ги премахнал безшумно и би извел предупреждение, е по-чисто да се премахнат изрично.

# Step 5
data_air_nona <-data_air %>% na.omit()	

Основна кутия

Сега начертайте разпределението на озона по месеци.

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

Code Обяснение

  • Съхранявайте графиката за по-нататъшна употреба
    • box_plot: базовата графика се съхранява в обекта box_plot, което ви позволява да добавяте слоеве по-късно, без да повтаряте цялото извикване
  • Добавете геометричния обект
    • Предавате набора от данни data_air_nona на ggplot boxplot.
    • Вътре в аргумента aes() добавяте оста x и оста y.
    • Знакът + означава, че искате R да продължи да чете кода. Той прави кода по-четлив, като го разбива.
    • Използвайте geom_boxplot(), за да създадете квадратна графика

Изход:

Basic Box парцел

Променете страната на графиката

Можете да обърнете страната на графиката.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Обяснение

  • box_plot: Използвате графиката, която сте съхранили. Той избягва пренаписването на всички кодове всеки път, когато добавяте нова информация към графиката.
  • geom_boxplot(): нарисувай кутиите и мустаците
  • coord_flip(): Обърнете страната на графиката

Изход:

Промяна на страната на графиката

Промяна на цвета на отклонението

Можете да промените цвета, формата и размера на извънредните стойности.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Code Обяснение

  • outlier.colour=”red”: Контролирайте цвета на извънредните стойности
  • outlier.shape=2: Промяна на формата на отклонението. 2 се отнася за триъгълник
  • outlier.size=3: Променя размера на триъгълника. По-големите числа рисуват по-големи маркери.

Изход:

Промяна на цвета на отклонението

Добавяне на обобщена статистика

Можете да наслагвате обобщена статистика, като например средната стойност за групата, която самата диаграма на кутията не показва.

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

Code Обяснение

  • stat_summary() добавя изчислена статистика върху диаграмата тип „кутия“
  • Аргументът fun контролира коя статистика се връща. Тук това е средната стойност. Обърнете внимание, че по-старият код използва fun.y, който ggplot2 е остарял във версия 3.3.0.
  • Забележка: Налични са други статистически данни като мин. и макс. В една и съща графика могат да бъдат показани повече от една статистика
  • geom = „точка“: Начертайте средната стойност с точка
  • size=3: Размер на точката
  • color =”steelblue”: Цвят на точките

Изход:

Добавяне на обобщена статистика

Box Парцел с точки

След това добавете слой с точкова диаграма върху кутиите. Всяка точка представлява едно наблюдение, което прави видим размера на извадката зад всяка кутийка.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Code Обяснение

  • geom_dotplot() чертае по една точка на наблюдение, подредена във всеки контейнер
  • binaxis='y': Променете позицията на точките по оста y. По подразбиране, оста x
  • dotsize=1: Размер на точките
  • stackdir='center': Начин за подреждане на точките: Четири стойности:
    • „нагоре“ (по подразбиране),
    • „Надолу“
    • "център"
    • „централно цяло“

Изход:

Box Парцел с точки

Контрол Естетика на Box парцел

Променете цвета на кутията

Можете да промените цветовете на групата.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code Обяснение

  • Цветовете на групите се контролират в aes() картатаpingМожете да използвате color=Month, за да промените цвета на кутията и диаграмата на мустаците според месеците.

Изход:

Промяна на цвета на Box

Box парцел с множество групи

Също така е възможно да добавите множество групи. Можете да визуализирате разликата в качеството на въздуха според деня на измерването.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Code Обяснение

  • Картата aes()ping на геометричния обект контролира групите за показване (тази променлива трябва да е фактор)
  • aes(fill= day_cat) позволява създаване на три полета за всеки месец по оста x

Изход:

Box Парцел с множество групи

Box Графиране с трептящи точки

Друг начин за показване на отделни наблюдения е с трептящи точки. Трептенето е обичайният избор, когато категорична x-ос кара много точки да се озоват на една и съща позиция.

Този метод избягва припокриванетоping на дискретните данни.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Code Обяснение

  • geom_jitter() добавя малко произволно изместване към всяка точка, така че да се припокриватping ценностите стават видими.
  • shape=15 променя формата на точките. 15 представлява квадратите
  • color = “steelblue”: Променете цвета на точката
  • position = position_jitter(width = 0.21): контролира колко странично са изместени точките, измерено в единици по оста x. Стойността по подразбиране е 40 процента от разстоянието между категориите.

Изход:

Box Графиране с трептящи точки

Можете да видите разликата между първата графика с метода на трептене и втората с точковия метод.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box Графиране с трептящи точки

назъбен Box парцел

Интересна характеристика на geom_boxplot() е функцията boxplot с вдлъбнатини в R. Графиката с вдлъбнатини стеснява полето около медианата. Основната цел на диаграмата с назъбена кутия е да се сравни значимостта на медианата между групите. Има убедителни доказателства, че две групи имат различни медиани, когато прорезите не се припокриват. Прорезът се изчислява, както следва:

назъбен Box парцел

Тук IQR е интерквартилният диапазон, а n е броят на наблюденията в групата. Степента обхваща приблизително 95-процентния доверителен интервал на медианата.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code Обяснение

  • geom_boxplot(notch = TRUE): начертава кутията с прорези около медианата

Изход:

назъбен Box парцел

Как да добавите заглавия, етикети и персонализирани цветове към Box Графика в R

Графиките по-горе използват настройките по подразбиране на ggplot2, които вземат имената на променливите директно от рамката с данни. Публикуемата диаграма се нуждае от четливи етикети и обмислена палитра.

Заглавия и етикети на оси. Едно извикване на labs() задава всеки текстов елемент:

box_plot +
    geom_boxplot(fill = "coral", alpha = 0.7) +
    labs(title = "Ozone concentration by month",
        subtitle = "New York, May to September 1973",
        x = "Month",
        y = "Ozone (parts per billion)",
        caption = "Source: airquality dataset") +
    theme_classic()

Избор на собствени цветове. Използвайте scale_fill_manual(), когато запълването е картографирано вътре в aes(), и scale_colour_manual(), когато цветът е:

ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) +
    geom_boxplot() +
    scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) +
    theme_classic() +
    theme(legend.position = "none")

Легендата е изключена тук, защото оста x вече назовава всеки месец, така че повтарянето ѝ би загубило място.

Пренареждане на кутиите. Нивата на факторите определят реда по оста. Тъй като „Месец“ е създаден като подреден фактор, той вече се чете хронологично. За неподреден фактор, сортирайте по медианата:

ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) +
    geom_boxplot() +
    theme_classic()

Запазване на диаграмата. ggsave() записва последния график на диска с резолюция, която вие контролирате:

ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)

Box Графика в R: Code препратка

Таблицата по-долу изброява извикването на ggplot2 за всеки вариант на боксова диаграма, разгледан по-горе:

Цел Code
Основна кутия
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Обърнете ориентацията
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Назъбена кутийка
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box графика с трептящи точки
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Оцветяване по група
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Няколко групи на категория
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Добавете средната стойност на групата
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Също така проверете: - R Урок за начинаещи: Научете езика за програмиране R

Въпроси и Отговори

Мустаците достигат най-екстремното наблюдение, разположено в рамките на 1.5 пъти интерквартилния диапазон на най-близкия квартил. Те не са минимумът и максимумът и всичко отвъд тях се изобразява като точка на отклонение.

Не автоматично. Правилото за 1.5 IQR е конвенция, а не доказателство за грешка. Първо проучете всяка точка: изкривени данни, като например показанията на озона, естествено водят до високи стойности, които са истински измервания.

застъпванеping Прорезите показват, че няма убедителни доказателства, че двете медиани се различават.ping Прорезите показват вероятна реална разлика, приблизително еквивалентна на 95% доверително сравнение.

Box Графиките са стандартна изследователска стъпка преди обучение: те разкриват асиметрия, отклонения и различни мащаби на характеристиките в различните класове. Екипите ги използват и за сравняване на точността на модела в различните сгъвания на кръстосана валидация.

Да. Асистентите с изкуствен интелект могат да обяснят грешки, като например непрекъсната x-ос, която създава единична кутия, и да предложат правилната aes() карта.pingи маркирайте остарели аргументи като fun.y. Винаги изпълнявайте коригирания код отново върху вашите собствени данни.

Обобщете тази публикация с: