Для того, чтобы пользоваться всеми – многогранными – возможностями R, вам может потребоваться обращаться к пакетам. Пакет в R – это группа функций, объединенных выполнением схожих задач. Пакеты создаются и распространяются пользователями R. Сегодня нам потребуется пакет DescTools, который содержит удобные функции для расчета доверительных интервалов для доли и среднего.
Для того, чтобы использовать пакет, сначала вам требуется скачать его и установить – как и любую другую программу на ваш компьютер, с тем отличием, что вы устанавливаете программу внутрь R. Это делается следующим образом – название пакета обязательно заключается в кавычки:
install.packages("DescTools")
После того, как вы установили программу, вы захотите ее открыть. Также нужно открывать и пакеты в R перед их использованием каждый раз, когда вы запускаете R. Это делается так – теперь название пакета прописывается без кавычек:
library(DescTools)
На Windows иногда возникает ошибка, когда R не может сохранить установочные файлы пакета на компьютер из-за того, что доступ к папке запрещен. В этом случае вам требуется открыть R от имени администратора (кликнув на иконку правой кнопкой мыши).
Мы продолжим работать с результатами опроса, посвященного мультфильму «Чип и Дейл». В нашей выборке 74 студента, хотя на вашем курсе учатся 130 человек. Тем не менее, мы хотели бы иметь возможность, анализируя выборочные данные, делать выводы о генеральной совокупности.
Откроем таблицу с результатами опроса в R. Обратите внимание, что путь к файлу всегда заключается в кавычки: неважно, открываете Вы его с компьютера или из интернета!
df <- read.csv("https://nvasilenok.github.io/hse/games/chip_and_dale.csv")
Сегодня мы поработаем с вопросом «С кем из спасателей Вы ассоциируете себя сейчас?», в ответ на который требовалось выбрать одного из персонажей мультфильма. Мы сделаем это с помощью функции table():
table(df$resc_ranger_now)
##
## Chip Dale Gadget Monty Other Zipper
## 23 15 18 7 6 5
Комментарий по именам персонажей: Gadget – Гаечка, Monty – Рокки (Рокфор), Zipper – Вжик.
Давайте подсчитаем выборочную долю студентов, чьим любимым героем сегодня является Чип:
23/74
## [1] 0.3108108
Эта величина – 0.31 – выборочная оценка истинной доли студентов, чьим любимым персонажем является Чип. Тем не менее, мы понимаем, что оценка является случайной величиной, и она может отклоняться от истинной доли. Давайте рассчитаем доверительный интервал, чтобы учесть изменчивость оценки. Возьмем 99% уровень доверия.
Напомню формулу расчета доверительного интервала для доли:
\[\displaystyle [\hat{p}-z\times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}};~\hat{p}+z\times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}]~,\] где \(z\) – это квантиль стандартного нормального распределения с уровнем \(\displaystyle 1-\frac{\beta}{2}\), то есть, в нашем случае, \(z_{0.995}\).
Давайте воспользуемся функцией BinomCI(x, n, conf.level) из пакета DescTools, чтобы рассчитать доверительный интервал. Эта функция имеет следующие аргументы: n – объем выборки, x – числитель доли («число успехов»), conf.level – уровень доверия (по дефолту аргумент принимает значение 0.95).
BinomCI(23, 74, conf.level = 0.99)
## est lwr.ci upr.ci
## [1,] 0.3108108 0.1927066 0.4600492
Выдача функции выглядит следующим образом: первое значение (est) – это выборочная оценка доли; второе значение (lwr.ci) – нижняя граница доверительного интервала; третье значение (upr.ci) – верхняя граница доверительного интервала. Результаты показывают, что с уверенностью 99% истинная доля студентов 1 курса, чьим любимым героем является Чип, лежит в границах от 0.19 до 0.46.
Чтобы рассчитать длину доверительного интервала, нам нужно вычесть из верхней границы нижнюю границу, Напомню, что в общем виде длина доверительного интервала равна две предельные ошибки (погрешности):
\[\displaystyle (\hat{p}+z\times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}})-(\hat{p}-z\times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}) = 2\times z\times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \] Рассчитаем длину доверительного интервала:
0.4600492-0.1927066
## [1] 0.2673426
Теперь попробуем предсказать, что произойдет с доверительным интервалом, если наша выборка увеличится в 4 раза, при условии, что выборочная оценка доли останется прежней.
Мы видим, что раз объем выборки находится в знаменателе подкоренного выражения, то увеличение объема выборки должно приводить к уменьшению погрешности и, как следствие, сужению доверительного интервала. Если мы увеличим объем выборки в \(k\) раз, то длина доверительного интервала уменьшится в \(\sqrt{k}\) раз. Следовательно, мы можем предсказать, что наш доверительный интервал после увеличения объема выборки в 4 раза сузится в 2 раза и составит примерно 0.13:
(0.4600492-0.1927066)/2
## [1] 0.1336713
Давайте оценим новый доверительный интервал (напоминаю, что выборочную долю оставляем такой же, поэтому x тоже увеличим в 4 раза):
BinomCI(23*4, 74*4, conf.level = 0.99)
## est lwr.ci upr.ci
## [1,] 0.3108108 0.2463041 0.383613
Рассчитаем новую длину:
0.383613-0.2463041
## [1] 0.1373089
Действительно, она оказалась близка к той, которую мы подсчитали (незначительные расхождения объясняются округлением).
Нас интересует, как связаны веселость в процентах от Дейла и ворчливость в процентах от Чипа среди студентов 1 курса ОП «Политология». Давайте представим связь между двумя показателями на графике, где по оси OX мы отложим веселость, а по оси OY ворчливость. Респонденты на графике будут представлены точками на получившейся плоскости. Этот график называется диаграмма рассеяния. Чтобы построить его в R, мы воспользуемся функцией plot(x, y). Аргументами функции являются два вектора одинаковой длины; первый указанный вектор будет отложен по оси OX. Заодно давайте настроим график, подписав оси с помощью аргументов xlab и ylab (при построении графиков хороший тон – подписывать оси):
plot(df$dale, df$chip,
xlab = "Dale", ylab = "Chip")
Мы видим на графике, что у нас есть одно наблюдение с огромным значением ворчливости и минимально возможным значением веселости. Такие точки должны быть восприняты с осторожностью: находясь вдали от основного облака рассеяния, они могут исказить направление и силу связи, которую мы будем оценивать с помощью коэффициента корреляции Пирсона.
Мы можем представить линейную связь между двумя признаками, проведя через наше облако рассеяния прямую:
plot(df$dale, df$chip,
xlab = "Dale", ylab = "Chip")
# функция abline дорисовывает на графике линии
abline(lm(df$chip ~ df$dale))
Предлагаю, пока что не выбрасывая наше подозрительное наблюдение, навести «зум» на основное облако рассеяния. Для этого зададим ограничение на отображаемую часть оси OY с помощью аргумента ylim. Аргумент принимает вектор из двух значений: минимум и максимум отображаемой оси.
plot(df$dale, df$chip, ylim = c(0,100),
xlab = "Dale", ylab = "Chip")
abline(lm(df$chip ~ df$dale))
Мы видим, что в этой части графика прямая выглядит довольно крутой. Теперь давайте попробуем выбросить «нехарактерное» наблюдение. Отбираем строчки по условию и сохраняем в новый объект:
df2 <- subset(df, chip < 1000)
Снова нарисуем график:
plot(df2$dale, df2$chip, ylim = c(0,100),
xlab = "Dale", ylab = "Chip")
abline(lm(df2$chip ~ df2$dale))
Теперь мы видим, что наша прямая выглядит намного более пологой.
Тот эффект, который мы только что увидели, иллюстрирует идею потенциальной неустойчивости коэффициента корреляции Пирсона, измеряющего линейную взаимосвязь между признаками. О рассчете коэффициентов корреляции в R мы поговорим на следующем занятии.