Шпаргалка по статистическому анализу

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

Помимо этого стоит оценить удобную шпаргалку по анализу данных.

Статистические критерии для численных переменных

Если данные сгруппированны (например, уровень сахара в крови до приёма таблеток у одних и тех же людей, и после), то можно применять следущие критерии однородности средних:

pre = data[:,0]
post = data[:,1]

# парный Т-тест. Когда измеряется однородность средних в двух разных группах
t_statistic, p_value = stats.ttest_1samp(post - pre, 0)

# p < 0.05 => альтернативная гипотеза:
# средние не совпадают
print("paired t-test", p_value)

# Если предположение о нормальости распределения не выполняется или, например, 
# данные принадлежат упорядоченной шкале(!), то используем критерий Уилкоксона
z_statistic, p_value = stats.wilcoxon(post - pre)
print("paired wilcoxon-test", p_value)

Если данные никак не сгруппированы и между ними нет связи, но сравнить мат ожидания очень хочется, то можно это сделать следующим образом:

 
from numpy import genfromtxt, mean, std
import scipy.stats as stats
import matplotlib.pyplot as plt
    # Критерий Стьюдента для двух выборок
    # Нулевая гипотеза: мат ожидания для двух групп равны
    # Причём должно выполнится предположение о равной дисперсии
    # (способы проверки которого приведены ниже)
    # Это верно для независимых групп: например, результаты экзамена для мальчиков и девочек
    # И для зависимых групп: например, как один и тот же класс сдал 2 разных экзамена.
    t_statistic, p_value = stats.ttest_ind(group1, group2)

    # p_value < 0.05 => альтернативная гипотеза:
    # с 5% вероятностью ошибки первого рода у нас будет разное мат. ожидание
    print("two-sample t-test", p_value)

    # Если данные не распределены нормально, применяем критерий Манна-Уитни, также известный как 
    # Критерий Уилкоксона для двух выборок
    u, p_value = stats.mannwhitneyu(group1, group2)
    print("two-sample wilcoxon-test", p_value)
ANOVA

Теперь рассмотрим случай, когда выборок больше, чем 2.

group1 = data[data[:,1]==1,0]
    group2 = data[data[:,1]==2,0]
    group3 = data[data[:,1]==3,0]

    # Вначале проверяем, что дисперсия совпадает, при помощи критерия Левене
    (W,p) = stats.levene(group1, group2, group3)
    if p

Не отходя от кассы проверяем эквивалентность Т-критерия и ANOVA:

    # Рассчитываем значение F- и T- статистики ...
    F_statistic, pVal = stats.f_oneway(data['father'], data['m3other'])
    t_val, pVal_t = stats.ttest_ind(data['father'], data['mother'])

    # ... and show that t**2 = F
    print('\nT^2 == F: ------------------------------------------')
    print('From the t-test we get t^2={0:5.3f}, and from the F-test F={1:5.3f}'.format(t_val**2, F_statistic))

    # численное сравнение
    np.testing.assert_almost_equal(t_val**2, F_statistic)
Множественное сравнение

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

Однако сама по себе эта информация бесполезна. Поэтому нужно знать, для каких пар объектов гипотеза откланяется. При этом нужно провести серию сравнению по одному для каждой пары. Обычно для этого используется Т-критерий Стьюдента.

В итоге, приходится разбираться с проблемой множественных испытаний: необходимо компенсировать риск получения значимого результата, даже когда на самом деле нулевая гипотеза верна. Для этого необходимо корректировать вероятность p при помощи одного из следующих методов:

  • Tukey HSD
  • Бонферрони
  • Холмса
    from statsmodels.stats.multicomp import (pairwise_tukeyhsd,
                                             MultiComparison)
    from statsmodels.formula.api import ols
    from statsmodels.stats.anova import anova_lm
    # Вначале односторонняя ANOVA
    df = pd.DataFrame(dta2)
    model = ols('StressReduction ~ C(Treatment)',df).fit()

    anovaResults =  anova_lm(model)
    print(anovaResults)
    if anovaResults['PR(>F)'][0] < 0.05:
        print('One of the groups is different.')

    #Множественная проверка
    mod = MultiComparison(dta2['StressReduction'], dta2['Treatment'])
    print(mod.tukeyhsd().summary())

    # Синтаксический синоним:
    res2 = pairwise_tukeyhsd(dta2['StressReduction'], dta2['Treatment'])
    #print res2[0]

    # Вывод названий групп:
    print(mod.groupsunique)

    # Вместо использования Tukey HSD, можно использовать парный критерий Стьюдента
    # Предварительно скорректировав при помощи метода Холма
    rtp = mod.allpairtest(stats.ttest_rel, method='Holm')
    print(rtp[0])

    # И метода Бонферрони
    print(mod.allpairtest(stats.ttest_rel, method='b')[0])

    # При использовании этого подхода на каждом шаге вычисляется отклонение.
    # При этом чтобы получить общую дисперсию, нужно использовать несколько хаков
    # которые если что валяются тут:
    # (http://jpktd.blogspot.co.at/2013/03/multiple-comparison-and-tukey-hsd-or_25.html)
    res2 = pairwise_tukeyhsd(dta2['StressReduction'], dta2['Treatment'])
    studentized_mean = res2.meandiffs
    studentized_variance = res2.variance

    t_stat = (studentized_mean / studentized_variance) / np.sqrt(2)
    dof = len(dta2) - len(mod.groupsunique)
    my_pvalues = stats.t.sf(np.abs(t_stat), dof) * 2  # two-sided

    # и вывод результатов с коррекцией Бонферрони
    from statsmodels.stats.multitest import multipletests
    res_b = multipletests(my_pvalues, method='b')
Критерий Крускала-Уаллиса

Этот критерий используется, если мы сравниванием между собой больше чем 3 группы, законы распределения которых отличаются от нормального. Синтаксис:

from scipy.stats.mstats import kruskalwallis
    # Применение критерия Крускала-Уаллиса
    h, p = kruskalwallis(city1, city2, city3, city4)

    # Вывод
    if p

Статистические критерии для порядковых переменных

С этой шкалой переменных всё очень просто. Напомню, что порядковыми называются те переменные, для которых задано отношение порядка, но их нельзя сравнивать между собой количественно. Например, “Хорошо” и “Отлично”. Ясно, что “Отлично” по шкале будет стоять выше, чем “Хорошо”, но вот насколько: в 2 или в 3 раза сказать нельзя.

Для анализа двух ранжированных групп чаще всего используется критерий Манна-Уитни.

Для анализа трёх и более групп используется критерий Крускала-Уаллеса.

    n = 235
    p = 1/6.

    # Вероятность того, что мы получим не меньше чем checkVal количество "6"
    bd = stats.binom(n,p)
    p_oneTail = bd.sf(checkVal-1) 

    # Вероятность случаного выпадения 6, или большего значения.
    p_twoTail = stats.binom_test(checkVal, n, p)

С помощью этого кода можно, например определить, вероятность того, что не меньше чем 60% клиентов останутся довольны сервисом, а также можно посчитать вероятность того, что сервис их просто удолетворяет.

Статистические критерии для категориальных переменых

Наиболее часто используются критерии типа хи-квадрат, которые применяются для проверки принадлежности к одному распределению и критерий Фишера, который определяет тоже самое, но является более частоупотребимым, особенно на маленьких выборках

# Enter the data
    obs = np.array([[1,5], [8,2]])

    #Вот так вот считается критерий Фишера
    fisher_result = stats.fisher_exact(obs)

    print('\nFISHER --------------------------------------------------------')
    print(('The probability of obtaining a distribution at least as extreme '
    + 'as the one that was actually observed, assuming that the null ' +
    'hypothesis is true, is: {0:5.3f}.'.format(fisher_result[1])))

Проверка корреляции

А проверить корреляцию можно при помощи критерией Пирсона, Спирмана и Кендала, которые также реализованы в SciPy:

    # Данные
    x = data[:,0]
    y = data[:,1]

    # 3 различных способа подсчитать корреляцию
    corr = {}
    corr['pearson'], _ = stats.pearsonr(x,y)
    corr['spearman'], _ = stats.spearmanr(x,y)
    corr['kendall'], _ = stats.kendalltau(x,y)
Характеристики

Переменная отклика

Категориальная Численная
Категориальные Хи-квадрат, Логистическая регрессия t-критерий, ANOVA (Analysis
of Varirance), Линейная регрессия
Численные Логистическая регрессия Линейная регрессия, Коэффициент корреляции Пирсоа
Категориальные и численные Логистическая регрессия Линейная регрессия, Ковариационный анализ

Хи-квадрат

Критерий Хи-квадрат используется тогда, когда анализируются категориальные переменные (ответы “да”/”скорее всего нет” и подобные). Этот критерий можо применять какждый раз, когда используется кросс-таб, для того, чтобы узнать статистическую занчимость связи между категориальным откликом (например, человек является покупателем марки) и характеристикой (например, человек является женщиной).

ANOVA (Analysis of Variance)

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

Односторонняя ANOVA. Позволяет проанализировать отклонение численной зависимой переменной, основываясь на одной факторной независимой. Используется для проверки гипотезы о том, что несколько мат. ожиданий равны и является продолжением двух-выборочного Т-критерия.

Двухсторонняя ANOVA (Analysis of Covariance с применением функции GLM). Факторная переменная делит выборку на некоторые группы. Используя Обшую Линейную Модель, можно проверить нулевую гипотезу о том, что другие переменные не влияют на мат. ожидание зависимой переменной. Также при помощи этого инструмента можно исследовать влияние факторов на зависимую переменную и понять, насколько они влияют на неё.

Линейная регрессия

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

Коэффициент корреляции Пирсона

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

Т-критерий Стьюдента

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

Помимо этого, приведём таблицу наиболее часто применяемых критериев, которые ещё зависят от количества сравниваемых выборок:

 Сравниваемые группы Независимые выборки Зависимые выборки
Выборки номинальных (категориальных) переменных
2 и более Критерий Фишера или критерий Хи-квадрат Критерий МакНемара
Выборки ординальных (упорядоченных) переменных
2 Критерий Манна-Уитни Критерий Уилкоксона
3 и более Критерий Крускала-Валлиса Критерий Фридмана
Выборки численных переменных
2 Критерий Стьюдента и Манна-Уитни Групповой критерий Стьюдента или Уилкоксона
3 и более ANOVA или критерий Крускала-Валлиса Критерий Фридмана или ANOVA для повторяющихся измерений

Список статистических критериев, разбитый по целям применения

Критерии однородности

Эти критерии используются для проверки гипотезы на принадлежность одному и тому же распределению (значит что происходящие процессы имеют схожую природу)

  • Критерий Смирнова
  • Критерий однородности Лемана-Розенблатта. Этот критерий мощнее, кроме тех случаев, когда законы близки.

Эти критерии не способны различать близкие конкурирующие гипотезы при малых объёмах выборок.

Критерии согласия

Параметрические:

  • Хи квадрат Пирсона
  • Критерий отношения правдоподобия (для простых и сложных гипотез)

Непараметрические:

  • Критерий Колмагорова
  • Критерий Смирнова
  • Критерий w^2

Нельзя сравнивтаь близкие законы при малых объёмах выборок.

Мощность критериев при

  • Простой гипотезе: Хи-квадрат > Андерсона Дарлинга > w^2 Мизеса > Колмогорова
  • Сложной гипотезе: Андерсона Дарлинга > w^2 Мизеса > Хи-квадрат Пирсона > Колмогорова
  • При близких гипотезах: Андерсона Дарлигна > w^2 Мизеса

Критерии проверки отклонения распределения

  • Критерий проверки на симметричность
  • Критерий проверки на эксцсс
  • Критерий Шапиро-Уилка
  • Критерий Эпса-Палли
  • Критерий Гири
  • Критерий Шпигельхальтера
  • Критерий D’Агостиньо

Эти критерии справляются лучше с проверкой на нормальность, чем критерии согласия при малых объёмах выборок.

Самый лучший из них: критерий D’Агостиньо.

Критерии проверки однородности средних

  • Критерий Стьюдента (Т-тест) используется при неизвестных, но равных дисперсиях и при соблюдения нормального распределения.
  • F-критерий, используется при неизвестных и различных дисперсиях, при соблюдении гипотезы о нормальности распределения.
  • Критерий Манна-Уитни, Уилкоксона, Краскера-Уолласа.

Критерии проверки однородности дисперсий

Фишера, Бартлета, Кокрена, Хартли.

Основной плюс непараметрических критериев: можно нарушать предположение о нормальности, но при этом должны быть равны средние и выборки должныть быть одинаково распределены.

Критерии проверки гипотез независимости и отсутствия тренда

  • Критерий Аббе. Проверяет выборки с равными мат. ожиданиями на отсутствие систематических изменений.
  • Критерий автокорреляции. Если выборка не случайна, то значение каждого элемента не должно зависеть от соседних величин.
  • Ранговый критерий обнаружения сдвига дисперсии в неизвестной точке.

Мощность критериев: Аббе > Кокса-Стюарта > Бартлета > автокорреляции > Фостера-Стбюарта

 Полезные ссылки:

Статистические тесты в R. Тесты качественных данных

Статистические тесты в R: Тесты количественных данных

Другие статьи по работе с данными в Python

Манипуляция и обработка данных в Python (Data wrangling and munging)

Анализ данных при помощи Python. Основные статистики и обзор данных (Exploratory Analysis)

Анализ данных при помощи Python. Основные статистики и обзор данных (Exploratory Analysis) часть 2

Анализ данных при помощи Python. Графики в pandas и matplotlib.

 

 

Kirill

 

560 thoughts on “Шпаргалка по статистическому анализу

  1. Pingback: site
  2. Pingback: rftrip.ru
  3. Pingback: dolpsy.ru
  4. Pingback: kin0shki.ru
  5. Pingback: 3o9cpydyue4s8.ru
  6. Pingback: mb588.ru
  7. Pingback: newsukraine.ru
  8. Pingback: edu-design.ru
  9. Pingback: tftl.ru
  10. Pingback: brutv
  11. Pingback: site 2023
  12. Pingback: buy propecia 84
  13. Pingback: sitestats01
  14. Pingback: 1c789.ru
  15. Pingback: cttdu.ru
  16. Pingback: 1703
  17. Pingback: hdserial2023.ru
  18. Pingback: serialhd2023.ru
  19. Pingback: matchonline2022.ru
  20. Pingback: bit.ly/3OEzOZR
  21. Pingback: bit.ly/3gGFqGq
  22. Pingback: bit.ly/3ARFdXA
  23. Pingback: bit.ly/3ig2UT5
  24. Pingback: bit.ly/3GQNK0J
  25. Pingback: video
  26. Pingback: bep5w0Df
  27. Pingback: www
  28. Pingback: icf
  29. Pingback: 24hours-news
  30. Pingback: rusnewsweek
  31. Pingback: uluro-ado
  32. Pingback: irannews.ru
  33. Pingback: klondayk2022
  34. Pingback: tqmFEB3B
  35. Pingback: mangalib
  36. Pingback: priligy 30mg drug
  37. Pingback: x
  38. Pingback: 9xflix
  39. Pingback: xnxx
  40. Pingback: 123movies
  41. Pingback: kamagra bestellen
  42. Pingback: priligy pills
  43. Pingback: kinokrad
  44. Pingback: batmanapollo
  45. Pingback: vsovezdeisrazu
  46. Pingback: 2023
  47. Pingback: vardenafil tablet
  48. Pingback: ipsychologos
  49. Pingback: yug-grib.ru
  50. Pingback: studio-tatuage.ru
  51. Pingback: video.vipspark.ru
  52. Pingback: vitaliy-abdulov.ru
  53. Pingback: psychophysics.ru
  54. Pingback: dapoxetine mexico?
  55. Pingback: vidalista 20?
  56. Pingback: men viagra pills?
  57. Pingback: stromectol 3mg?
  58. Pingback: batmanapollo.ru
  59. Pingback: 777
  60. Pingback: wlw.su
  61. Pingback: vxi.su
  62. Pingback: nlpvip.ru
  63. Pingback: manipulyation
  64. Pingback: viagra 25 mg daily
  65. Pingback: ivermectin tablets
  66. Pingback: 354
  67. Pingback: Link
  68. Pingback: psy
  69. Pingback: kiino4k.ru
  70. Pingback: depresiya
  71. Pingback: film
  72. Pingback: new 2024
  73. Pingback: batman apollo
  74. Pingback: film2024
  75. Pingback: buy lasix diuretic
  76. Pingback: poxet 30
  77. Pingback: vidalista pirkt
  78. Pingback: 000
  79. Pingback: samorazvitiepsi
  80. Pingback: lasix drug
  81. Pingback: sertraline 50 mg
  82. Pingback: revia naltrexone
  83. Pingback: androgel generic
  84. Pingback: androgel uk
  85. Pingback: vidalista
  86. Pingback: vilitra 40
  87. Pingback: androgel cost
  88. Pingback: tadalista 20 mg
  89. Pingback: androgel 1.62
  90. Pingback: androgel for women
  91. Pingback: Anonymous
  92. Pingback: vidalista
  93. Pingback: spisok
  94. Pingback: cenforce 100
  95. Pingback: vidalista
  96. Pingback: stromectol scabies
  97. Pingback: clomid 50 for pct
  98. Pingback: Sildenafil
  99. Pingback: gabapentin 600 mg
  100. Pingback: list
  101. Pingback: Cenforce 100mg us
  102. Pingback: cenforce amazon
  103. Pingback: fildena 100mg
  104. Pingback: fildena us
  105. Pingback: plaquenil price
  106. Pingback: clomid order
  107. Pingback: clomid cost
  108. Pingback: clomid for men
  109. Pingback: stromectol 12 mg
  110. Pingback: kamagra vs cialis
  111. Pingback: kamagra gold 100
  112. Pingback: russian-federation
  113. Pingback: vidalista 60
  114. Pingback: buy vidalista
  115. Pingback: vidalista 60
  116. Pingback: vidalista 60
  117. Pingback: vidalista 60
  118. Pingback: kamagra vs cialis
  119. Pingback: advair price
  120. Pingback: Cenforce 50mg us
  121. Pingback: cenforce
  122. Pingback: kamagra vs viagra
  123. Pingback: vidalista drug
  124. Pingback: albuterol inhaler
  125. Pingback: cenforce 100
  126. Pingback: levitra bayer
  127. Pingback: buy fildena online
  128. Pingback: buy Sildenafil
  129. Pingback: cenforce 10
  130. Pingback: clindagel price
  131. Pingback: fildena 200
  132. Pingback: seretide 25 50
  133. Pingback: seretide evohaler
  134. Pingback: Sildenafil Costco
  135. Pingback: cenforce 150 india
  136. Pingback: Can you Buy clomid
  137. Pingback: fildena 100 paypal
  138. Pingback: hims Sildenafil
  139. Pingback: shorts
  140. Pingback: albuterol inhaler
  141. Pingback: ivermectol 12 uses
  142. Pingback: buy Iverjohn
  143. Pingback: vermact12
  144. Pingback: iverscab 6 mg
  145. Pingback: ivermectol 12 uses
  146. Pingback: ivecop 6
  147. Pingback: buy stromectol
  148. Pingback: buy levitra
  149. Pingback: yaltalife.ru
  150. Pingback: kinogo
  151. Pingback: fildena 100
  152. Pingback: human design
  153. Pingback: buy plaquenil
  154. Pingback: clomid cost
  155. Pingback: buy vilitra 10mg
  156. Pingback: cenforce
  157. Pingback: Opsumiologist
  158. Pingback: plaquenil generic
  159. Pingback: prednisone tablet
  160. Pingback: vidalista 40 india
  161. Pingback: buy vilitra 10mg
  162. Pingback: buy clomid otc
  163. Pingback: ivermectol 6
  164. Pingback: vermact 12 uses
  165. Pingback: vilitra 40
  166. Pingback: buy rybelsus 14mg
  167. Pingback: buy rybelsus 14mg
  168. Pingback: hcq for sle
  169. Pingback: Cenforce
  170. Pingback: motilium vs reglan
  171. Pingback: 10mg motilium
  172. Pingback: link here
  173. Pingback: citopam 20
  174. Pingback: printsipy forda
  175. Pingback: salbutamol inhaler
  176. Pingback: celexa medication
  177. Pingback: cenforce 200
  178. Pingback: cenforce 150 india
  179. Pingback: dizain-cheloveka
  180. Pingback: amoxil 500mg pills
  181. Pingback: amoxicillin price
  182. Pingback: fertomid m tablet
  183. Pingback: vidalista black 80
  184. Pingback: cenforce 100 india
  185. Pingback: fildena for sale
  186. Pingback: vidalista 20
  187. Pingback: fildena super
  188. Pingback: cenforce
  189. Pingback: URL

Comments are closed.