ttest_1samp#
- scipy.stats.ttest_1samp(a, popmean, ось=0, nan_policy='propagate', альтернатива='two-sided', *, keepdims=False)[источник]#
Вычислить T-тест для среднего ОДНОЙ группы значений.
Это тест для нулевой гипотезы о том, что математическое ожидание (среднее) выборки независимых наблюдений a равно заданному среднему значению генеральной совокупности, popmean.
- Параметры:
- aarray_like
Выборочные наблюдения.
- popmeanfloat или array_like
Ожидаемое значение в нулевой гипотезе. Если array_like, то его длина вдоль ось должно равняться 1, и в остальных случаях оно должно быть совместимо с a.
- осьint или None, по умолчанию: 0
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- альтернатива{‘two-sided’, ‘less’, ‘greater’}, необязательный
Определяет альтернативную гипотезу. Доступны следующие варианты (по умолчанию 'two-sided'):
‘two-sided’: среднее базового распределения выборки отличается от заданного среднего генеральной совокупности (popmean)
‘less’: среднее базового распределения выборки меньше заданного среднего генеральной совокупности (popmean)
‘greater’: среднее базового распределения выборки больше заданного среднего генеральной совокупности (popmean)
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- результат
TtestResult Объект со следующими атрибутами:
- статистикаfloat или массив
t-статистика.
- p-значениеfloat или массив
P-значение, связанное с заданной альтернативой.
- dffloat или массив
Количество степеней свободы, используемое при вычислении t-статистики; это на единицу меньше размера выборки (
a.shape[axis]).Добавлено в версии 1.10.0.
Объект также имеет следующий метод:
- confidence_interval(confidence_level=0.95)
Вычисляет доверительный интервал вокруг среднего значения генеральной совокупности для заданного уровня доверия. Доверительный интервал возвращается в
namedtupleс полями низкий и высокий.Добавлено в версии 1.10.0.
- результат
Примечания
Статистика вычисляется как
(np.mean(a) - popmean)/se, гдеseявляется стандартной ошибкой. Следовательно, статистика будет положительной, когда выборочное среднее больше среднего по совокупности, и отрицательной, когда выборочное среднее меньше среднего по совокупности.Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.ttest_1sampимеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окруженияSCIPY_ARRAY_API=1и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).Библиотека
CPU
GPU
NumPy
✅
н/д
CuPy
н/д
✅
PyTorch
✅
⛔
JAX
⚠️ нет JIT
⚠️ нет JIT
Dask
⚠️ вычисляет граф
н/д
См. Поддержка стандарта array API для получения дополнительной информации.
Примеры
Предположим, мы хотим проверить нулевую гипотезу о том, что среднее значение популяции равно 0.5. Мы выбираем уровень доверия 99%; то есть мы отклоним нулевую гипотезу в пользу альтернативной, если p-значение меньше 0.01.
При тестировании случайных величин из стандартного равномерного распределения, которое имеет среднее значение 0.5, мы ожидаем, что данные будут соответствовать нулевой гипотезе в большинстве случаев.
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> rvs = stats.uniform.rvs(size=50, random_state=rng) >>> stats.ttest_1samp(rvs, popmean=0.5) TtestResult(statistic=2.456308468440, pvalue=0.017628209047638, df=49)
Как и ожидалось, p-значение 0.017 не ниже нашего порога 0.01, поэтому мы не можем отвергнуть нулевую гипотезу.
При тестировании данных из стандартного нормальный распределения, которое имеет среднее значение 0, мы ожидаем, что нулевая гипотеза будет отвергнута.
>>> rvs = stats.norm.rvs(size=50, random_state=rng) >>> stats.ttest_1samp(rvs, popmean=0.5) TtestResult(statistic=-7.433605518875, pvalue=1.416760157221e-09, df=49)
Действительно, p-значение ниже нашего порога 0.01, поэтому мы отвергаем нулевую гипотезу в пользу альтернативы «двусторонняя» по умолчанию: среднее генеральной совокупности не равно 0.5.
Однако предположим, что мы хотим проверить нулевую гипотезу против односторонней альтернативы, что среднее значение популяции больше чем 0.5. Поскольку среднее стандартного нормального распределения меньше 0.5, мы не ожидаем, что нулевая гипотеза будет отвергнута.
>>> stats.ttest_1samp(rvs, popmean=0.5, alternative='greater') TtestResult(statistic=-7.433605518875, pvalue=0.99999999929, df=49)
Неудивительно, что с p-значением выше нашего порога мы не отвергли бы нулевую гипотезу.
Обратите внимание, что при работе с доверительным уровнем 99% истинная нулевая гипотеза будет отклоняться примерно в 1% случаев.
>>> rvs = stats.uniform.rvs(size=(100, 50), random_state=rng) >>> res = stats.ttest_1samp(rvs, popmean=0.5, axis=1) >>> np.sum(res.pvalue < 0.01) 1
Действительно, хотя все 100 выборок выше были взяты из стандартного равномерного распределения, которое делает имеют среднее значение популяции 0.5, мы ошибочно отвергли бы нулевую гипотезу для одного из них.
ttest_1sampтакже может вычислять доверительный интервал вокруг среднего значения генеральной совокупности.>>> rvs = stats.norm.rvs(size=50, random_state=rng) >>> res = stats.ttest_1samp(rvs, popmean=0) >>> ci = res.confidence_interval(confidence_level=0.95) >>> ci ConfidenceInterval(low=-0.3193887540880017, high=0.2898583388980972)
Границы 95% доверительного интервала являются минимальным и максимальным значениями параметра popmean для которого p-значение теста было бы 0.05.
>>> res = stats.ttest_1samp(rvs, popmean=ci.low) >>> np.testing.assert_allclose(res.pvalue, 0.05) >>> res = stats.ttest_1samp(rvs, popmean=ci.high) >>> np.testing.assert_allclose(res.pvalue, 0.05)
При определенных предположениях о популяции, из которой взята выборка, доверительный интервал с уровнем доверия 95% ожидается, что будет содержать истинное среднее значение популяции в 95% повторений выборки.
>>> rvs = stats.norm.rvs(size=(50, 1000), loc=1, random_state=rng) >>> res = stats.ttest_1samp(rvs, popmean=0) >>> ci = res.confidence_interval() >>> contains_pop_mean = (ci.low < 1) & (ci.high > 1) >>> contains_pop_mean.sum() 953