Расчет p-value и подгонка данных под теорию в Python
Быстрый ответ
Для подгонки эмпирического распределения под теоретическое с использованием библиотеки Scipy вам потребуется выполнить следующие шаги:
- Импортировать модуль
stats
:from scipy import stats
. - Выбрать модель теоретического распределения, например, нормальное:
stats.norm
. - Подобрать параметры распределения для ваших данных: используйте
params = stats.norm.fit(data)
.
Пример кода на Python:
from scipy import stats
import numpy as np
# Используемые эмпирические данные
data = np.array([...])
# Подгонка модели и получение параметров распределения
params = stats.norm.fit(data)
print(f"Среднее: {params[0]}, Стандартное отклонение: {params[1]}")
Для проверки точности аппроксимации используйте статистические тесты или визуализацию. Убедитесь, что выбранная вами модель точно описывает ваши данные.
Исследование всех доступных распределений
Рассмотрим процесс анализа всех потенциально подходящих распределений, доступных в Scipy:
from scipy import stats
import numpy as np
import warnings
# Рассматриваемые эмпирические данные
data = np.array([...])
sse = {} # Словарь для хранения сумм квадратичных ошибок
for dist_name in dir(stats):
if isinstance(getattr(stats, dist_name), stats.rv_continuous):
distribution = getattr(stats, dist_name)
with warnings.catch_warnings():
warnings.filterwarnings('ignore')
# Подгонка распределения и расчёт суммы квадратных ошибок
params = distribution.fit(data)
fitted_pdf = distribution.pdf(np.sort(data), *params[:-2], loc=params[-2], scale=params[-1])
sse[dist_name] = np.sum(np.power(data – fitted_pdf, 2.0))
# Выбор распределения, наилучшим образом описывающего данные
best_fit = min(sse, key=sse.get)
Исправление данных
Чтобы улучшить визуальное представление аппроксимации, особенно при работе с целочисленными данными, используйте метод сглаживания:
from scipy.ndimage.filters import gaussian_filter1d
# fitted_pdf – плотность вероятности подогнанного распределения
smooth_pdf = gaussian_filter1d(fitted_pdf, sigma=2.0) # Мы получили сглаженную кривую!
Приглаживание поможет вам получить более ровные и эстетически приятные аппроксимации, которые будут более точно отражать распределение ваших данных.
Визуализация
Для сравнения различных теоретических распределений используйте визуальный анализ, аналогично подбору собственного образа (одежды):
scipy.stats.fit(data) # Это ваш персональный стилист по работе с данными!
Особенности работы с нестандартными данными
В некоторых случаях данные не следуют стандартным распределениям. В этих ситуациях:
Выбор наиболее подходящих моделей
Для выбора между несколькими моделями вы можете использовать критерии AIC, BIC или логарифм правдоподобия:
aic = 2 * num_params – 2 * log_likelihood # Чем меньше значение AIC, тем лучше
bic = log(n) * num_params – 2 * log_likelihood # Меньшее значение BIC также предпочтительно
Прогноз на будущее
С помощью подогнанной модели вы можете оценить вероятность появления новых данных:
p_value = distribution.sf(new_data_point, *params) # Здесь вычисляется вероятность появления новой точки данных
Используйте этот подход для обнаружения аномалий или для статистического анализа.
Полезные функции �scipy.stats
При анализе дискретных распределений полезно знать о следующих функциях:
bincount
: Отлично подходит для обработки целочисленных данных.cumsum
: Полезна для вычисления накопительной суммы.
Также для получения дополнительных знаний полезно обратиться к статьям о функциях хвостового распределения, таким как ccdf
, на ресурсах вроде Wikipedia.
Полезные материалы
- Статистические функции (scipy.stats) — Руководство SciPy v1.12.0 — основной ресурс по статистическому моделированию в Scipy.
- numpy – Подгонка эмпирического распределения под теоретические с использованием Scipy (Python)? – Stack Overflow — обсуждение вопросов подгонки распределений на сайте Stack Overflow.
- Независимый t-тест на Python | Scientifically Sound — руководство по проведению статистических t-тестов в Python.
- scipy.stats.kstest — Руководство SciPy v1.12.0 — подробное описание теста Колмогорова-Смирнова для сравнения распределений.
- Сравнение распределений с помощью теста хи-квадрат на соответствие — обзор для любителей статистики и методов основанных на "хи-квадрате".
- 1.3.6.2. Связанные распределения — необходимы материалы от Национального института стандартов и технологий по распределениям и методу моментов.