• Автор записи:
  • Рубрика записи:Scipy
  • Время чтения:5 минут чтения
  • Комментарии к записи:0 комментариев

Доверительный интервал(ДИ) — это набор значений, которые, как ожидается, будут включать в себя генеральную совокупность с высокой степенью достоверности. Когда среднее значение генеральной совокупности попадает между двумя интервалами, оно обычно указывается в процентах.

Степень неопределенности или уверенности в процессе отбора проб измеряется доверительными интервалами. Они могут использовать любое количество уровней достоверности, наиболее распространенным из которых является уровень достоверности 95 или 99 процентов. Статистические инструменты, такие как t-критерий, используются для расчета доверительных интервалов.

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

Но «Что значит иметь доверительный интервал 95% или 99%?» 95- или 99-процентный доверительный интервал представляет собой набор чисел, в пределах которого вы можете быть на 95 или 99 % уверены, что содержатся истинные средние значения генеральной совокупности.

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

Содержание

T-тест доверительного интервала

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

В Python Scipy есть четыре различных типа методов: ttest_1samp(), ttest_ind(), ttest_ind_from_stats() и ttest_rel():

  • ttest_1samp() : вычислить T-тест для ОДНОГО набора средних оценок.
  • ttest_ind(): вычисляет T-критерий для двух независимых выборок оценок.
  • ttest_ind_from_stats(): на основе описательной статистики, Т-тест для средних значений двух независимых выборок.
  • ttest_rel(): вычисляет t-критерий для двух связанных выборок оценок: a и b.

Синтаксис:

scipy.stats.ttest_1samp(a,axis=0, popmean, nan_policy='propagate', alternative='one-sided')

Где параметры:

  • a (array_data): наблюдательная выборка.
  • axis (int): тест будет рассчитываться по этой оси; значение по умолчанию — 0. Если нет, выполнить вычисление по всему массиву a.
  • popmean(): в нулевой гипотезе это ожидаемое значение. Если это array_data, он должен иметь точную форму за вычетом размера оси.
  • alternative: здесь определяется альтернативная гипотеза. Есть несколько альтернатив, таких как двусторонний, меньше и больше.
  • nan_policy: если входные данные содержат nan, это свойство определяет, как с ним обращаться. Доступно несколько опций, по умолчанию используется «распространение»:
  1. «distribute»: это опция, которая возвращает nan.
  2. «raise»: вызывает ошибку.
  3. «omit»: игнорирует значения nan при выполнении вычислений.

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки или методы, используя приведенный ниже код Python.
import numpy as np
from scipy.stats import ttest_1samp
  • Сначала мы создадим массив для хранения измерений 12 растений, используя приведенный ниже код.
samp_data = [11, 11, 13, 10, 9, 14, 12, 11, 12, 10, 12, 11]
  • Выполните одновыборочный тест, используя метод ttest_1samp(), как показано в приведенном ниже коде.
ttest_1samp(a=samp_data, popmean=14)

Тест доверительного интервала Python Scipy T

Двустороннее значение p для статистики t-критерия составляет 3,2025, а для статистики t-критерия — 6,7393.

Для этого одновыборочного t-критерия существуют две гипотезы:

  • H0 (нулевая гипотеза): растение имеет среднюю высоту 14 дюймов( µ = 14).
  • H1 (Альтернативная гипотеза): средний рост не составляет 14 дюймов.(μ ≠14)

Здесь значение p больше 0,5, поэтому мы отвергаем нулевую гипотезу и принимаем альтернативную гипотезу.

Среднее значение

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

Формула доверительного интервала приведена ниже.

Доверительный интервал

Где параметры:

  • x̅: представляет выборочное среднее значение.
  • t: значение t, соответствующее уровню достоверности.
  • s: Стандартное отклонение выборки.
  • n: количество образцов.

Если у нас небольшая выборка, например менее 30, мы можем построить доверительный интервал для среднего значения совокупности, используя функцию t.interval() библиотеки Python scipy.stats.

Давайте разберемся на примере, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import stats
import numpy as np
  • Создайте образец данных, используя приведенный ниже код.
samp_data = [15, 15, 15, 15, 14, 17, 18, 21, 22, 24, 26, 29, 29, 30, 25]
  • Создайте доверительный интервал 99%, используя приведенный ниже код.
stats.t.interval(alpha=0.95, loc=np.mean(samp_data), df=len(samp_data)-1, scale=stats.sem(samp_data))

Среднее значение доверительного интервала Python Scipy

Истинное генеральное среднее имеет 95% доверительный интервал(17,764, 24,235).

Доля доверительного интервала

Python Scipy содержит метод BinomTestResult.proportion_ci() в модуле scipy.stats._result_classes, который определяет доверительный интервал предполагаемой пропорции.

Синтаксис:

BinomTestResult.proportion_ci(confidence_level=0.99, method='wilson')

Где параметры:

  • confidence_level (с плавающей запятой): уровень достоверности для вычисленного доверительного интервала предполагаемой доли. 0,95 — значение по умолчанию.
  • confidence_level: выбирает метод расчета доверительного интервала для оценки доли:
  1. «exact»: следует использовать точный подход Клоппера-Пирсона.
  2. «Вилсон»: подход Вильсона без коррекции непрерывности называется «Вилсоном».
  3. «wilsoncc’»: метод Уилсона включает коррекцию непрерывности.

Метод BinomTestResult.proportion_ci() возвращает ci (нижняя и верхняя границы доверительного интервала хранятся в нижних и верхних атрибутах объекта).

Биномиальное распределение

Биномиальное распределение — это распределение вероятностей, которое выражает вероятность того, что значение примет одно из двух независимых значений с учетом набора факторов или допущений. Здесь, в этом разделе, мы рассчитаем доверительный интервал, используя биномиальное распределение.

Модуль Python Scipy scipy.stats содержит метод binom.interval(), с помощью которого мы будем рассчитывать CI.

Давайте посмотрим на примере, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import stats
import numpy as np
  • Создайте образец данных, используя приведенный ниже код.
samp_data = [2,5,3,7,9,5,7,2,6,7]
  • Рассчитайте доверительный интервал, используя приведенный ниже код.
stats.binom.interval(alpha=0.99,
              n=len(samp_data)-1,
              loc=np.mean(samp_data), 
              p=stats.sem(samp_data))

Биномиальный доверительный интервал Python Scipy

Распределение T доверительного интервала

Когда стандартное отклонение генеральной совокупности неизвестно и данные взяты из нормально распределенной генеральной совокупности, t-распределение характеризует нормализованные расстояния между средними значениями выборки и средними значениями генеральной совокупности:

  • Другими словами, Т-распределение, также известное как Т-распределение Стьюдента, представляет собой группу распределений, которые напоминают кривую нормального распределения, но немного короче и толще.
  • Когда выборок мало, вместо нормального распределения используется t-распределение. T-распределение больше напоминает нормальное распределение, поскольку размер выборки увеличивается.
  • В действительности распределение почти идентично нормальному распределению для выборок размером более 20.

Ниже приведено изображение форм нормального и T-распределения.

Т-распределение

Метод linregress()

Модуль Python Scipy scipy.stats содержит метод linregress(), который используется для двух наборов измерений для выполнения линейной регрессии наименьших квадратов. Здесь мы рассчитаем линейную регрессию между двумя переменными x и y, затем найдем доверительный интервал по наклону и перехватим рассчитанную линейную регрессию.

Синтаксис:

scipy.stats.linregress(x, y=None, alternative='less')

Где параметры:

  • x,y(array_data): существует два набора измерений. Длина обоих массивов должна быть одинаковой. Если указан только x(и y=None), массив должен быть двумерным, причем длина одного измерения равна двум.
  • alternative: здесь определяется альтернативная гипотеза. Есть несколько альтернатив, таких как двусторонний, меньше и больше.

Метод linregress() возвращает наклон, перехват, rvalue, pvalue, stderr и intercept_err типа float.

Давайте разберемся на примере, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress, t
  • Создайте генератор случайных чисел и сгенерируйте данные x и y, используя приведенный ниже код.
rand_numgen = np.random.default_rng()
x_data =rand_numgen.random(15)
y_data = 1.5*x_data + rand_numgen.random(15)
  • Вычислите линейную регрессию, используя приведенный ниже код.
lin_res = linregress(x_data, y_data)
  • Распечатайте наклон и перехват, используя приведенный ниже код.
print("Slope",lin_res.slope)
print("Intercept",lin_res.intercept)
  • Постройте данные и подобранную линию на графике, используя приведенный ниже код.
plt.plot(x_data, y_data, 'o', label='original data')
plt.plot(x_data, lin_res.intercept + lin_res.slope*x_data, 'r', label='fitted line')
plt.legend()
plt.show()

Линейная регрессия доверительного интервала Python Scipy

Вычислите 95% доверительный интервал для наклона и точки пересечения, используя приведенный ниже код.

t_inv = lambda prob, degree_of_freedom: abs(t.ppf(prob/2, degree_of_freedom))

Разница доверительных интервалов

Допустим, у нас есть два набора данных из эксперимента с согласованными парами, которые не являются независимыми друг от друга, и мы хотим построить доверительный интервал для средней разницы между двумя выборками. Какова процедура расчета доверительного интервала? Предположим, мы выбрали уровень достоверности 0,05.

Импортируйте необходимые библиотеки, используя приведенный ниже код Python.

from scipy import stats
import numpy as np

Укажите уровень достоверности 95 %, который обозначается буквой альфа, используя приведенный ниже код.

alp = 0.05

Создайте два образца данных, используя приведенный ниже код.

samp_data1 = np.array([14, 17,  10, 19, 7, 20])
samp_data2 = np.array([ 3,  2, 10, 16,  10,  8])

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

diffsamp = samp_data1 - samp_data2                     
len_no_obs = len(samp_data1)

Кроме того, вычислите разницу среднего и дисперсии, критическое значение и радиус CI, используя приведенный ниже код.

diffmean = np.mean(diffsamp)                      
diffvar = np.var( diffsamp, ddof=1 )          
criticalvalue = stats.t.ppf(q = 1-alp/2, df = len_no_obs - 1)   
rad = criticalvalue*np.sqrt(diffvar)/np.sqrt(len_no_obs)

Теперь вычислите разницу доверительного интервала, используя приведенный ниже код.

print(diffmean - rad, diffmean + rad)

Разница доверительных интервалов Python Scipy

Пример

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

Давайте выполним следующие шаги, чтобы создать метод или функцию:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import stats
import numpy as np
  • Создайте функцию для вычисления доверительного интервала на основе заданной выборки данных, используя приведенный ниже код.
def m_conf_intval(samp_data, confid=0.95):
    data = 1.0 * np.array(samp_data)
    len_n = len(data)
    mean, std_err = np.mean(data), stats.sem(data)
    h = std_err * stats.t.ppf((1 + confid) / 2., len_n-1)
    return mean, mean-h, mean+h
  • Теперь предоставьте образец данных созданному выше методу, используя приведенный ниже код.
data = [2,4,6,3,8,9,4]

m_conf_intval(data)

Пример доверительного интервала Python Scipy

Посмотрите на выходные данные: диапазон доверительного интервала составляет от 2,729 до 7,556.

Добавить комментарий