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