Все материалы
Продуктовая аналитикаматериалсредний

Статьи Гржибовского: маршрут по медицинской статистике

Как читать статистические практикумы Гржибовского и соавторов в «Экологии человека»: проверенные публикации, ограничения и собственные расчёты Python.

КейсПрактика24 сентября 2026 г.11 мин

Вы ищете «Гржибовский статистика» и получаете статьи разных лет, инструкции для SPSS и Stata, отдельные PDF и чужие списки литературы. Из этого трудно собрать последовательное обучение. Ниже — маршрут по трём проверенным практикумам А. М. Гржибовского и соавторов в журнале «Экология человека». Мы отделяем библиографию от собственных упражнений и показываем, что нужно уточнить при переносе старого программного примера в Python.

Короткий ответ: с чего начать

  • Начните с устройства данных и описательной статистики, затем различите независимые группы и связанные измерения.
  • Читайте публикацию по её полному названию, году и составу авторов. Это несколько серий и совместных работ, а не одна книга одного автора.
  • Используйте инструкции как повод проверить предпосылки и воспроизвести расчёт. Выбор метода нельзя свести к значению p в проверке нормальности.

Какую часть публикаций рассматриваем

В обзоре три практикума 2014 года: описательная статистика и нормальность; парные непараметрические сравнения; критерий Краскела — Уоллиса для нескольких независимых групп. Полные тексты доступны на сайте журнала. Это ограниченный учебный маршрут, а не полный перечень всех работ автора по биостатистике.

Историческая точка входа — статья А. М. Гржибовского «Типы данных, проверка распределения и описательная статистика», «Экология человека», 2008, № 1. Её библиографическая запись подтверждается списком литературы практикума 2014 года. Полный текст выпуска 2008 года через использованные источники стабильно открыть не удалось, поэтому его подробный разбор здесь не заявлен.

Первая работа нашего маршрута — А. В. Субботина и А. М. Гржибовский, «Описательная статистика и проверка нормальности распределения количественных данных», 2014, том 21, № 2, DOI 10.17816/humeco17267. В ней статистические понятия соединены с работой в Stata. Для читателя это мост между описанием переменной и получением конкретного вывода программы.

Вторая — О. А. Харькова и А. М. Гржибовский, «Сравнение двух парных выборок с помощью пакета статистических программ STATA: непараметрические критерии», 2014, том 21, № 12, DOI 10.17816/humeco17180. Третья — Т. Н. Унгуряну и А. М. Гржибовский, работа о сравнении трёх и более независимых групп критерием Краскела — Уоллиса в Stata, 2014, том 21, № 6, DOI 10.17816/humeco17232.

Все три текста русскоязычные. Английские заголовки на сайте журнала — метаданные этих публикаций, а не указание на отдельное переводное издание. Для ссылки надёжнее DOI и номер выпуска: дата технического поступления записи на сайт может быть позднее года самой статьи.

Как устроить чтение серии

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

Нужны школьная арифметика, понимание среднего, медианы и доли, затем — рангов и нулевой гипотезы. Знание Stata полезно для повторения исходных инструкций, но не обязательно для нашего практикума. Все приведённые здесь наборы созданы заново; они не являются переписанными таблицами публикаций.

В каждом упражнении сохранены данные, направление сравнения и выбранный режим расчёта. Это позволяет обсуждать расхождение между программами предметно: точный или асимптотический тест, обработка совпадений и нулей, поправка на несколько сравнений. Один лишь вывод «у меня другое p» редко помогает найти причину.

Наш маршрут чтения: выбирайте по структуре данных
ЗадачаЧто проверитьПрактикум
Описание показателяЕдиницы, пропуски, хвост, способ расчёта квартилейСубботина и Гржибовский, 2014, № 2
Два измерения одних участниковКлюч пары, разности, нули и совпаденияХарькова и Гржибовский, 2014, № 12
Несколько независимых группНезависимость, формы распределений, план попарных проверокУнгуряну и Гржибовский, 2014, № 6

Шаг 1. Описать данные до проверки нормальности

Возьмём десять условных времён ожидания: от 9 до 18 минут и одно значение 42. Полный ряд приведён в коде. Среднее равно 16, медиана — 13,5, границы квартилей при линейной интерполяции — 11,25 и 15,75. Уже эти числа показывают, что разные способы описания центра дают разные ответы.

Критерий Шапиро — Уилка возвращает W = 0,647624 и p ≈ 0,000205. Это свидетельство против нормальной модели для таких наблюдений при условиях применения теста. Оно не указывает причину длинного ожидания, не объявляет запись ошибочной и не выбирает за вас показатель, важный для процесса обслуживания.

Python: описание и Шапиро — Уилк

Каждый пример можно запускать отдельно: все входные значения заданы внутри блока, внешние файлы не нужны. Для расчётов этой статьи установите пакеты командой python -m pip install numpy scipy statsmodels. Код проверен с Python 3.12; точные версии библиотек и результаты сохранены в отчёте подготовки материала. При изменении данных заново проверьте допущения, а не только успешное выполнение команды.

У проверки нормальности есть два ограничения как у автоматического переключателя методов. На маленькой выборке она может не обнаружить содержательное отклонение; на большой — обнаружить несущественную для выбранной оценки деталь. Поэтому правило «p больше 0,05 — данные нормальные» неверно. Неотклонение гипотезы не доказывает её истинность.

Кроме того, разные процедуры относятся к разным распределениям. Для парного t-сравнения интересуют индивидуальные разности, для линейной модели — поведение ошибок при заданных предикторах. Проверка одного объединённого столбца из нескольких групп может исследовать смесь, которая не соответствует предпосылке выбранного анализа.

В продукте длинное ожидание может быть настоящим инцидентом поддержки. Переход к ранговому методу не устраняет бизнес-проблему и не отвечает на вопрос о суммарной нагрузке. Сначала выясните, нужен ли средний расход времени, типичный опыт или доля нарушений целевого срока. Затем выберите оценку и способ описать её неопределённость.

pythonОписание данных
import numpy as np
from scipy.stats import shapiro
# Синтетические минуты ожидания; выбор правила квартилей указан явно.
x = np.array([9., 10., 11., 12., 13., 14., 15., 16., 18., 42.])
w, p = shapiro(x)
print("n", len(x), "mean", x.mean(), "median", np.median(x))
print("q1_q3", np.quantile(x, [.25, .75], method="linear"))
print("shapiro_W", round(w, 6), "p", round(p, 6))

Шаг 2. Сохранить пары и различить два вопроса

Пусть один показатель измерили дважды у восьми независимых условных участников. Разности «после минус до» равны −1, −2, −3, −4, −5, −6, −7 и 8. У семи наблюдается снижение, у одного — повышение. Медиана индивидуальных изменений равна −3,5.

Критерий знаков использует направление изменения. В нашем наборе это семь отрицательных и одна положительная разность; двустороннее точное p-value равно 0,0703125. Критерий Вилкоксона учитывает ещё и ранги абсолютных разностей. Единственное положительное изменение здесь самое большое по модулю, поэтому его вклад заметен: W = 8, p = 0,1953125.

Собственные парные изменения: методы используют разную информацию
МетодЧто используетсяДвустороннее p
Критерий знаковЧисло положительных и отрицательных изменений0,0703125
ВилкоксонЗнаки и ранги абсолютных изменений0,1953125

Python: Вилкоксон и критерий знаков

Мы не запускаем два теста, чтобы выбрать более удобное p-value. Сравнение показывает различие их устройства. Для интерпретации Вилкоксона как проверки центрального сдвига нужна подходящая симметрия распределения разностей; независимыми должны быть пары между участниками. Непараметрический метод не означает отсутствие предпосылок.

У критерия знаков меньше информации о размере изменений, зато он не требует ранжировать их величины. При отсутствии нулей нулевая вероятность положительной разности в рассматриваемой постановке равна половине. Если есть нулевые изменения, нужно заранее описать, как они учитываются. Это особенно заметно при грубой шкале и округлении.

В коде выбран exact, поскольку в этом специально подготовленном наборе нет нулей и совпадающих абсолютных разностей. Для другого набора это решение нельзя копировать механически. Совпадения, правила обработки нулей и ошибки округления могут менять распределение статистики; проверяйте документацию и используйте подходящий режим расчёта.

Парность тоже не возникает из одинаковой длины двух массивов. Нужен ключ участника и соответствие измерений. Если второй столбец отсортировать отдельно, разности станут фиктивными, хотя функция выполнится без ошибки. Перед анализом проверяйте уникальность ключа, порядок соединения и число полных пар, а исключённые неполные пары показывайте отдельно.

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

pythonПроверка расчёта
import numpy as np
from scipy.stats import wilcoxon, binomtest
# Изменения после минус до у восьми независимых пациентов.
# Нет нулей и совпадающих абсолютных разностей.
d = np.array([-1, -2, -3, -4, -5, -6, -7, 8], dtype=float)
w = wilcoxon(d, alternative="two-sided", method="exact")
sign = binomtest(int((d>0).sum()), len(d), p=.5, alternative="two-sided")
print("median_change", np.median(d))
print("wilcoxon_W", w.statistic, "p", w.pvalue)
print("sign_test_p", sign.pvalue)

Шаг 3. Общая проверка не называет различающиеся пары

Третье упражнение — три независимые группы по шесть условных времён ожидания. Критерий Краскела — Уоллиса даёт H = 11,684211 и асимптотическое p ≈ 0,002903. Это общий сигнал различий в ранговом поведении групп в данной постановке, а не готовый список пар, между которыми доказано различие.

На малых группах приближение требует осторожности. Мы используем по шесть наблюдений как компактный учебный пример и явно подписываем режим расчёта. Для ответственного анализа маленьких выборок может потребоваться перестановочный подход. Сильное визуальное разделение в искусственных данных не является проверкой пригодности метода для любого реального набора.

Python: пары и поправка Холма

После общего расчёта показываем отдельный заранее заданный набор всех трёх попарных сравнений Манна — Уитни с поправкой Холма. Это наш вариант продолжения анализа, не заявление о том, что мы воспроизводим алгоритм статьи. При уровне 0,05 скорректированные p-value равны примерно 0,006494, 0,030303 и 0,064935. Последняя пара не проходит принятое правило отклонения.

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

Чтобы писать именно о сдвиге положения, нужно обосновать сопоставимость формы распределений. В отчёте лучше показывать данные или их содержательное описание, а не одну колонку p-value. Если размер эффекта нужен для решения о процессе, добавьте подходящую оценку эффекта и интервал — общий H этого не заменяет.

В продукте три группы могут быть вариантами обучения новых пользователей. Они должны состоять из разных независимых участников для этой схемы. Три последовательных дня у одних и тех же людей — другая структура. Нельзя выбрать Краскела — Уоллиса только потому, что на графике три столбца.

pythonУсловия вывода
import numpy as np
from scipy.stats import kruskal, mannwhitneyu
from statsmodels.stats.multitest import multipletests
from itertools import combinations
# Три независимые группы по шесть условных минут ожидания.
groups = [np.array([8, 9, 10, 11, 12, 13]),
          np.array([14, 15, 16, 17, 18, 19]),
          np.array([11.5, 12.5, 13.5, 14.5, 15.5, 16.5])]
k = kruskal(*groups)
print("H", round(k.statistic, 6), "p_asymptotic", round(k.pvalue, 6))
pairs = list(combinations(range(3), 2))
p = [mannwhitneyu(groups[a], groups[b], alternative="two-sided", method="exact").pvalue
     for a, b in pairs]
_, adjusted, _, _ = multipletests(p, method="holm")
for pair, raw, adj in zip(pairs, p, adjusted):
    print(pair, "p_exact", round(raw, 6), "p_holm", round(adj, 6))

Как использовать старые инструкции сегодня

Сильная сторона практикума — ограниченная задача и видимый переход от постановки к действию в программе. Можно читать один текст под конкретную трудность. Соавторы и годы при этом важны: инструкции принадлежат определённой публикации, а не некоторому единому неизменному «методу Гржибовского».

Программные меню в текстах привязаны к версиям своего времени. При переносе в Python сохраняйте статистическую постановку, а не внешний вид вывода. Если старая программа применяла нормальную аппроксимацию, а новая выбрала точное вычисление, значения могут различаться без ошибки. Нужно сообщить режим и объяснить, почему он подходит вашим данным.

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

Как проверить собственный перенос в Python

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

Не заменяйте пропуски нулями ради запуска функции. Ноль — значение, а отсутствие измерения — факт о процессе сбора. Если отбрасываете неполную пару, исходный размер набора и число исключений должны остаться в отчёте. Иначе читатель не поймёт, какая популяция фактически анализировалась.

Проверьте также направление вывода. При двустороннем тесте маленькое p не сообщает знак изменения; он берётся из данных и определения разности. При нескольких группах общий тест не выделяет победителя. При сравнении «до — после» даже корректный знак не превращает наблюдаемое изменение в причинный эффект вмешательства.

Кому маршрут подходит и чем его дополнить

Этот формат удобен, если вы уже собираете таблицу и хотите разобраться с конкретным методом. Если базовый словарь ещё не сложился, начните с вводного курса Банержи. Если проблема в устройстве исследования, а не в команде программы, переходите к Альтману. Для подготовки текста результатов отдельно полезен обзор Ланга и Сесик.

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

Продолжение маршрута

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

Материал образовательный. Все медицинские данные в упражнениях синтетические; расчёты не предназначены для диагностики или выбора лечения конкретному человеку.

Продолжить чтение
Вся библиотека