Банержи: «Медицинская статистика понятным языком»
Обзор вводного курса Банержи: издание 2014 года, кому подойдёт книга и три собственных примера Python — среднее, регрессия и проверка гипотез.
Содержание статьи
Вы читаете медицинскую статью и узнаёте слова «корреляция», «значимость», «регрессия», но не можете объяснить, какой вывод разрешают данные. «Медицинская статистика понятным языком» Ашиса Банержи — один из вариантов входа в этот язык. В обзоре проверяем, что обещает выбранное издание, кому оно подойдёт и как превратить чтение в три небольших расчёта. Все данные ниже придуманы нами: это не задачи из книги и не результаты исследований.
Короткий ответ: для кого эта книга
- Подойдёт для первого знакомства с медицинской статистикой, если вы уверенно считаете доли, средние и понимаете координатный график.
- Полезнее читать с собственным небольшим набором данных: выписывать вопрос, единицу наблюдения и допустимый вывод.
- Не стоит ожидать от вводного курса готового протокола сложного исследования или современной инструкции по Python.
Какое издание рассматриваем
Автор — Ашис Банержи, Ashis Banerjee. Русское название — «Медицинская статистика понятным языком: вводный курс». Рассматриваем издание «Практической медицины», Москва, 2014, перевод под редакцией В. П. Леонова. ISBN 978-5-98811-087-3 совпадает в карточке издательства и выходных данных доступного фрагмента.
Название оригинала — Medical Statistics Made Clear: An Introduction to Basic Concepts. Фрагмент указывает первое английское издание и copyright 2003. Год русской книги не означает, что все методы или программные примеры были заново разработаны в 2014 году. Если покупаете другой выпуск, сверяйте его собственные выходные данные.
Основание обзора — карточка издательства и трёхстраничный фрагмент с выходными данными и оглавлением. Полный текст мы здесь не оцениваем: нельзя по аннотации судить о качестве каждого объяснения и решения. Практические разделы ниже — наш самостоятельный разбор тем, подтверждённых оглавлением, а не пересказ авторских примеров.
Что даёт структура книги
В начале идут устройство данных и распределения, затем связь переменных и проверка гипотез. Дальше оглавление соединяет эпидемиологические вопросы, вероятность и более сложные способы анализа, включая несколько факторов и временные ряды. Есть глоссарий. Это достаточно широкий обзор, чтобы увидеть, как отдельные термины относятся друг к другу.
Для новичка такой порядок можно превратить в маршрут из вопросов. Сначала: что именно записано в строке? Затем: как выглядит разброс? Потом: какую связь или разницу мы оцениваем? И только после этого: какая неопределённость у оценки? Это наш способ работы с книгой, а не утверждение о формулировках её глав.
Издатель адресует курс студентам, аспирантам, исследователям и врачам и указывает школьную математику как достаточную базу. Для самостоятельного практикума здесь дополнительно нужны списки Python и запуск короткого скрипта. Умение программировать не является условием чтения самой книги: оно нужно, чтобы проверить наши числа и поменять исходные данные.
Идея 1. Среднее отвечает не на любой вопрос
Представьте восемь условных пациентов и минуты ожидания регистрации: 8, 9, 10, 10, 11, 12, 13, 47. Среднее равно 15 минутам, медиана — 10,5. Оба числа рассчитаны правильно. Ошибка появляется, когда одно из них без объяснения называют «типичным ожиданием» и делают вид, что второе ничего не добавляет.
Для описания опыта человека в середине упорядоченного ряда медиана понятнее. Для общей нагрузки на процесс среднее вместе с числом людей сохраняет связь с суммой: суммарно здесь 120 минут ожидания. Это не рабочее время регистратора: пациенты могли ждать одновременно. Даже простой показатель требует определения того, что именно он измеряет.
Межквартильные границы при линейной интерполяции равны 9,75 и 12,25 минуты. На восьми наблюдениях дробные квартильные значения не означают, что кто-то реально ждал 9,75 минуты. Это результат принятого правила расчёта позиции между соседними значениями. При сравнении программ стоит проверить это правило, прежде чем искать ошибку в данных.
| Величина | Результат | Что описывает |
|---|---|---|
| Среднее | 15 минут | Среднюю длительность по всем восьми записям |
| Медиана | 10,5 минуты | Середину упорядоченного ряда |
| Первый и третий квартили | 9,75 и 12,25 минуты | Границы центральной половины по выбранному правилу |
| Сумма | 120 минут | Суммарное ожидание; не рабочее время регистратора |
Python: что меняет длинное ожидание
Каждый пример можно запускать отдельно: все входные значения заданы внутри блока, внешние файлы не нужны. Для расчётов этой статьи установите пакеты командой python -m pip install numpy scipy. Код проверен с Python 3.12; точные версии библиотек и результаты сохранены в отчёте подготовки материала. При изменении данных заново проверьте допущения, а не только успешное выполнение команды.
Если убрать последнюю запись, среднее снизится до 10,429, медиана — до 10. Код показывает чувствительность, но не даёт разрешения удалить наблюдение. Запись 47 может быть ошибкой, отдельным сценарием обслуживания или настоящим длинным ожиданием, которое как раз нужно исследовать. Проверка первичного источника важнее желания получить красивую форму распределения.
В рабочем отчёте сохраните исходный расчёт и отдельно покажите сценарий без спорной записи. Укажите причину проверки, правило исключения и влияние на вывод. Если правило придумано после просмотра результата, это тоже часть истории анализа. Читатель должен отличать исправление опечатки от отбора удобных наблюдений.
В продукте такой же вопрос возникает с длительностью сессии или временем ответа поддержки. Медиана показывает середину распределения, сумма отражает совокупную величину, а хвост может быть главным предметом работы команды. Нельзя выбрать среднее только потому, что оно уже есть в панели, или медиану только потому, что она меньше реагирует на проблемные случаи.
import numpy as np
# Условные минуты ожидания восьми пациентов, не данные книги.
x = np.array([8, 9, 10, 10, 11, 12, 13, 47], dtype=float)
for label, values in [("Все", x), ("Без последней записи", x[:-1])]:
print(label, "n", len(values), "mean", round(values.mean(), 3),
"median", np.median(values),
"q1_q3", np.quantile(values, [0.25, 0.75], method="linear"))
print("Всего минут", x.sum())
Идея 2. Уравнение связи не объясняет её причину
Возьмём шесть условных наблюдений: часы нагрузки и балл некоторого показателя. Мы не задаём название болезни, норму показателя или лечебное вмешательство. На этих данных простая линейная регрессия даёт наклон 1,257143 и свободный член 1,6. При четырёх часах линия предсказывает 6,628571 балла.
Наклон описывает изменение предсказанного среднего на единицу x внутри выбранной линейной модели. Он не обещает, что увеличение нагрузки конкретному человеку изменит показатель именно на эту величину. Возраст, исходное состояние, отбор участников или обратное направление связи могут объяснять наблюдаемую зависимость. Формула сама не отделяет эти механизмы.
Коэффициент детерминации R² равен 0,864286. Он относится к подгонке на этих шести точках. Это не доля людей, для которых прогноз верен, не вероятность правильности модели и не гарантия результата на новых наблюдениях. Шесть значений хорошо подходят для разбора арифметики, но слишком мало, чтобы уверенно обсуждать переносимость модели.
Python: линия и остатки
Скрипт печатает коэффициенты, прогноз и остатки — отклонения фактических значений от линии. Посмотрите не только на R². Если остатки растут вместе с x, образуют дугу или одна точка определяет наклон, линейная модель может плохо описывать задачу. Небольшие остатки на обучающей таблице ещё не заменяют проверку на новых данных.
Свободный член здесь соответствует x = 0, хотя в наборе x начинается с единицы. Это параметр уравнения, а не непосредственно наблюдавшийся показатель при отсутствии нагрузки. По той же причине прогноз далеко за диапазоном x от 1 до 6 потребует отдельного обоснования: линия продолжится автоматически, данные — нет.
У аналитика продукта аналогом может быть связь числа обращений к поддержке и времени использования сервиса. Активные клиенты и обращаются чаще, и дольше остаются в продукте. Положительный наклон не доказывает, что создание дополнительных проблем увеличивает удержание. Перед причинным выводом нужен дизайн, который помогает отделить исходную активность от влияния поддержки.
import numpy as np
from scipy.stats import linregress
# Синтетические часы нагрузки x и условный балл y: не эксперимент.
x = np.array([1, 2, 3, 4, 5, 6], dtype=float)
y = np.array([3, 5, 4, 7, 7, 10], dtype=float)
fit = linregress(x, y)
print("slope", round(fit.slope, 6), "intercept", round(fit.intercept, 6))
print("r_squared", round(fit.rvalue**2, 6))
print("prediction_at_4", round(fit.intercept + fit.slope * 4, 6))
print("residuals", np.round(y - (fit.intercept + fit.slope*x), 3))
Идея 3. Несколько попыток меняют смысл находки
Проверка гипотезы часто выглядит как один вызов функции. На практике исследователь пробует несколько исходов, возрастных срезов и способов группировки, а в отчёт попадает единственное маленькое p-value. Даже если каждый отдельный расчёт выполнен корректно, история поиска меняет оценку убедительности результата.
В учебной модели все нулевые гипотезы истинны, проверки независимы, а вероятность ложного отклонения в каждой равна 0,05. Тогда вероятность хотя бы одного ложного отклонения составляет 5% для одной проверки, 22,6219% для пяти и 64,1514% для двадцати. Это вероятность события во всём наборе проверок, а не вероятность ошибки уже опубликованного вывода.
Python: вероятность хотя бы одной ошибки
Здесь достаточно стандартного Python, без статистического пакета. Мы считаем дополнение к вероятности, что все проверки обошлись без ложного отклонения. Если проверки зависимы, формула с произведением больше не описывает их совместное поведение. В реальном наборе медицинские показатели и продуктовые метрики часто связаны, поэтому механически подставлять число столбцов нельзя.
Тем не менее модель показывает, почему нужен план. До анализа назовите основной вопрос и основной исход. Вторичные проверки перечислите отдельно; для подтверждающего набора выберите контроль множественности, например процедуру Холма. Исследовательские срезы можно использовать для следующей гипотезы, сохраняя честное описание того, как она появилась.
Не выбирайте поправку по тому, при какой результат остаётся «значимым». Это ещё одна развилка после просмотра данных. И не исправляйте недостающую информацию о поиске одной фразой «использована поправка»: нужно знать, к какой семье гипотез она применена и какие проверки остались за её пределами.
# Модель: независимые проверки истинных нулевых гипотез, alpha=0.05.
alpha = 0.05
for m in [1, 5, 20]:
print("tests", m, "at_least_one_false_positive", round(1-(1-alpha)**m, 6))
Сильные стороны и границы вводного курса
У выбранного формата есть практическое преимущество: он помогает получить общий словарь без предварительного курса высшей математики. По подтверждённому охвату можно связать описание данных, регрессию и проверку гипотез в одной траектории. Для человека, который пока путает распределение наблюдений с распределением оценки, это полезнее раннего перехода к сложному алгоритму.
Но ширина оглавления не означает глубину освоения. После первого знакомства с регрессией вы ещё не обязаны уметь строить модель с пропусками, нелинейностями и повторными измерениями. А наличие временных рядов в содержании не превращает книгу в руководство по прогнозированию спроса. Для таких задач нужны отдельные источники и проверка предпосылок на конкретных данных.
Датированный вводный курс разумно дополнять актуальной документацией вычислительного инструмента. В наших примерах NumPy фиксирует способ расчёта квартилей, SciPy возвращает параметры простой регрессии, а элементарная вероятность считается напрямую. Мы не утверждаем, что в книге есть эти команды: это современное сопровождение самостоятельного чтения.
Как выбрать между Банержи и соседними книгами
Если нужен компактный русскоязычный вход, начните с Банержи и проверьте себя на небольшом упражнении после каждой темы. Если легче воспринимаете материал через короткие тематические развороты, сравните с Петри и Сэбином. Это выбор формы обучения, а не соревнование фамилий или возраста издания.
Если уже понимаете определения, но не можете подготовить план анализа, полезнее перейти к Альтману. Если расчёт готов, а вы не знаете, что писать в разделе результатов, читайте Ланга и Сесик. Различие между этими задачами поможет не покупать ещё один вводный курс в надежде, что он решит проблему представления или дизайна.
Выбирая книгу, откройте доступный фрагмент и попробуйте объяснить один результат своими словами. Понятен ли знаменатель? Видна ли единица наблюдения? Можете ли вы сказать, чего расчёт не доказывает? Если остаётся только запомненная формула, добавьте практическое упражнение или другой способ объяснения, а не ускоряйте чтение.
Как провести первое занятие
Начните с таблицы ожидания выше. До запуска кода запишите, какое число нужно администратору процесса и какое — человеку, выбирающему время визита. После запуска сопоставьте эти вопросы со средним и медианой. Затем придумайте две разные причины длинного ожидания и объясните, какие дополнительные данные позволят их различить.
На втором проходе измените одно значение, сохранив размер таблицы, и сначала предскажите направление изменения среднего. Не надо добиваться совпадения до последнего знака: цель — понимать чувствительность показателя. После этого верните исходную таблицу и сохраните отдельно оба варианта, чтобы эксперимент с данными не превратился в незаметную правку источника.
Для регрессии попробуйте сформулировать альтернативное объяснение связи, не меняя ни одной цифры. Для нескольких проверок перечислите все анализы, которые вы реально сделали бы до написания отчёта. Именно такие действия превращают вводную книгу в рабочий инструмент: вы учитесь контролировать собственные решения, а не только узнавать названия методов.
Что прочитать дальше
Ссылки ниже продолжают конкретные задачи: базовый маршрут, выбор среднего, знакомство с другим форматом учебника и план исследования. Не обязательно читать их подряд. Выберите материал по вопросу, который остался после собственного расчёта, и вернитесь к данным с новым ограничением или более точной формулировкой.
Материал образовательный. Все медицинские примеры синтетические; они не предназначены для диагностики, лечения или принятия решений о здоровье конкретного человека.
Материалы по теме

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

Кирквуд и Стерн: Essential Medical Statistics
Обзор Essential Medical Statistics: частоты на человеко-время, стандартизация и кластерные данные. Проверенная библиография и расчёты Python.

Блэнд: An Introduction to Medical Statistics
Обзор четвёртого издания книги Мартина Блэнда: согласие измерений, каппа и неопределённость. Три собственных расчёта Python с переносом в продукт.