Проверка статистических гипотез. Часть 1.

Проверка статистических гипотез при помощи функций библиотеки scipy.stats.

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

  1. если нулевая нулевая гипотеза отвергается, когда на самом деле она верна, то совершается ошибка первого рода (ложно-отрицательный ответ).
  2. если нулевая нулевая гипотеза принимается, когда на самом деле она не верна, то совершается ошибка второго рода (ложно-положительный ответ).

Вероятность совершить ошибку первого рода называется уровнем значимости и обычно обозначается как \(\alpha\). Вероятность совершить ошибку второго рода обозначается как \(\beta\), а вероятность не допустить ошибку второго рода \(1 - \beta\) называется мощностью критерия. При проверке статистических гипотез уровень значимости обычно принимают равным 0.1 0.05 или 0.01.

Для проверки гипотезы используют специально-подобранную случайную величину, которая называется статистический критерий. Наблюдаемым значением критерия называют значение критерия, вычисленное по выборке. Критическая область это совокупность значений критерия, при которых нулевая гипотеза отвергается. Критическими точками называют точки, отделяющие критическую область от областей принятия гипотезы.

Функции пакета scipy.stats для проверки гипотез обычно возвращают значение критерия и p-значение, которое сравнивается с уровнем значимости. Если р-значение больше уровня значимости, то нет основания отвергнуть нулевую гипотезу.

Сравнение средних значений двух нормальных генеральных совокупностей

  1. Генеральные совокупности X и Y распределены нормально и известны их дисперсии
  2. По независимым выборкам объемами n и m найдены выборочные средние \(\hat{x}\) и \(\hat{y}\).
  3. Требуется по выборочным средним оценить нулевую гипотезу о том, что генеральные средние рассматриваемых совокупностей равны:
\[H_0: M(X) = M(Y)\]

Для проверке гипотезы о равенстве средних генеральных совокупностей используется функция scipy.stats.ttest_ind.

Аргументы функции:

  • выборка 1
  • выборка 2
  • equal_var - принимается ли допущение о равенстве дисперсий двух выборок (True/False)
  • alternative альтернативная гипотеза (‘greater’, ‘less’, ‘two-sided’)
# Создаем два массива случайных чисел 
# Математическое ожидание равно нулю, стандартное отклонение равно 1 
a = np.random.normal(loc=0.0, scale=1.0, size=30)
b = np.random.normal(loc=0.0, scale=1.0, size=30)

# Построим эмпирические плотности распределения 
df = pd.DataFrame( np.vstack((a,b)).transpose(), columns = ('Массив а','Массив b') )
sns.kdeplot(data = df);

Альтернативная гипотеза \(H_1: M(X) \neq M(Y)\). alternative=’two-sided’

s, pvalue = scipy.stats.ttest_ind(a, b, equal_var=True, alternative='two-sided')
print('p-значение равно {:5.3f}'.format(pvalue))

Результат:

p-значение равно 0.375

Предположим, что принятый уровень значимости равен 0,05. Полученное p-значение велико - гораздо больше уровня значимости, следовательно нет оснований отвергнуть нулевую гипотезу о равенстве средних двух генеральных совокупностей. Ожидаемый результат, с учетом того, что массивы a и b сгенерированы с одинаковыми математическими ожиданиями.

Альтернативная гипотеза \(H_1: M(X) > M(Y)\). alternative=’greater’

s, pvalue = scipy.stats.ttest_ind(a, b, equal_var=True, alternative='greater')
print('p-значение равно {:5.3f}'.format(pvalue))

Результат:

p-значение равно 0.621

Полученное p-значение велико - гораздо больше уровня значимости, следовательно нет оснований отвергнуть нулевую гипотезу о равенстве средних двух генеральных совокупностей в пользу альтернативной гипотезы.

Альтернативная гипотеза \(H_1: M(X) < M(Y)\). alternative=’less’

s, pvalue = scipy.stats.ttest_ind(a, b, equal_var=True, alternative='less')
print('p-значение равно {:5.3f}'.format(pvalue))

Результат:

p-значение равно 0.379

Полученное p-значение велико - гораздо больше уровня значимости, следовательно нет оснований отвергнуть нулевую гипотезу о равенстве средних двух генеральных совокупностей в пользу альтернативной гипотезы.

Сравнение выборочной средней с гипотетической генеральной средней нормальной совокупности

Пусть генеральная совокупность Х распределена нормально, при это генеральная средняя \(m\) неизвестна, но есть основания полагать, что она равна \(m_0\). Для проверки этой гипотезы определяется средняя выборки из генеральной совокупности \(\hat m\) и устанавливают значимо или незначимо различаются \(\hat m\) и \(m_0\).

Гипотеза: \[H_0: \hat{m} = m_0\]

Альтернативная гипотеза: \(H_1: \hat{m} \neq m_0\)

или \[H_1: \hat{m} > m_0\]

или \[H_1: \hat{m} < m_0\]

Для проверки гипотезы о равенстве математического ожидания генеральной совокупности некоторому значения, по результатам оценки математичексого ожидания выборки используется функция scipy.stats.ttest_1samp.

Аргументы функции:

  • выборка
  • popnmean: предполагаемое математическое ожидание генеральной совокупности
  • alternative: вид альтернативной гипотезы (‘two-sided’, ‘less’, ‘greater’)

Для оценки гипотезы используется критерий \[k = \frac{\hat{x}-a}{s}\]

где \(\hat{x}\) - среднее значение выборки, \(a\) - гипотетическое математическое ожидание генеральной совокупности, \(s\) - стандартное отклонение выборки.

# Вычисляем статистику
test_4_mean = 0
k, p_value = scipy.stats.ttest_1samp(a, popmean=test_4_mean)
print("Критерий = {:4.2f}, p-значение = {:4.2f}".format(k, p_value) )
# Вычислим для сравнения значение критерия по приведенной выше формуле
print("Критерий = {:4.2f}".format( (np.mean(a)-test_4_mean)*np.sqrt(a.size)/np.std(a,ddof=1) ) )

Результат

Критерий = 0.01, p-значение = 0.99
Критерий = 0.01

Полученное p-значение велико - гораздо больше уровня значимости, следовательно нет оснований отвергнуть нулевую гипотезу о равенстве математического ожидания генеральной совокупности, из которой взята выборка a, значения test_4_mean = 0.

Сравнение двух дисперсий нормальных генеральных совокупностей

На практике задача сравнения двух дисперсий возникает, когда необходимо сравнить точность приборов, методов измерений или инструментов. Пусть генеральные совокупности X и Y распределены нормально. По независимым выборкам с объемом \(n_1\) и \(n_2\) определены исправленные выборочные дисперсии \(s_x^2\) и \(s_y^2\). Требуется по исправленным дисперсиям при заданном уровне значимости $\alpha$ проверить нулевую гипотезу о том, что генеральные дисперсии рассматриваемых совокупностей равны между собой \[H_0: D(X)=D(Y)\]

В качестве критерия для проверки нулевой гипотезы используется отношение дисперсии: \[F = \frac{S_1}{S_2}\]

Эта величина при справедливости нулевой гипотезы имеет распределение Фишера-Снедекора со степенями свободы \(k_1 = n_1-1\), \(k_2 = n_2-1\). В зависимости от альтернативной гипотезы определяют правостороннюю, левостороннюю или двухстороннюю критическую области.

При \(H_1: D(X)>D(Y)\) критическую точку находят из условия \[P[F>F_{\text{кр}}(\alpha,k_1,k_2)] = \alpha\]

используя функцию scipy.stats.f.isf(alpha, k1, k2)

Пример. Пусть даны две выборки размером 12 и 15. Найдем с уровнем значимости 0,05 правую границу критической области для альтернативной гипотезы \(H_1: D(X)>D(Y)\):

alpha = 0.05
n1 = 12
n2 = 15

scipy.stats.f.isf(alpha, n1-1,n2-1)

Результат:

2.5654974067604948

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

Для альтернативной гипотезы $H_1: D(X)<D(Y)$ критическую точку находят из условия \[P[F<F_{\text{кр}}(\alpha,k_1,k_2)] = \alpha\]

используя функцию scipy.stats.f.ppf(alpha, k1, k2)

alpha = 0.05
n1 = 12
n2 = 15

scipy.stats.f.ppf(alpha, n1-1,n2-1)

Результат:

0.3651436481381948

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

Для альтернативной гипотезы $H_1: D(X) \neq D(Y)$ находят двухстороннюю критическую область \[P[F < F_{\text{кр,лев}}(\alpha/2,k_1,k_2)] = \alpha/2\] \[P[F < F_{\text{кр,пр}}(\alpha/2,k_1,k_2)] = \alpha/2\]

используя функцию scipy.stats.f.ppf(alpha/2, k1, k2) и scipy.stats.f.isf(alpha/2, k1, k2)

alpha = 0.05
n1 = 12
n2 = 15

[scipy.stats.f.ppf(alpha/2, n1-1,n2-1), scipy.stats.f.isf(alpha/2, n1-1,n2-1)]

Результат:

[0.2977244718626554, 3.094589790898802]

Нулевая гипотеза отвергается, если наблюдаемое значение критерия, определенного по выборкам, не принадлежит определенному интервалу.

Пример

# Создаем два массива случайных чисел
# Математическое ожидание равно нулю, стандартное отклонение равно 1.00 
a = np.random.normal(loc=0.0, scale=1.0, size=50)
# Математическое ожидание равно нулю, стандартное отклонение равно 1.15 
b = np.random.normal(loc=0.0, scale=1.15, size=50)

# Вычисляем исправленное среднеквадатичное отклонение выборок
s_a = np.std(a,ddof=1) 
s_b = np.std(b,ddof=1)

# Вычисляем критерий
f = (s_a/s_b)**2

# Число степеней свободы 
df_a = len(a)-1
df_b = len(b)-1

# Граница правосторонней области для альтернативной гипотезы D(a)>D(b)
print("Правая граница критической области {:4.2f}".format(scipy.stats.f.isf(alpha, df_a,df_b)))
print("Наблюдаемое значение {:4.2f}".format(f))

pvalue = scipy.stats.f.sf(f, df_a,df_b)
print("p-значение {:5.3f}".format(pvalue))

Результат:

Правая граница критической области 1.61
Наблюдаемое значение 0.57
p-значение 0.973

Наблюдаемое значение 0,57 меньше критического 1,61, поэтому нет оснований отвергнуть нулевую гипотезу в пользу альтернативной \(H_1: D(A)>D(B)\).

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

# Использование критерия Бартлетта
scipy.stats.bartlett(a,b)

Результат:

BartlettResult(statistic=3.716836122429798, pvalue=0.05386634897365303)

p-значение больше уровня значимости 0.05, нулевая гипотеза не может быть отвергнута.

# Использование критерия Левена
scipy.stats.levene(a,b)

Результат:

LeveneResult(statistic=4.313548588953809, pvalue=0.040426160819560755)

p-значение больше уровня значимости 0.05, нулевая гипотеза не может быть отвергнута.

Сравнение выборочной (исправленной) дисперсии с гипотетической генеральной дисперсией нормальной совокупности

Пусть генеральная совокупность распределена нормально, при этом генеральная дисперсия неизвестна, но имеются основания полагать, что она равна предполагаемому значения \(\sigma_0^2\). Из генеральной совокупности извлекается выборка объема n и по этой выборке определяется исправленная дисперсия \(s^2\). Требуется по исправленной выборочной дисперсии при заданном уровне значимости проверить нулевую гипотезу: \[H_0: M(s^2) = \sigma_0^2\]

Т.е. необходимо установить, значимо или нет различаются исправленная выборочная и гипотетическая генеральная дисперсии.

Критерий для проверки нулевой гипотезы: \[\chi^2 = (n-1) \frac{s^2}{\sigma_0^2}\]

где \(s\) - исправленное стандартное отклонение выборки, \(\sigma_0\) - предполагаемое стандартное отклонение генеральной совокупности.

Критическая область строится в зависимости от вида альтернативной гипотезы.

Если \[H_1: \sigma > \sigma_0,\]

то строят правостороннюю критическую область и критическая точка определяется при помощи функции scipy.stats.chi2.ppf. Нулевая гипотеза принимается, если \(\chi^2<\chi_{крит}^2\)

# Уровень значимости
alpha = 0.01
# Количество точек в выборке 
n = 13
# Критическое ПРАВОСТОРОННЕЕ значение определяем при помощи обратной функции надежности распределения 
# xi2 - isf, передавая первым аргументом уровень значимости, вторым - число степеней свободы,
# равное уменьшенному на 1 количеству элеметов в выборке 
critical = scipy.stats.chi2.isf(alpha, n-1)
# Предполагаемое значение стандартного отклонения генеральной совокупности
population_std = 1.9
# Тестовый массив
a = np.random.normal(loc=0.0, scale=1.9, size=n)
c = (n-1)*(np.std(a,ddof=1)**2)/(population_std**2)

print('Наблюдаемое значение {:4.2f}'.format(c))
Наблюдаемое значение 11.38

Если наблюдаемое значение меньше критического, то нет оснований отвергнуть нулевую гипотезу.

Если конкурирующая гипотеза: \[H_1: \sigma \neq \sigma_0,\]

то строят двухстороннюю критическую область. Нулевая гипотеза принимается, если \(\chi^2<\chi_{крит, прав}^2\) и \(\chi^2>\chi_{крит, лев}^2\).

# Правая граница определяется при помощи обратной функции надежности 
# первый аргумент - половина принятого уровня значимости
chi_crit_right = scipy.stats.chi2.isf(alpha/2, n-1)
# Левая граница определяется при помощи обратной функции распределения 
# первый аргумент - половина принятого уровня значимости
chi_crit_left  = scipy.stats.chi2.ppf(alpha/2, n-1)

print('Критическое значение левое  {:4.2f}'.format(chi_crit_left))
print('Критическое значение правое {:4.2f}'.format(chi_crit_right))

Результат:

Критическое значение левое  3.07
Критическое значение правое 28.30

Нулевая гипотеза не отвергается, если наблюдаемое значение лежит внутри этого интервала.

Если конкурирующая гипотеза \[H_1: \sigma < \sigma_0,\]

то строят левостороннюю критическую область. Нулевая гипотеза принимается, если \(\chi^2>\chi_{крит, лев}^2\).

# Левая граница определяется при помощи обратной функции распределения 
# первый аргумент -  уровень значимости
chi_crit_left  = scipy.stats.chi2.ppf(alpha, n-1)
print('Критическое значение левое  {:4.2f}'.format(chi_crit_left))

Результат:

Критическое значение левое  3.57

Список использованных источников

  1. F-tests for Equality of Two Variances
  2. Гмуртан В. Е. Теория вероятностей и математическая статистика: Учеб. пособие для вузов. - 8-е изд. стер. - М.: Высш. шк. 2002.
  3. Высшая математика - просто и доступно! Проверка статистических гипотез
  4. Введение в анализ данных с помощью Pandas
  5. Критерии нормальности распределения
  6. Статистические гипотезы. Презентация.
  7. Emory Oxford college. Exercises - Comparing Means 2
  8. Confidence Interval and Hypothesis Testing: Exercises and Solutions
  9. MS-A0503 First course in probability and statistics Department of mathematics and systems analysis
  10. Exercises - One Way Analysis of Variance (ANOVA)
  11. Chapter: Biostatistics for the Health Sciences: One-Way Analysis of Variance

© 2023. All rights reserved.

Powered by Hydejack v9.1.6