Статистика колледжа с Python
Введение
В серии еженедельных статей я расскажу о некоторых важных статистических темах с изюминкой.
Цель состоит в том, чтобы использовать Python, чтобы помочь нам получить интуитивное представление о сложных концепциях, эмпирически проверить теоретические доказательства или построить алгоритмы с нуля. В этой серии вы найдете статьи по таким темам, как случайные переменные, выборочные распределения, доверительные интервалы, тесты значимости и многое другое.
В конце каждой статьи вы можете найти упражнения для проверки своих знаний. О решениях мы расскажем в статье на следующей неделе.
Опубликованные статьи:
- Бернулли и биномиальные случайные переменные с Python
- От биномиальных к геометрическим и пуассоновским случайным величинам с помощью Python
- Распределение выборки пропорции выборки с помощью Python
- Доверительные интервалы с Python
- Тесты значимости с Python
- Двухэтапный вывод о различии между группами с помощью Python
- Вывод для категориальных данных
- Продвинутая регрессия
- Дисперсионный анализ - ANOVA
Как обычно, код доступен на моем GitHub.
Пошаговый дисперсионный анализ
Опять же, мы работаем с зарплатой Data Scientists. В этом случае нас не интересует прогнозирование заработной платы на основе какой-либо независимой характеристики. Мы сосредоточены на том, чтобы понять, есть ли разница в средних зарплатах между 3 группами специалистов по обработке данных с разным опытом: первая - это образцы выпускников компьютерных наук, вторая - экономики, а третья - инженеров информатики (обратите внимание, что единица заработной платы - 10 000 евро).
import pandas as pd import numpy as np from scipy.stats import f
df = pd.DataFrame.from_dict({'g1': [5,9,10,12,8,8,9], 'g2': [5,4, 4, 5,5,4,8], 'g3': [9,8, 5, 6,7,7,6]}) df
Первым шагом для выполнения теста ANOVA является вычисление SST (общая сумма квадратов), SSW (общая сумма квадратов внутри) и SSB (общая сумма квадратов между ними), а также соответствующих степеней свободы. Они рассчитывались следующим образом:
- SST - это сумма квадрата расстояния между каждой точкой данных и средним значением набора данных. В данном случае степени свободы - это количество групп m, умноженное на количество точек данных n в каждой группе, и затем мы вычитаем 1, т. Е. M • n -1.
- SSW - это сумма квадрата расстояния между каждой точкой данных и соответствующим средним значением группы. Степени свободы - это количество групп, умноженное на количество точек данных минус 1, то есть m • (n -1).
- SSB - это сумма квадратов расстояния между средним значением каждой группы и средним значением набора данных для каждой точки данных. Степени свободы - это количество групп минус 1, т. Е. M -1.
m = df.shape[1] n = df.shape[0]
SST = np.sum(np.sum((df - np.mean(np.mean(df)))**2)) SST
98.57142857142858
df_sst = m*n-1 df_sst
20
SSW = np.sum(np.sum((df - np.mean(df))**2)) SSW
50.28571428571429
df_ssw = m*(n-1) df_ssw
18
SSB = np.sum(np.sum((np.tile(np.mean(df), (3,1)) - np.mean(np.mean(df)))**2)) SSB
20.6938775510204
df_ssb = m-1 df_ssb
2
Проверка гипотез
Давайте определимся с нашей проверкой гипотез. Наша нулевая гипотеза - это сценарий, в котором фон не имеет значения. Напротив, наша альтернативная гипотеза утверждает, что фон влияет на зарплату специалиста по данным.
Как обычно, мы предположим, что наша нулевая гипотеза верна, и выясним вероятность получения статистики как экстремальной или более экстремальной, чем та, которую мы получаем из наблюдаемых данных. Для этого мы будем использовать F-статистику, которая в основном представляет собой отношение двух статистик хи-квадрат. Фактически, это отношение двух рассчитанных выше показателей, деленное на их соответствующие степени свободы:
Идея состоит в том, что, если числитель значительно больше знаменателя, это должно заставить нас поверить в то, что истинные средние значения совокупностей различаются. И наоборот, если знаменатель значительно больше, это означает, что вариация внутри каждой выборки составляет больший процент от общей вариации по сравнению с вариацией между выборками. Таким образом, любое различие, которое мы наблюдаем в средних значениях, вероятно, является результатом случайности.
F = (SSB/df_ssb)/(SSW/df_ssw) F
3.703733766233764
f.ppf(0.95, dfn=df_ssb, dfd=df_ssw)
3.554557145661787
Теперь мы можем вычислить p-значение. Давайте использовать уровень значимости 0,1.
p_value = (1 - f.cdf(F, dfn=df_ssb, dfd=df_ssw))*2 p_value
0.08991458167840971
if p_value<0.1: print('Reject H_0') else: print('Accept H_0')
Reject H_0
Мы видим, что p-значение меньше уровня значимости, что заставляет нас отвергать нулевую гипотезу. Существует достаточно доказательств, чтобы принять различие между средними значениями популяций, которое не происходит исключительно случайно или не из-за различий внутри каждой группы. С учетом вышесказанного, мы можем сделать вывод, что зарплата специалиста по данным различается в зависимости от уровня подготовки.
Вывод
В этой статье был рассмотрен дисперсионный анализ (ANOVA), набор методов для сравнения нескольких средних значений в разных группах. Мы также ввели новую статистику, называемую F-статистикой, которую мы использовали для проверки гипотез о разнице средних значений наших групп.
Это последняя статья из серии «Статистика колледжей с Python». Надеюсь, вам понравилось!
Ответы за прошлую неделю
- Марсия собрал данные о времени автономной работы и цене случайной выборки портативных компьютеров. Основываясь на данных, представленных ниже, какова статистика теста для нулевой гипотезы о том, что наклон населения равен 0?
data = {'Intercept': [200.312, 92.618], 'Battery': [7.546,4.798]}
df = pd.DataFrame.from_dict(data, columns=['Coef', 'SE Coef'], orient='index') df
t = (df['Coef'][1]-0)/df['SE Coef'][1] t
1.5727386411004585
2. Руи произвел случайную выборку коллег на работе и заметил положительную линейную зависимость между их возрастом и количеством километров, которые, по их словам, они прошли вчера. 95% доверительный интервал для наклона линии регрессии был (15,4, 155,2). Руи хочет использовать этот интервал для проверки H_0: β = 0 против H_1: β ≠ 0 на уровне значимости 5%. Предположим, что все условия для вывода были выполнены. К чему должен прийти Руи?
Руи должен отвергнуть H_0, т. Е. Данные предполагают линейную зависимость между возрастом и количеством пройденных вчера километров.