Установка пакетов

Для того, чтобы пользоваться всеми – многогранными – возможностями 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 мы поговорим на следующем занятии.