Доверительные интервалы в R

Для того, чтобы строить доверительные интервалы, нам понадобится библиотека DescTools (но она не единственная в R библиотека, которая позволяет это делать). Установим ее:

install.packages("DescTools")

То, что R что-то пишет красным в процессе установки - это нормально. Это не ошибки, это просто задокументированные попытки R обратиться к сайту и загрузить необходимые компоненты библиотеки.

Если установить библиотеку не получается, посмотрите, что пишет R. Если что-то про отсутствие прав доступа, то следует запустить RStudio от имени администратора (кликнуть правой клавишей на значок RStudio и выбрать Запуск от имени администратора, на Mac OS сложнее, напишите мне). Если что-то похожее на Couldn’t resolve host name, проверьте подключение к интернету.

Обратимся к библиотеке (без этого R не будет знать, откуда ему брать функции для доверительных интервалов, и будет выдавать ошибки в стиле “не знаю такой функции”):

library(DescTools)

Теперь у нас есть все для работы, и давайте рассмотрим такую задачу. Исследователь случайным образом опросил 100 человек и выяснил, что среди них 30 человек выступают в поддержку смертной казни. Давайте построим 90%-ный доверительный интервал для доли людей, которые поддерживают смертную казнь. Воспользуемся функцией BinomCI(). CI - сокращение от confidence interval (доверительный интервал), Binom – указание на биномиальную случайную величину, которая описывает число успехов – число интересующих нас людей.

# n = 100, p = 0.3
ci90 <- BinomCI(30, 100, conf.level = 0.90)

Пояснения к коду: на первом месте указано число успехов (число интересующих нас объектов), на втором - объем выборки. В conf.level мы указываем уровень доверия. Результат мы не выводим на экран, а сохраняем в переменную ci90, так что, прогоняя строчку кода, на экране мы ничего не увидим.

Посмотрим на результат:

ci90
##      est   lwr.ci    upr.ci
## [1,] 0.3 0.230705 0.3798321

Что нам выдал R? Вектор (список) из трех чисел. Первое число - это выборочная доля (30/100). Второе - это нижняя граница доверительного интервала (lwr.ci - от lower), а третье - верхняя граница (upr.ci - от upper).

Проинтерпретируем полученный доверительный интервал. С 90%-ной уверенностью можно утверждать, что истинная доля людей, которые поддерживают смертную казнь, лежит в интервале от 0.23 до 0.38. Если независимо проводить аналогичные исследования на выборках одинакового размера много раз, в 90% случаев доверительный интервал накроет истинное значение доли людей, поддерживающих смертную казнь.

Если мы будем проводить аналогичное исследование на выборках одного и того же размера много раз, независимо друг от друга, в 90% случаев истинное значение доли сторонников смертной казни будет лежать в пределах от 0.23 до 0.38 (в предположении о том, что стандартная ошибка не изменяется от выборки к выборке).

Аналогичным образом построим 95%-ный и 99%-ный доверительные интервалы (интерпретировать не будем, интерпретация аналогична).

ci95 <- BinomCI(30, 100, conf.level = 0.95)
ci95
##      est    lwr.ci    upr.ci
## [1,] 0.3 0.2189489 0.3958485
ci99 <- BinomCI(30, 100, conf.level = 0.99)
ci99
##      est    lwr.ci    upr.ci
## [1,] 0.3 0.1974607 0.4274276

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

# длина 90%-ного интервала
l90 <- ci90[3] - ci90[2]
l90
## [1] 0.1491272
# длина 95%-ного интервала
l95 <- ci95[3] - ci95[2]
l95
## [1] 0.1768997
# длина 99%-ного интервала
l99 <- ci99[3] - ci99[2]
l99
## [1] 0.229967

Как мы и обсуждали ранее, с увеличением уровня доверия длина доверительного интервала увеличивается, а точность (сконцентированность) оценки уменьшается: самый длинный интервал соответствует 99%-ному уровню доверия.

А сейчас увеличим выборку в два раза, сохранив при этом значение выборочной доли. Уровень доверия тоже оставим 90%.

# n = 200, p = 0.3
ci90n <- BinomCI(60, 200, conf.level = 0.90)
ci90n
##      est    lwr.ci    upr.ci
## [1,] 0.3 0.2496597 0.3556791

Сравним длину 90%-ного доверительного интервала, посчитанного для n=100, и длину 90%-ного доверительного интервала, посчитанного n=200.

l90n <- ci90n[3] - ci90n[2]
l90n
## [1] 0.1060194
l90
## [1] 0.1491272

С ростом выборки (при прочих равных условиях) длина доверительного интервала уменьшается. Во сколько раз? Сравним:

l90/l90n
## [1] 1.406602

Выборка увеличилась в 2 раза, а длина доверительного интервала уменьшилась в 1.4 раза, то есть примерно в \(\sqrt{2}\) раз!

Давайте теперь построим доверительный интервал для доли, но на реальных данных. Загрузим по ссылке уже знакомую нам базу с данными опроса перед референдумом в Чили в 1988 году:

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

Если вы загружайте файл по ссылке, скачивать его на компьютер необязательно (главное, иметь подключенный интернет).

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

df <- na.omit(df)

Посмотрим на первые несколько строк в таблице:

head(df)
##   X region population sex age education income statusquo vote
## 1 1      N     175000   M  65         P  35000   1.00820    Y
## 2 2      N     175000   M  29        PS   7500  -1.29617    N
## 3 3      N     175000   F  38         P  15000   1.23072    Y
## 4 4      N     175000   F  49         P  35000  -1.03163    N
## 5 5      N     175000   F  23         S  35000  -1.10496    N
## 6 6      N     175000   F  28         P   7500  -1.04685    N

Нас будет интересовать столбец vote – то, как респондент планирует голосовать на референдуме. Давайте посмотрим на уникальные значения в этом столбце:

table(df$vote)
## 
##   A   N   U   Y 
## 177 867 551 836

Построим доверительный интервал для доли людей, которые собирались голосовать за Пиночета. Исключим из рассмотрения респондентов, которые еще не определились/не собираются голосовать, оставим только тех, кто за и против. Сохраним их количество:

yes = 836
no = 867

Теперь построим 95%-ный доверительный интервал.

BinomCI(yes, yes + no, conf.level = 0.95)
##            est    lwr.ci    upr.ci
## [1,] 0.4908984 0.4672024 0.5146353

Выборочная доля (\(\hat{p}\)) людей “за” равна 0.49. Проинтерпретируем полученный доверительный интервал.

С уверенностью 95% можно утверждать, что истинная доля людей, которые планировали голосовать за Пиночета у власти, лежит в интервале от 0.47 до 0.52. Если проводить аналогичные исследования на выборках одинакового размера, в 95% случаев истинная доля людей, которые планировали голосовать за Пиночета, будет лежать в интервале от 0.47 до 0.52 при условии постоянства стандартной ошибки.

Теперь посмотрим на доверительный интервал для среднего. Построим 95%-ный доверительный интервал для среднего возраста людей, которые планировали голосовать за Пиночета.

Сначала выберем из базы соответствующие строки:

voted <- df[df$vote == "Y", ]

Пояснения к коду: нас интересуют люди, которые голосовали “за”, следовательно, из базы df нужно взять строки, где df$vote равен "Y". Для проверки условий в программировании используется двойной знак =, чтобы отличать операцию сравнения от присваивания значений. Поэтому мы выбираем строки, соответствующие этим людям, и все столбцы (после запятой в квадратных скобках пустота - значит, берем все).

Теперь построим 95%-ный доверительный интервал для среднего – функция MeanCI():

MeanCI(voted$age)
##     mean   lwr.ci   upr.ci 
## 40.20335 39.17485 41.23185

Обратите внимание: мы не выставили уровень доверия conf.level = 0.95, но R не выдал нам ошибку. Наш код сработал, так как по умолчанию R в любом случае строит 95%-ный доверительный интервал.

Интерпретация полученного доверительного интервала:

С 95%-ной уверенностью мы можем утверждать, что истинное значение среднего возраста людей, собиравшихся голосовать за Пиночета, лежит в интервале от 39 до 41 года.

Бонус: так как данные по этому плебисциту в Чили можно считать историческими, у нас есть возможность проверить, накрыл ли посчитанный нами доверительный интервал для доли сторонников Пиночета значение, которое получилось по итогам плебисцита. Давайте допустим, что доля поддержавших оставление Пиночета у власти на референдуме и есть истинное значение доли в генеральной совокупности (конечно, это не совсем так – ведь не все население Чили принимало участие в голосовании).

Наш 90%-ный доверительный интервал был [0.47, 0.51], а 95%-ный был [0.47, 0.52]. По результатам референдума известно, что примерно 44% жителей проголосовали за оставление Пиночета у власти еще на 8 лет. Мы чуть-чуть промахнулись: наши доверительные интервалы попали в те 10% и 5% доверительных интервалов, которые не накрывают истинную долю в генеральной совокупности.