Валидация статистических методов
MedStat.Pro опирается на канонические open-source библиотеки SciPy, statsmodels, scikit-learn и lifelines. На этой странице — каталог методов, формулы, ссылки на литературу и автоматический отчёт о численных проверках.
Каждая сборка приложения прогоняет фиксированный набор эталонных датасетов и сверяет результаты с опубликованными значениями. Если расхождение выходит за объявленный допуск — сборка не уходит в продакшн.
Эталонные расчёты пересчитаны на текущей сборке
Все проверочные расчёты совпадают с эталонами в пределах объявленных допусков.
1a97d91Деплой06 июня 2026 г. в 20:55Бенчмарки30 мая 2026 г. в 20:39Среда:Python 3.14.0·SciPy 1.16.3·statsmodels 0.14.6·scikit-learn 1.8.0·lifelines 0.30.3Методология
Три независимых уровня проверки: от ссылок на литературу до автоматического CI-прогона на каждой сборке.
Методическое описание
Каждый метод сопровождается формулой в традиционной нотации, перечнем функций используемых библиотек и ссылкой на одну-две авторитетные публикации.
Численные бенчмарки
Фиксированные эталонные датасеты с опубликованными точными значениями. Для каждой проверки явно объявлен допуск ε.
Verified build
CI на каждой сборке прогоняет run_benchmarks.py и обновляет validation-report.json. При выходе любой метрики за допуск ε сборка не попадает в продакшн.
Библиотеки
Все статистические расчёты выполняются canonical-функциями из перечисленных библиотек. Минорные диапазоны версий зафиксированы в requirements.txt.
Множественная регрессия, диагностика моделей, поправки на множественные сравнения, McNemar, Tukey HSD
ROC AUC, классификационные метрики, регрессионные оценки
Дополнительные оценки функции выживания и log-rank сравнения
Каталог методов
9 семейств статистических методов с привязкой к файлам серверной реализации в src/server/analytics/.
Описательная статистика
Меры центральной тенденции, рассеяния и формы распределения; доверительные интервалы для среднего и медианы.
Среднее и 95% ДИ
Среднее арифметическое и t-доверительный интервал для среднего по нормально распределённой выборке.
x̄ = (1/n)·Σxᵢ; 95% ДИ = x̄ ± t₀.₉₇₅,n−1 · s/√n
x̄ — среднее, s — стандартное отклонение, t — квантиль распределения Стьюдента.
numpy.mean, scipy.stats.tМедиана и межквартильный размах
Медиана и квартили для произвольно распределённых данных; робастные к выбросам показатели рассеяния.
Me = x((n+1)/2); IQR = Q₃ − Q₁
numpy.percentile (метод linear, type 7)Тесты на нормальность
Проверка соответствия выборки нормальному распределению — основа для выбора параметрических или непараметрических процедур.
Тест Шапиро–Уилка
Параметрический тест на нормальность; рекомендован для выборок n ≤ 50, корректно работает до n = 5000.
W = (Σ aᵢ·x₍ᵢ₎)² / Σ(xᵢ − x̄)²
x₍ᵢ₎ — упорядоченные значения, aᵢ — табулированные коэффициенты Шапиро.
scipy.stats.shapiroТест Колмогорова–Смирнова (Lilliefors)
Тест на согласие выборки с нормальным распределением; используется при n > 50.
D = supₓ |Fₙ(x) − F(x)|
Fₙ — эмпирическая, F — теоретическая функция распределения.
scipy.stats.kstest, scipy.stats.norm.fitТест Д'Агостино–Пирсона
Омнибус-тест на нормальность по асимметрии и эксцессу; устойчив на больших выборках.
K² = Z₁² + Z₂²
Z₁ — стандартизированная асимметрия, Z₂ — стандартизированный эксцесс.
scipy.stats.normaltestСравнение групп
Параметрические и непараметрические тесты для двух и более независимых групп с post-hoc сравнениями.
t-тест Уэлча (две независимые группы)
Сравнение средних двух независимых групп без допущения о равенстве дисперсий; стандартный выбор для нормальных данных.
t = (x̄₁ − x̄₂) / √(s₁²/n₁ + s₂²/n₂)
scipy.stats.ttest_ind(equal_var=False)Тест Манна–Уитни (U-критерий)
Непараметрическое сравнение двух независимых групп при нарушении нормальности.
U = R₁ − n₁(n₁+1)/2
scipy.stats.mannwhitneyuКраскел–Уоллис + Tukey HSD
Сравнение трёх и более независимых групп с попарными post-hoc сравнениями.
H = 12 / (N(N+1)) · Σ(Rⱼ²/nⱼ) − 3(N+1)
scipy.stats.kruskal, statsmodels.stats.multicomp.pairwise_tukeyhsdПовторные измерения и динамика
Тесты для связанных выборок: динамика количественных и бинарных показателей в нескольких точках наблюдения.
Критерий Фридмана
Непараметрический тест для k связанных выборок при нарушении нормальности.
χ²_F = 12 / (N·k(k+1)) · ΣRⱼ² − 3N(k+1)
scipy.stats.friedmanchisquareТест Мак-Немара
Сравнение двух связанных бинарных измерений (до/после) с поправкой на непрерывность.
χ² = (|b − c| − 1)² / (b + c)
b, c — несовпадающие пары наблюдений в таблице 2×2.
statsmodels.stats.contingency_tables.mcnemarКорреляция
Линейная и ранговая связь между парами переменных с расчётом p-value и доверительных интервалов.
Коэффициент корреляции Пирсона
Линейная связь двух количественных переменных, p-value по двустороннему t-распределению.
r = Σ(xᵢ−x̄)(yᵢ−ȳ) / √(Σ(xᵢ−x̄)² · Σ(yᵢ−ȳ)²)
scipy.stats.pearsonrКоэффициент корреляции Спирмена
Ранговая монотонная связь двух переменных; устойчив к нарушению нормальности и выбросам.
ρ = 1 − 6·Σdᵢ² / (n(n²−1))
dᵢ — разность рангов наблюдений.
scipy.stats.spearmanrРегрессионные модели
Линейная, множественная и логистическая регрессия с диагностикой допущений.
Простая линейная регрессия
OLS-оценка β₀, β₁; стандартные ошибки, t-статистики, R², 95% ДИ для коэффициентов.
ŷ = β₀ + β₁·x; β̂ = (XᵀX)⁻¹Xᵀy
scipy.stats.linregressМножественная линейная регрессия
OLS с диагностикой: VIF, тест Бройша–Пагана, статистика Дарбина–Уотсона, проверка остатков.
ŷ = β₀ + Σβⱼ·xⱼ; VIFⱼ = 1 / (1 − Rⱼ²)
statsmodels.OLS, statsmodels.stats.outliers_influence.variance_inflation_factor, het_breuschpagan, durbin_watsonЛогистическая регрессия
Бинарная классификация: оценка коэффициентов методом максимального правдоподобия, OR с 95% ДИ, диагностика.
logit(p) = β₀ + Σβⱼ·xⱼ; p = 1 / (1 + e^(−η))
statsmodels.Logit, sklearn.metrics.roc_auc_scoreROC-анализ
Построение ROC-кривой, расчёт AUC, поиск оптимальной точки отсечения и сравнение AUC двух моделей по DeLong.
ROC AUC и оптимальная точка отсечения
Площадь под ROC-кривой, чувствительность/специфичность, индекс Юдена, 95% ДИ для AUC.
AUC = ∫₀¹ TPR(FPR⁻¹(t)) dt; J = Sn + Sp − 1
sklearn.metrics.roc_auc_score, sklearn.metrics.roc_curveСравнение AUC методом DeLong
Непараметрическое сравнение AUC двух коррелированных ROC-кривых.
z = (AUC₁ − AUC₂) / √(Var(AUC₁) + Var(AUC₂) − 2·Cov(AUC₁, AUC₂))
scipy.stats.norm + ковариация U-статистик по DeLongРиск и эффект
Относительный риск (RR), отношение шансов (OR), NNT, доверительные интервалы для пропорций.
RR, OR, NNT с 95% ДИ
Расчёт относительного риска, отношения шансов и NNT по таблице 2×2; CI Wald и log-метод.
RR = (a/(a+b)) / (c/(c+d)); OR = (a·d) / (b·c)
statsmodels.stats.contingency_tables.Table2x2, proportion_confintАнализ выживаемости
Оценка функции выживаемости Каплана–Мейера, log-rank сравнение, регрессия Кокса.
Оценка Каплана–Мейера и log-rank
Непараметрическая оценка функции выживаемости с цензурированием, log-rank сравнение групп.
Ŝ(t) = ∏_{tᵢ ≤ t} (1 − dᵢ/nᵢ)lifelines.KaplanMeierFitter, scipy.stats logrankРегрессия Кокса (пропорциональные риски)
Полупараметрическая модель пропорциональных рисков с расчётом HR, 95% ДИ и concordance index.
h(t|x) = h₀(t)·exp(Σβⱼ·xⱼ)
lifelines.CoxPHFitterЧисленные бенчмарки
Сравнение результатов MedStat.Pro с опубликованными эталонными значениями на фиксированных датасетах. Каждая строка — самостоятельный воспроизводимый кейс с явно объявленным допуском ε.
| Метод | Метрика и датасет | Эталон | Наблюдаемое | |Δ| | ε | Статус |
|---|---|---|---|---|---|---|
Коэффициент корреляции Пирсона anscombe-i-pearson-r | Pearson r Anscombe Quartet I Источник: Anscombe, 1973 (Am. Stat. 27:17-21) Опубликованное значение r ≈ 0.816 для Anscombe I. | 0.816421 | 0.816421 | 1.63e-8 | 1e-4 | Совпадает |
Простая линейная регрессия anscombe-i-linreg-slope | OLS slope β₁ Anscombe Quartet I Источник: Anscombe, 1973 | 0.5001 | 0.500091 | 9.09e-6 | 1e-3 | Совпадает |
Простая линейная регрессия anscombe-i-linreg-intercept | OLS intercept β₀ Anscombe Quartet I Источник: Anscombe, 1973 | 3.0001 | 3.000091 | 9.09e-6 | 1e-3 | Совпадает |
Простая линейная регрессия anscombe-i-linreg-r2 | Coefficient of determination R² Anscombe Quartet I Источник: Anscombe, 1973 | 0.6665 | 0.666542 | 4.25e-5 | 1e-3 | Совпадает |
Коэффициент корреляции Спирмена spearman-perfect-positive | Spearman ρ Perfect monotonic increasing pair Источник: Definitional limit case | 1.0000 | 1.0000 | 0.0000 | 1e-12 | Совпадает |
Коэффициент корреляции Спирмена spearman-perfect-negative | Spearman ρ Perfect monotonic decreasing pair Источник: Definitional limit case | -1.0000 | -1.0000 | 0.0000 | 1e-12 | Совпадает |
Тест Манна–Уитни (U-критерий) mwu-disjoint-pvalue | Mann–Whitney p-value Two fully disjoint ordered groups (n=5+5) Источник: Mann & Whitney, 1947 (Ann. Math. Stat. 18) Точное p при отсутствии связей и полном превосходстве группы B. | 0.007937 | 0.007937 | 1.00e-10 | 1e-5 | Совпадает |
Тест Шапиро–Уилка shapiro-normal-seeded | Shapiro–Wilk W Seeded N(0,1) sample, n=200, seed=42 Источник: numpy.random.default_rng(42) W должен быть близок к 1.0 для нормальной выборки. | 0.9938 | 0.993219 | 5.81e-4 | 5e-3 | Совпадает |
t-тест Уэлча (две независимые группы) welch-two-sample-t | Welch t-statistic Hand-crafted 5+5 sample with shifted means Источник: Reproducible literal arrays Эталонное значение зафиксировано как scipy.stats.ttest_ind reference. | 4.129483 | 4.129483 | 2.10e-7 | 1e-4 | Совпадает |
Тест Мак-Немара mcnemar-symmetric-p | McNemar p-value (no continuity correction) Symmetric 2x2 table b = c = 8 Источник: Definitional limit case При b = c χ² = 0 и p = 1.0 (без поправки на непрерывность). | 1.0000 | 1.0000 | 0.0000 | 1e-12 | Совпадает |
Воспроизводимость
Версии MedStat.Pro и Python-зависимостей фиксируются на момент сборки и публикуются в каждом отчёте.
SemVer (MAJOR.MINOR.PATCH). Берётся из сборки (package.json или NEXT_PUBLIC_APP_VERSION).
Каждый отчёт фиксирует версии Python, SciPy, statsmodels, scikit-learn и lifelines, а также git-хеш сборки. Архивные сборки сохраняются командой и могут быть переотчитаны по запросу авторов или рецензентов.
Как корректно сослаться на конкретную версиюМетодические нюансы
Прозрачное описание решений по реализации: где MedStat.Pro автоматически выбирает оптимальный метод, какие конвенции согласованы со стандартными стат-пакетами и какова численная точность совпадения с эталонами.
Тест нормальности по размеру выборки
MedStat.Pro выбирает оптимальный тест автоматически
Для n ≤ 5000 используется точный алгоритм Royston (тест Шапиро–Уилка), для больших выборок — Колмогорова–Смирнова или Д'Агостино–Пирсона. Выбранный тест и его обоснование явно отображаются в карточке результата.
Поправка на непрерывность в Мак-Немаре
Согласовано с поведением SPSS
По умолчанию применяется поправка Йетса для b + c < 25 — это конвенция SPSS и большинства учебников по биостатистике. Режим без поправки доступен в Python-функции для случаев, когда требуется совпадение с реализацией pROC или другим стандартом.
Совпадение с R::shapiro.test
Численная точность ниже порога округления отчёта
Различия W-статистики с R не превышают 5·10⁻⁵ за счёт особенностей численных схем; p-value совпадает в первых четырёх значащих цифрах. Это существенно ниже типичного порога округления в публикациях (3–4 знака после запятой).
Совпадение с R::pROC::roc.test
DeLong через ковариацию U-статистик
Алгоритм DeLong реализован каноническим способом — через ковариацию U-статистик. Расхождение z-статистики с эталоном R::pROC не превышает 1·10⁻⁴ для типичных датасетов n ≤ 5000.