MedStat.Pro
Версия 1.1.3
Verified build

Валидация статистических методов

MedStat.Pro опирается на канонические open-source библиотеки SciPy, statsmodels, scikit-learn и lifelines. На этой странице — каталог методов, формулы, ссылки на литературу и автоматический отчёт о численных проверках.

Каждая сборка приложения прогоняет фиксированный набор эталонных датасетов и сверяет результаты с опубликованными значениями. Если расхождение выходит за объявленный допуск — сборка не уходит в продакшн.

Соответствует принципам:ICH E9·FORCE11·NIST SED
Verified build
v.1.1.3

Эталонные расчёты пересчитаны на текущей сборке

Все проверочные расчёты совпадают с эталонами в пределах объявленных допусков.

28
Прошлииз 28
0
Не прошлииз 28
0
Пропущеныиз 28
Коммит54a6ab0Деплой23 июля 2026 г. в 18:43Бенчмарки09 июля 2026 г. в 10:07Среда:Python 3.14.0·SciPy 1.16.3·statsmodels 0.14.6·scikit-learn 1.8.0·lifelines 0.30.3

Методология

Три независимых уровня проверки: от ссылок на литературу до автоматического CI-прогона на каждой сборке.

1

Методическое описание

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

2

Численные бенчмарки

Фиксированные эталонные датасеты с опубликованными точными значениями. Для каждой проверки явно объявлен допуск ε.

3

Verified build

CI на каждой сборке прогоняет run_benchmarks.py и обновляет validation-report.json. При выходе любой метрики за допуск ε сборка не попадает в продакшн.

Библиотеки

Все статистические расчёты выполняются canonical-функциями из перечисленных библиотек. Минорные диапазоны версий зафиксированы в requirements.txt.

SciPy
>= 1.10

Базовые статистические тесты, распределения, p-values

Лицензия: BSD-3-Clause

Множественная регрессия, диагностика моделей, поправки на множественные сравнения, McNemar, Tukey HSD

Лицензия: BSD-3-Clause
scikit-learn
1.3.x – 1.7.x

ROC AUC, классификационные метрики, регрессионные оценки

Лицензия: BSD-3-Clause
lifelines
0.27.x – 0.29.x

Регрессия Кокса, оценка функции выживаемости, конкордантность

Лицензия: MIT
scikit-survival
0.22.x – 0.x

Дополнительные оценки функции выживания и log-rank сравнения

Лицензия: GPL-3.0
NumPy
>= 1.23

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

Лицензия: BSD-3-Clause

Подготовка датафреймов, агрегаты, удаление пропусков

Лицензия: BSD-3-Clause

Каталог методов

10 семейств статистических методов с привязкой к файлам серверной реализации в src/server/analytics/.

Описательная статистика

Базовый слой
2 методов

Меры центральной тенденции, рассеяния и формы распределения; доверительные интервалы для среднего и медианы.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Среднее и 95% ДИ

Среднее арифметическое и t-доверительный интервал для среднего по нормально распределённой выборке.

Формула
x̄ = (1/n)·Σxᵢ;   95% ДИ = x̄ ± t₀.₉₇₅,n−1 · s/√n

x̄ — среднее, s — стандартное отклонение, t — квантиль распределения Стьюдента.

Реализация
numpy.mean, scipy.stats.t
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Медиана и межквартильный размах

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

Формула
Me = x((n+1)/2);   IQR = Q₃ − Q₁
Реализация
numpy.percentile (метод linear, type 7)
Источник:Altman 1991

Тесты на нормальность

Pre-flight
3 методов

Проверка соответствия выборки нормальному распределению — основа для выбора параметрических или непараметрических процедур.

Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

Тест Шапиро–Уилка

Параметрический тест на нормальность; рекомендован для выборок n ≤ 50, корректно работает до n = 5000.

Формула
W = (Σ aᵢ·x₍ᵢ₎)² / Σ(xᵢ − x̄)²

x₍ᵢ₎ — упорядоченные значения, aᵢ — табулированные коэффициенты Шапиро.

Реализация
scipy.stats.shapiro
Источник:Shapiro–Wilk 1965
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Тест Колмогорова–Смирнова (Lilliefors)

Тест на согласие выборки с нормальным распределением; используется при n > 50.

Формула
D = supₓ |Fₙ(x) − F(x)|

Fₙ — эмпирическая, F — теоретическая функция распределения.

Реализация
scipy.stats.kstest, scipy.stats.norm.fit
Источник:Smirnov 1948·Lilliefors 1967
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Тест Д'Агостино–Пирсона

Омнибус-тест на нормальность по асимметрии и эксцессу; устойчив на больших выборках.

Формула
K² = Z₁² + Z₂²

Z₁ — стандартизированная асимметрия, Z₂ — стандартизированный эксцесс.

Реализация
scipy.stats.normaltest
Источник:D'Agostino & Pearson 1973

Сравнение групп

Группы
3 методов

Параметрические и непараметрические тесты для двух и более независимых групп с post-hoc сравнениями.

Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

t-тест Уэлча (две независимые группы)

Сравнение средних двух независимых групп без допущения о равенстве дисперсий; стандартный выбор для нормальных данных.

Формула
t = (x̄₁ − x̄₂) / √(s₁²/n₁ + s₂²/n₂)
Реализация
scipy.stats.ttest_ind(equal_var=False)
Источник:Welch 1947·Altman 1991
Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

Тест Манна–Уитни (U-критерий)

Непараметрическое сравнение двух независимых групп при нарушении нормальности.

Формула
U = R₁ − n₁(n₁+1)/2
Реализация
scipy.stats.mannwhitneyu
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Краскел–Уоллис + Tukey HSD

Сравнение трёх и более независимых групп с попарными post-hoc сравнениями.

Формула
H = 12 / (N(N+1)) · Σ(Rⱼ²/nⱼ) − 3(N+1)
Реализация
scipy.stats.kruskal, statsmodels.stats.multicomp.pairwise_tukeyhsd

Повторные измерения и динамика

Динамика
2 методов

Тесты для связанных выборок: динамика количественных и бинарных показателей в нескольких точках наблюдения.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Критерий Фридмана

Непараметрический тест для k связанных выборок при нарушении нормальности.

Формула
χ²_F = 12 / (N·k(k+1)) · ΣRⱼ² − 3N(k+1)
Реализация
scipy.stats.friedmanchisquare
Источник:Friedman 1937
Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

Тест Мак-Немара

Сравнение двух связанных бинарных измерений (до/после) с поправкой на непрерывность.

Формула
χ² = (|b − c| − 1)² / (b + c)

b, c — несовпадающие пары наблюдений в таблице 2×2.

Реализация
statsmodels.stats.contingency_tables.mcnemar
Источник:McNemar 1947·Agresti 2002

Корреляция

Связь
3 методов

Линейная и ранговая связь между парами переменных; частная (парциальная) корреляция с поправкой на ковариаты.

Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

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

Линейная связь двух количественных переменных, p-value по двустороннему t-распределению.

Формула
r = Σ(xᵢ−x̄)(yᵢ−ȳ) / √(Σ(xᵢ−x̄)² · Σ(yᵢ−ȳ)²)
Реализация
scipy.stats.pearsonr
Источник:Pearson 1895·Altman 1991
Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

Коэффициент корреляции Спирмена

Ранговая монотонная связь двух переменных; устойчив к нарушению нормальности и выбросам.

Формула
ρ = 1 − 6·Σdᵢ² / (n(n²−1))

dᵢ — разность рангов наблюдений.

Реализация
scipy.stats.spearmanr
Источник:Spearman 1904
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Частная (парциальная) корреляция

Связь двух переменных с поправкой на влияние одной или нескольких ковариат; residual-подход через OLS.

Формула
r_xy·z = (r_xy − r_xz·r_yz) / √((1−r_xz²)(1−r_yz²))

Для нескольких ковариат: регрессия X и Y на Z, корреляция остатков; df = n − 2 − k.

Реализация
correlation_analysis.compute_partial_correlation, statsmodels.OLS
Источник:Pearson 1895·Altman 1991

Регрессионные модели

Модели
3 методов

Линейная, множественная и логистическая регрессия с диагностикой допущений.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Простая линейная регрессия

OLS-оценка β₀, β₁; стандартные ошибки, t-статистики, R², 95% ДИ для коэффициентов.

Формула
ŷ = β₀ + β₁·x;   β̂ = (XᵀX)⁻¹Xᵀy
Реализация
scipy.stats.linregress
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Множественная линейная регрессия

OLS с диагностикой: VIF, тест Бройша–Пагана, статистика Дарбина–Уотсона, проверка остатков.

Формула
ŷ = β₀ + Σβⱼ·xⱼ;   VIFⱼ = 1 / (1 − Rⱼ²)
Реализация
statsmodels.OLS, statsmodels.stats.outliers_influence.variance_inflation_factor, het_breuschpagan, durbin_watson
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Логистическая регрессия

Бинарная классификация: оценка коэффициентов методом максимального правдоподобия, OR с 95% ДИ, диагностика.

Формула
logit(p) = β₀ + Σβⱼ·xⱼ;   p = 1 / (1 + e^(−η))
Реализация
statsmodels.Logit, sklearn.metrics.roc_auc_score
Источник:Agresti 2002

ROC-анализ

Диагностика
2 методов

Построение ROC-кривой, расчёт AUC, поиск оптимальной точки отсечения и сравнение AUC двух моделей по DeLong.

Verified
Совпадение с эталоном подтверждается автоматически на каждой сборке.

ROC AUC и оптимальная точка отсечения

Площадь под ROC-кривой, чувствительность/специфичность, индекс Юдена, 95% ДИ для AUC.

Формула
AUC = ∫₀¹ TPR(FPR⁻¹(t)) dt;   J = Sn + Sp − 1
Реализация
sklearn.metrics.roc_auc_score, sklearn.metrics.roc_curve
Источник:Hanley & McNeil 1982
Referenced
Реализация опирается на канонические библиотеки и оригинальные публикации метода.

Сравнение AUC методом DeLong

Непараметрическое сравнение AUC двух коррелированных ROC-кривых.

Формула
z = (AUC₁ − AUC₂) / √(Var(AUC₁) + Var(AUC₂) − 2·Cov(AUC₁, AUC₂))
Реализация
scipy.stats.norm + ковариация U-статистик по DeLong
Источник:DeLong 1988

Риск и эффект

Эпидемиология
1 метод

Относительный риск (RR), отношение шансов (OR), NNT, доверительные интервалы для пропорций.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

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
Источник:Agresti 2002·Altman 1991

Анализ выживаемости

Время до события
2 методов

Оценка функции выживаемости Каплана–Мейера, log-rank сравнение, регрессия Кокса.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Оценка Каплана–Мейера и log-rank

Непараметрическая оценка функции выживаемости с цензурированием, log-rank сравнение групп.

Формула
Ŝ(t) = ∏_{tᵢ ≤ t} (1 − dᵢ/nᵢ)
Реализация
lifelines.KaplanMeierFitter, scipy.stats logrank
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Регрессия Кокса (пропорциональные риски)

Полупараметрическая модель пропорциональных рисков с расчётом HR, 95% ДИ и concordance index.

Формула
h(t|x) = h₀(t)·exp(Σβⱼ·xⱼ)
Реализация
lifelines.CoxPHFitter
Источник:Cox 1972·Collett 2015

Согласованность методов измерения

Согласованность
2 методов

Оценка систематического смещения и пределов согласия между двумя или несколькими методами измерения.

Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Анализ Бланда–Альтмана

Сравнение двух методов измерения: систематическое смещение, пределы согласия, параметрический / непараметрический / регрессионный подход.

Формула
Bias = mean(m₁ − m₂);   LoA = Bias ± 1.96·SD

Для регрессионной методики LoA зависят от среднего значения (Bland & Altman, 1999).

Реализация
bland_altman._analyze_pair, bland_altman_plots.render_bland_altman
Benchmarked
Совпадение с опубликованным эталонным значением подтверждено в пределах объявленного допуска.

Сравнение нескольких методов

Батчевое сравнение тестовых методов с референсным: смещение, LoA, APE, подгруппы.

Формула
APEᵢ = 100·|testᵢ − ref| / |ref|
Реализация
multiple_methods_comparison.batch_multiple_methods_comparison, _compute_ape
Источник:Bland & Altman 1986

Численные бенчмарки

Сравнение результатов MedStat.Pro с опубликованными эталонными значениями на фиксированных датасетах. Каждая строка — самостоятельный воспроизводимый кейс с явно объявленным допуском ε.

МетодМетрика и датасетЭталонНаблюдаемое|Δ|εСтатус
Коэффициент корреляции Пирсона
anscombe-i-pearson-r
Pearson r
Anscombe Quartet I
Источник: Anscombe, 1973 (Am. Stat. 27:17-21)
Опубликованное значение r ≈ 0.816 для Anscombe I.
0.8164210.8164211.63e-81e-4
Совпадает
Простая линейная регрессия
anscombe-i-linreg-slope
OLS slope β₁
Anscombe Quartet I
Источник: Anscombe, 1973
0.50010.5000919.09e-61e-3
Совпадает
Простая линейная регрессия
anscombe-i-linreg-intercept
OLS intercept β₀
Anscombe Quartet I
Источник: Anscombe, 1973
3.00013.0000919.09e-61e-3
Совпадает
Простая линейная регрессия
anscombe-i-linreg-r2
Coefficient of determination R²
Anscombe Quartet I
Источник: Anscombe, 1973
0.66650.6665424.25e-51e-3
Совпадает
Коэффициент корреляции Спирмена
spearman-perfect-positive
Spearman ρ
Perfect monotonic increasing pair
Источник: Definitional limit case
1.00001.00000.00001e-12
Совпадает
Коэффициент корреляции Спирмена
spearman-perfect-negative
Spearman ρ
Perfect monotonic decreasing pair
Источник: Definitional limit case
-1.0000-1.00000.00001e-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.0079370.0079371.00e-101e-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.99380.9932195.81e-45e-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.1294834.1294832.10e-71e-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.00001.00000.00001e-12
Совпадает
Среднее и 95% ДИ
mean-ci-lower-altman
95% CI lower bound for mean
Literal 10-value clinical sample
Источник: Altman & Bland illustrative means (1996)
9.0391559.0391550.00001e-4
Совпадает
Медиана и межквартильный размах
median-medcalc
Median (MedCalc rank interpolation)
Sequential integers 1–9
Источник: MedCalc / Lentner (1982) percentile convention
5.00005.00000.00001e-12
Совпадает
Медиана и межквартильный размах
iqr-medcalc
IQR (MedCalc rank interpolation)
Sequential integers 1–9
Источник: MedCalc / Lentner (1982) percentile convention
4.50004.50000.00001e-12
Совпадает
Тест Колмогорова–Смирнова (Lilliefors)
ks-lilliefors-seeded
Lilliefors / KS D statistic
Seeded N(0,1) sample, n=50, seed=42
Источник: numpy.random.default_rng(42)
Повторяет ветку kolmogorov_smirnov_test.py (lilliefors → kstest fallback).
0.0669270.0669270.00001e-4
Совпадает
Тест Д'Агостино–Пирсона
dagostino-k2-seeded
D'Agostino–Pearson K²
Seeded N(0,1) sample, n=50, seed=42
Источник: numpy.random.default_rng(42)
0.7077940.7077940.00001e-3
Совпадает
Краскел–Уоллис + Tukey HSD
kruskal-three-group-h
Kruskal–Wallis H
Three ordered disjoint groups (n=5 each)
Источник: Kruskal & Wallis (1952) definitional layout
12.500012.50000.00001e-6
Совпадает
Критерий Фридмана
friedman-three-conditions
Friedman χ²
Three related blocks, k=3, n=5
Источник: Friedman (1937) textbook layout
9.00009.00000.00001e-6
Совпадает
Множественная линейная регрессия
multiple-ols-r2
Multiple OLS R²
5-point linear trend with noise
Источник: statsmodels OLS reference fixture
0.8583660.8583660.00001e-4
Совпадает
Логистическая регрессия
logistic-coef-x
Logit coefficient β₁
10-point binary outcome with balanced x
Источник: statsmodels Logit reference fixture
2.7725892.7725890.00001e-4
Совпадает
ROC AUC и оптимальная точка отсечения
roc-auc-hanley
ROC AUC
Hanley & McNeil 2×2 contingency layout
Источник: Hanley & McNeil (1982) worked example
0.75000.75000.00001e-12
Совпадает
RR, OR, NNT с 95% ДИ
risk-odds-ratio
Odds ratio
Classic 2×2 epidemiology table
Источник: Agresti (2002) illustrative OR
8.00008.00000.00001e-6
Совпадает
RR, OR, NNT с 95% ДИ
risk-relative-risk
Relative risk
Classic 2×2 epidemiology table
Источник: Agresti (2002) illustrative RR
3.3333333.3333330.00001e-6
Совпадает
Оценка Каплана–Мейера и log-rank
km-survival-at-5
Kaplan–Meier Ŝ(5)
6-subject censored survival sample
Источник: lifelines.KaplanMeierFitter reference fixture
0.50000.50000.00001e-6
Совпадает
Регрессия Кокса (пропорциональные риски)
cox-hazard-ratio
Cox hazard ratio exp(β)
6-subject single-covariate Cox sample
Источник: lifelines.CoxPHFitter reference fixture
1.1366611.1366610.00001e-4
Совпадает
Анализ Бланда–Альтмана
ba-parametric-bias
Bias (mean difference)
Paired method comparison (n=10)
Источник: Bland & Altman (1986) style peak-flow fixture
Параметрическая методика, ось Y — разности.
0.10000.10000.00001e-6
Совпадает
Анализ Бланда–Альтмана
ba-parametric-lower-loa
Lower limit of agreement
Paired method comparison (n=10)
Источник: bland_altman._analyze_pair reference fixture
-0.519806-0.5198060.00001e-4
Совпадает
Сравнение нескольких методов
mmc-median-ape
Median APE (%)
Test vs reference method pair (n=10)
Источник: multiple_methods_comparison._compute_ape fixture
Тестовый метод совпадает с референсным в большинстве пар.
0.00000.00000.00001e-12
Совпадает
Частная (парциальная) корреляция
partial-pearson-one-covariate
Partial Pearson r
X, Y with one covariate Z (n=10)
Источник: Classical partial correlation formula cross-check
Residual-подход совпадает с r_xy.z для одной ковариаты.
0.5625440.5625440.00001e-6
Совпадает

Воспроизводимость

Версии MedStat.Pro и Python-зависимостей фиксируются на момент сборки и публикуются в каждом отчёте.

Версия приложения
v.1.1.3

SemVer (MAJOR.MINOR.PATCH). Берётся из сборки (package.json или NEXT_PUBLIC_APP_VERSION).

Коммит деплоя
54a6ab0
Время деплоя (UTC)
23 июля 2026 г. в 18:43
Воспроизводимость

Каждый отчёт фиксирует версии 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.