Статистика колледжа с Python

Введение

В серии еженедельных статей я расскажу о некоторых важных статистических темах с изюминкой.

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

В конце каждой статьи вы можете найти упражнения для проверки своих знаний. О решениях мы расскажем в статье на следующей неделе.

Опубликованные статьи:

Как обычно, код доступен на моем 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». Надеюсь, вам понравилось!

Ответы за прошлую неделю

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