Описательные статистики

Рассмотрим небольшую выборку из шести наблюдений и сохраним её в вектор v. Посмотрим на описательные статистики по этой выборке:

v <- c(2, 3, 5, 5, 7, 8) 
summary(v)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     3.5     5.0     5.0     6.5     8.0

Минимальное значение 2, максимальное 8. Среднее значение равно 5, медиана тоже равна 5. Нижний квартиль равен 3.5 (1st Qu.), верхний квартиль равен 6.5 (3rd Qu.). Проинтерпретируем:

Примечание: результаты, полученные в R, а именно значения квартилей, могут отличаться от того, что мы считали вручную, так как в R по умолчанию используется другой алгоритм расчёта.

Теперь посмотрим, как можно вызвать отдельные описательные статистики (по вектору или по столбцу в таблице).

min(v)  # минимум
## [1] 2
max(v) # максимум
## [1] 8
vrange <- max(v) - min(v)  # размах
vrange
## [1] 6
mean(v) # среднее
## [1] 5
median(v) # медиана
## [1] 5

Квантили заслуживают отдельного внимания. Для начала найдём квантиль уровня 0.2: укажем название вектора и через запятую — уровень квантиля.

quantile(v, 0.2)
## 20% 
##   3

Получается, 20% наблюдений в выборке не превышают значение 3. Внутри функции quantile() можно указать сразу несколько уровней, только для этого нужно оформить их в виде вектора:

quantile(v, c(0.1, 0.2, 0.3)) 
## 10% 20% 30% 
## 2.5 3.0 4.0

Получили квантили уровней 0.1, 0.2, 0.3. Если уровней много, и все они отличаются друг от друга на одно и то же число, то их можно задать в виде последовательности. Для этого понадобится функция seq() (от английского sequence), внутри которой нужно указать начало отрезка, конец отрезка и шаг, с которым мы по этому отрезку движемся:

quantile(v, seq(from=0, to=1, by=0.1)) # от 0 до 1 с шагом 0.1
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##  2.0  2.5  3.0  4.0  5.0  5.0  5.0  6.0  7.0  7.5  8.0

То, что мы получили выше — это процентили (квантили, только уровень указан в процентах), а если говорить ещё точнее, децили, то есть процентили, уровень которых делится на 10: 10%, 20%, 30%, и так далее. Теперь вернёмся к квартилям.

quantile(v, c(0.25, 0.75)) # нижний и верхний квартили
## 25% 75% 
## 3.5 6.5
quantile(v, 0.75) - quantile(v, 0.25)  # межквартильный размах
## 75% 
##   3
IQR(v) # межквартильный размах - готовая функция R
## [1] 3

Посчитаем выборочную дисперсию и стандартное отклонение:

var(v)  # variance - дисперсия
## [1] 5.2
sd(v) # standard deviation - стандартное отклонение
## [1] 2.280351

А сейчас перейдём к более красочным вещам — к графикам.

Гистограммы (histograms)

Чтобы строить более осмысленные графики, вернёмся к реальным данным и загрузим таблицу из файла Chile.csv с результатами опроса жителей Чили перед известным плебисцитом 1988 года.

Переменные в таблице:

Загрузим файл по ссылке — просто скопируем её и вставим в кавычках в функцию read.csv():

chile <- read.csv("http://math-info.hse.ru/f/2017-18/ps-ms/Chile.csv")

Удалим строки с пропущенными значениями (NA's) и сохраним изменения:

chile <- na.omit(chile)

Выведем описательные статистики по всем переменным (столбцам) в таблице:

summary(chile$income)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2500    7500   15000   34020   35000  200000

Для количественных переменных R выводит минимальное значение Min, максимальное значение (Max), выборочное среднее (Mean), медиану выборки (Median), нижний (1st Qu) и верхний (3rd Qu) квартили. Для качественных (текстовых, факторных) показателей R выводит частоты, сколько каких значений встречается в выборке.

Теперь построим простенькую гистограмму для переменной income (доход респондентов):

hist(chile$income)

По умолчанию гистограмма прорисовывается без заливки, получается белой. Исправим это: добавим опцию col и укажем название цвета в кавычках. Список всех цветов в R можно посмотреть здесь.

hist(chile$income, col = "coral1")

Что мы можем сказать о распределении дохода по этой гистограмме? Во-первых, что распределение дохода не похоже на нормальное, у этого распределения есть длинный «хвост» справа. Другими словами, большинство респондентов имеет небольшой доход, сильно отличающийся от среднего, однако есть респонденты, у которых доход довольно высокий, около 150000 и выше. Во-вторых, респондентов, у которых доход достаточно большойй, немного.

Теперь давайте приведём график к приличному виду: добавим заголовок и подписи к осям.

# main - заголовок
# xlab - подпись для оси x
# ylab - подпись для оси y

hist(chile$income, col = "coral1", 
  main = "Доход респондентов", 
  xlab = "Доход",
  ylab = "Число респондентов")

Обратите внимание: все названия, так как они являются текстовыми, вводятся в кавычках.

Чему равен шаг гистограммы на графике выше? 20 тысячам, так как на отрезке от 0 до 50 тысяч помещаются два с половиной столбца одинаковой ширины. К сожалению, в базовом варианте гистограммы, создаваемой с помощью hist(), изменить величину шага вручную не так просто. Но зато есть опция breaks, которая приблизительно соответствует числу «перегородок», которые необходимо поставить, чтобы получить желаемое число столбцов. То есть, если мы хотим получить четыре столбца, нам потребуется три «перегородки»:

hist(chile$income, col = "coral1", 
  main = "Доход респондентов", 
  xlab = "Доход", 
  ylab = "Число респондентов",
  breaks = 3)

Ящики с усами (box plots)

Продолжим обсуждать визуализацию распределений данных и рассмотрим ещё один тип графика — ящик с усами (box plot или box-and-whiskers plot). Давайте сначала его построим, а потом посмотрим, что он иллюстрирует.

boxplot(chile$income)

Что показывает данный график? Квартили и минимальное/максимальное значения или границы типичных значений. Нижняя и верхняя граница «ящика» соответствуют нижнему и верхнему квартилю (Q1 и Q3), толстая горизонтальная линия внутри «ящика» соответствует медиане. Горизонтальная линия не всегда будет лежать в середине «ящика», такое случается, если распределение выборки примерно симметричное. Если распределение скошено (слишком много людей с высоким доходом или наоборот, низким), то медиана ближе к нижнему или верхнему квартилю, то есть к нижней или верхней границе «ящика». «Усы» графика (похожи на антенны сверху и снизу) строятся по-разному, и их построение зависит от наличия нетипичных/нехарактерных наблюдений или выбросов (outliers). Выбросы на графике изображаются отдельными точками, которые находятся всегда за рамками «усов». В нашем случае есть два выброса, в верхней части графика, то есть нетипично большие значения.

Если выбросов ни с какой стороны нет, то границы «усов» совпадают с минимальным и максимальным значением в выборке. Если выбросы есть с обеих сторон (слишком маленькие и слишком большие значения), то границы «усов» совпадают с границами типичных значений, которые вычисляются следующим образом:

\[[\text{Q}_1 - 1.5 \times \text{IQR} ; \text{Q}_3 + 1.5 \times \text{IQR}].\]

Все значения, которые выходят за границы этого интервала, считаются нетипичными значениями. Иногда среди нетипичных значений выделяют совсем нехарактерные (в SPSS они обозначаются звёздочкой) — значения, которые выходят за границы следующего интервала:

\[[\text{Q}_1 - 3 \times \text{IQR} ; \text{Q}_3 + 3 \times \text{IQR}].\]

Если выбросы есть только сверху, слишком большие значения, то нижний «ус» совпадает с минимальным значением, а верхний — со значением \(\text{Q}_3 + 1.5 \times \text{IQR}\). Если выбросы есть только снизу, слишком маленькие значения, то нижний «ус» соответствует значению \(\text{Q}_1 - 1.5 \times \text{IQR}\), а верхний — максимальному.

Дополнительно: скрипичные диаграммы (violin plots)

Дополнительно рассмотрим ещё один тип графика, менее типичный, который называется скрипичной диаграммой (на английском есть целый ряд терминов: violin plot, bean plot, vase plot, кто-то видит скрипки, кто-то бобы, а кто-то вазы). Давайте опять сначала на него посмотрим, а потом разберёмся, что к чему. Чтобы построить такой график, нам потребуется библиотека vioplot.

install.packages("vioplot")

Построим скрипичную диаграмму для дохода респондентов:

library(vioplot)

vioplot(chile$age)

Как можно догадаться, внутри этого графика, внутри «скрипки», находится «ящик» с усами, на котором белой точкой обозначена медиана. А что снаружи? Этот график состоит из двух симметричных половинок, каждая из которых представляет собой график плотности распределения, о котором можно думать как о сглаженной гистограмме. Этот график хорошо характеризует форму распределения.

Скрипичные диаграммы довольно часто используются для визуализации данных, особенно, если исследователя интересует форма распределения и распределение отличается от нормального, но стоит иметь в виду, что такой график корректно строить в случае, когда выборка достаточно большая. Если выборка маленькая, то сглаживание, которое используется для построения графика, сработает очень грубо, и картина исказится. (Попробуйте построить гистограмму с маленьким шагом для маленькой выборки вручную и «сгладить» - схематично обвести её контур, вы поймёте, о чём идёт речь).