4.2. Построение гистограмм распределения на языке R
В языке программирования R существует несколько способов построения гистограмм распределения случайной величины:
- с применением функции hist (), входящей в пакет graphics;
- посредством функции geom_histogram(), входящей в состав пакета ggplot2;
- с помощью столбчатой диаграммы с предварительным расчетом частот и интервалов распределения величин. Построение столбчатых диаграмм можно произвести с помощью:
- функции barplot(), входящей в пакет graphics;
- функции geom_bar(), входящей в пакет ggplot2.
В примерах данного раздела приведены все перечисленные способы построения гистограммы распределений.
Примеры построения гистограмм распределений на языке R
Для построения диаграмм распределения использовались данные по выживаемости заболевших вирусом иммунодефицита, собранных в Австралии после 1 июля 1991 года. Все данные содержатся в пакете MASS, наборе данных Aids2.
Листинг 10
#Построение гистограммы распределения с помощью функции hist () пакета
graphics
library(“MASS”) #Подключаем пакет MASS, содержащий набор данных Aids2
N <- length(Aids2$Age) #Вычисляем количество пациентов в наборе данных
dBreak <-5*log10(N) #Определяем количество интервалов для гистограммы
dBreak <- round(dBreak) #Округляем значение до целых чисел
dX <- (max(Aids2$Age)-min(Aids2$Age))/ dBreak #Рассчитываем шаг
step <- seq(min(Aids2$Age),max(Aids2$Age), dX) # Вектор интервалов
hist (x = Aids2$age, break = step, xlab= “Возраст выявления, полных лет”,
ylab = “Количество, чел”, main = “Выживаемость, заболевших СПИДом”,
col = “blue”) #Строим гистограмму распределения возрастов пациентов с
# с выявленным вирусом иммунодефицита
# x – вектор значений исследуемых распределений, полученный из Data Frame #;
# break – количество участков на гистограмме;
# xlab – подпись оси ОХ;
# ylab – подпись оси OY;
# main – название гистограммы;
# col – задание цвета гистограммы распределения.
Результат выполнения данной команды представлен на рисунке 15.
&hide_Cookie=yes)
Рисунок 15 – Результат применения функции hist () из пакета graphics
Функция hist () хороша для применения при необходимости быстро построить гистограмму и посмотреть на распределение данных, однако более гибким инструментом для построения и дальнейшей публикации гистограмм является функция geom_histogram(), входящая в пакет ggplot2.
Листинг 11
# Построение гистограммы распределения с помощью функции
# geom_histogram () пакета ggplot2
library(“MASS”) # Подключаем пакет MASS, содержащий набор данных Aids2
library(“ggplot2”) # Подключаем пакет ggplot2, содержащий функцию
# geom_histogram ()
p <- ggplot() #Создаем объект p, содержащийБолее подробно структура и применение пакета ggplot2 представлена в работе: Мастицкий С. Э. Визуализация данных с помощью ggplot2. М.: ДМК Пресс, 2017. 222 с. слои графика
p<- p + geom_histogram (mapping = aes (x= Aids2$age), fill= “blue”, binwith=30)
p<- p+labs (x = “Возраст выявления, полных лет”,
y= “Количество, чел”,
title = “Выживаемость, заболевших СПИДом”)
print(p)
Результат выполнения кода листинга 11 представлен на рисунке 16.
&hide_Cookie=yes)
Рисунок 16 – Гистограмма распределения по возрасту пациентов с подтвержденным диагнозом иммунодефицита
Библиотека ggplot2 содержит большое количество функций, позволяющих строить различные типы графиков и производить их тонкую настройку, однако требует и большего количества строк кода. Описание всех возможностей библиотеки выходит за рамки данных методических рекомендаций.
Классический способ построения гистограмм распределения основан на вычислении размаха данных, вычислении интервалов и построении столбчатой диаграммы. При таком подходе выбирается количество интервалов, равномерно распределенных по данным, и подсчитывается количество вхождений в каждый интервал исследуемых значений, а на последнем этапе строится столбчатая диаграмма количества вхождений в интервал.
Листинг 12
library(“MASS”) #Подключаем пакет, содержащий исследуемые данные
N <- length(Aids2$age) # Выделяем количество пациентов
dBreak <-5*log10(N) #Определяем количество интервалов для гистограммы
dBreak <- round(dBreak) #Округляем значение до целых чисел
interval <- cut (Aids2$age, breaks = dBreak,) #Разбиваем данные на 12 интервалов
freqData <- summary(interval) #Вычисляем количество вхождений в каждый
# интервал
barplot(freqData, xlab = "Возраст выявления, полных лет",
ylab = "Количество, чел",