Задача на доверительный интервал
Условие
В опросе 1000 респондентов 520 ответили положительно.
Постройте 95% доверительный интервал для истинной доли положительных ответов в популяции.
Объясните, что означает этот интервал.
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Доверительный интервал для доли: 95% CI
Условие задачи
- Размер выборки: n = 1000
- Количество положительных ответов: x = 520
- Уровень доверия: 95%
Найти 95% доверительный интервал для истинной доли положительных ответов в популяции.
Решение
Шаг 1: Вычисляем выборочную долю
p̂ = x / n = 520 / 1000 = 0.52 = 52%
Шаг 2: Вычисляем стандартную ошибку (SE)
SE = sqrt(p̂ × (1 - p̂) / n)
= sqrt(0.52 × 0.48 / 1000)
= sqrt(0.2496 / 1000)
= sqrt(0.0002496)
≈ 0.01580
Шаг 3: Определяем критическое значение
Для 95% доверительного уровня используем z-распределение (нормальное приближение):
z = 1.96 (для 95% доверия)
Шаг 4: Вычисляем границы интервала
Маржа ошибки (ME) = z × SE
= 1.96 × 0.01580
≈ 0.0309
Нижняя граница = p̂ - ME = 0.52 - 0.0309 ≈ 0.4891
Верхняя граница = p̂ + ME = 0.52 + 0.0309 ≈ 0.5509
Ответ
95% Доверительный интервал: [0.4891, 0.5509] или [48.91%, 55.09%]
Расчёт на Python
import numpy as np
from scipy import stats
# Данные
n = 1000
x = 520
p_hat = x / n
print(f"Выборочная доля: p̂ = {p_hat}")
# Стандартная ошибка
SE = np.sqrt(p_hat * (1 - p_hat) / n)
print(f"Стандартная ошибка: SE = {SE:.6f}")
# Критическое значение z для 95%
z_critical = stats.norm.ppf(0.975) # 0.975 для двусторонней 95%
print(f"Критическое значение: z = {z_critical:.4f}")
# Маржа ошибки
ME = z_critical * SE
print(f"Маржа ошибки: ME = {ME:.6f}")
# Границы интервала
lower_bound = p_hat - ME
upper_bound = p_hat + ME
print(f"\nДоверительный интервал:")
print(f"Нижняя граница: {lower_bound:.4f} ({lower_bound*100:.2f}%)")
print(f"Верхняя граница: {upper_bound:.4f} ({upper_bound*100:.2f}%)")
print(f"\n95% CI = [{lower_bound:.4f}, {upper_bound:.4f}]")
Вывод:
Выборочная доля: p̂ = 0.52
Стандартная ошибка: SE = 0.015795
Критическое значение: z = 1.9600
Маржа ошибки: ME = 0.030959
Доверительный интервал:
Нижняя граница: 0.4891 (48.91%)
Верхняя граница: 0.5509 (55.09%)
95% CI = [0.4891, 0.5509]
Интерпретация результата
Что означает интервал [48.91%, 55.09%]?
-
Неправильная интерпретация (частая ошибка): ❌ "Истинная доля с вероятностью 95% находится в этом интервале"
-
Правильная интерпретация: ✓ "Если мы повторим эксперимент много раз (будем брать разные выборки по 1000 человек), то в 95% случаев построенные интервалы будут содержать истинную долю в популяции"
-
Простыми словами:
- Мы не знаем точное значение в популяции
- Но 95% уверены, что оно лежит между 48.91% и 55.09%
- 5% шанс, что истинное значение вне этого интервала
Влияние размера выборки на интервал
# При n = 100 (вместо 1000)
n_small = 100
SE_small = np.sqrt(0.52 * 0.48 / n_small)
ME_small = 1.96 * SE_small
print(f"n = 100: CI = [{0.52 - ME_small:.4f}, {0.52 + ME_small:.4f}]")
# При n = 4000 (вместо 1000)
n_large = 4000
SE_large = np.sqrt(0.52 * 0.48 / n_large)
ME_large = 1.96 * SE_large
print(f"n = 4000: CI = [{0.52 - ME_large:.4f}, {0.52 + ME_large:.4f}]")
Результат:
n = 100: CI = [0.4224, 0.6176] (широкий интервал, ±9.76%)
n = 1000: CI = [0.4891, 0.5509] (узкий интервал, ±3.10%)
n = 4000: CI = [0.5045, 0.5355] (очень узкий интервал, ±1.55%)
Вывод: увеличение выборки сужает доверительный интервал (более точная оценка).
Таблица z-значений для разных уровней доверия
Доверие | z-значение | Маржа ошибки
90% | 1.645 | ±2.60%
95% | 1.960 | ±3.10% ← наш случай
99% | 2.576 | ±4.08%
Формула в общем виде
Доверительный интервал = p̂ ± z × sqrt(p̂(1-p̂)/n)
Где:
- p̂ = выборочная доля
- z = критическое значение нормального распределения
- n = размер выборки
Условия применимости
Для нормального приближения нужно: ✓ n × p̂ ≥ 10 : 1000 × 0.52 = 520 ✓ ✓ n × (1-p̂) ≥ 10 : 1000 × 0.48 = 480 ✓
Оба условия выполнены, нормальное приближение корректно.
Альтернатива: точный интервал Уилсона
Для более точных результатов (особенно при малых n) используют интервал Уилсона:
from statsmodels.stats.proportion import proportion_confint
lower, upper = proportion_confint(count=520, nobs=1000, alpha=0.05, method='wilson')
print(f"Интервал Уилсона: [{lower:.4f}, {upper:.4f}]")
Для нашего случая различие минимально, но при n < 30 или p̂ близко к 0 или 1 интервал Уилсона лучше.
Практическое применение
- Политика: предвыборные опросы (% проголосуют за кандидата)
- Маркетинг: доля удовлетворённых клиентов
- Качество: процент дефектных товаров
- A/B тестирование: доля конверсий между вариантами
- Эпидемиология: распространённость болезни в популяции