Реброва «Статистический анализ медицинских данных»: обзор
Обзор книги О. Ю. Ребровой: проверенное издание, границы оценки и три собственных расчёта в Python вместо старого интерфейса STATISTICA.
Содержание статьи
Вы открыли старую инструкцию по STATISTICA, нашли нужное меню, но ваша таблица содержит пропуски, повторные визиты и баллы вместо измерений. Кнопка доступна, а уверенности в выводе нет. «Статистический анализ медицинских данных» О. Ю. Ребровой стоит рассматривать через эту проблему: как связать устройство данных, выбранную процедуру и интерпретацию. Ниже — проверенная библиография, границы оценки и собственный практикум в Python. Мы не воспроизводим задачи книги и не выдаём знакомство с аннотацией за постраничное чтение.
Какое издание рассматриваем
Полное русское название — «Статистический анализ медицинских данных. Применение пакета прикладных программ STATISTICA». Автор — О. Ю. Реброва. В карточке электронной версии издателя указано: Москва, «Медиа Сфера», 2003. Именно эту дату используем для выбранного издания. В библиотечных каталогах встречается также издание 2002 года; смешивать сведения разных выпусков в одной библиографической записи не нужно.
Это русскоязычная работа, поэтому отдельного переводного оригинального названия мы не приписываем. По описанию издателя адресаты — медики и биологи, проводящие исследования, аспиранты и студенты. Книга соединяет статистические методы, интерпретацию результатов и требования к представлению анализа. Эти сведения подтверждены карточкой издательства; конкретные главы и их последовательность без проверенного оглавления здесь не перечисляются.
Оценка уровня дальше — наша рекомендация для читателя. Для входа полезно уверенно работать с долями, средним, разбросом и устройством таблицы наблюдений. Глубокий математический аппарат не заменит понимания дизайна, но и владения интерфейсом недостаточно. Если термины «выборка», «единица наблюдения» и «зависимые измерения» пока смешиваются, начните с вводного материала, затем возвращайтесь к практике выбора процедур.
| Поле | Сведения |
|---|---|
| Автор | О. Ю. Реброва |
| Название | Статистический анализ медицинских данных. Применение пакета прикладных программ STATISTICA |
| Издательство / год | Медиа Сфера, 2003 |
| Язык оригинала | Русский |
| Кому адресовано издателем | Медики, биологи, аспиранты, студенты |
| Наш ориентир по подготовке | Базовые доли, разброс, зависимость наблюдений |
Что можно оценить по доступным сведениям
По издательскому описанию книга интересна как мост между исследовательским вопросом, вычислением в пакете и оформлением результата. Мы проверили библиографию и это описание, но не проводили постраничную экспертизу полного текста. Поэтому ниже нет оценок качества каждой главы, обещаний отсутствия ошибок и утверждений, что конкретное упражнение взято у автора. Разбор показывает, как сегодня практиковать соответствующий круг задач на своих данных.
Наш маршрут состоит из трёх этапов: установить смысл колонок и пропусков; выбрать процедуру под зависимость наблюдений; проверить, соответствует ли математическая шкала содержательной. Такой маршрут можно использовать при чтении тематических разделов книги, не принимая его за авторское оглавление. На каждом этапе создавайте маленький воспроизводимый пример, прежде чем повторять расчёт на большой рабочей базе.
Сильная сторона прикладного формата — необходимость довести вопрос до конкретной таблицы и результата. Его ограничение — риск запомнить последовательность кнопок отдельно от предпосылок. Современный перенос в Python полезен именно тем, что заставляет явно записать входные данные, обработку пропусков и параметры процедуры. Сам по себе код не гарантирует правильности: ошибочную логику он воспроизводит столь же надёжно, как правильную.
Идея первая: пропуск не равен нулю
В условном медицинском наборе измерено ожидание результата у восьми участников. Шесть значений известны: 4, 5, 6, 7, 8 и 9 минут, два отсутствуют. Среднее по наблюдённым значениям равно 6,5 минуты. Если при импорте заменить отсутствие нулями, среднее станет 4,875. Никакой статистический тест для обнаружения этой ошибки не нужен: изменился смысл исходной записи.
Ноль может означать настоящее отсутствие ожидания, а пропуск — неизвестное время. Они принадлежат разным категориям. Для анализа нужен словарь данных: допустимые значения, единицы, причины отсутствия, момент регистрации. Если старый пакет хранит специальные коды пропусков, проверьте экспорт. Число, когда-то служившее техническим маркером, может случайно стать экстремальным наблюдением в новой программе.
Код ниже не восстанавливает два неизвестных результата. Он показывает наблюдённое среднее и два сценария: если оба неизвестных значения равны 6,5, общее среднее останется 6,5; если оба равны 15, получится 8,625. Это анализ чувствительности к предположению. Выбор реалистичного сценария должен опираться на причины пропусков, а не на желание сохранить удобный вывод.
import numpy as np
# Условное ожидание результата, минуты; None означает отсутствие измерения.
raw = [4,5,6,7,None,8,9,None]
x = np.array([v for v in raw if v is not None], dtype=float)
wrong = np.array([0 if v is None else v for v in raw], dtype=float)
print("recorded, missing, mean observed, wrong zero mean:",
len(x),len(raw)-len(x),x.mean(),wrong.mean())
for assumed in [6.5,15]:
print("scenario",assumed,(x.sum()+2*assumed)/len(raw))Что этот пример меняет в продуктовой аналитике
У пользователя без события время ожидания может отсутствовать потому, что процесс ещё не завершён. Заполнить его нулём значит объявить незавершённое действие мгновенным успехом. У другого пользователя события могло не быть из-за потери трекинга. Эти две ситуации требуют разных решений: учёта времени наблюдения и проверки источника соответственно. Универсальная команда fillna не различит их за вас.
В отчёте оставляйте отдельные количества полных и неполных наблюдений и определение анализируемой популяции. «Среднее время среди завершивших» — допустимая описательная метрика, если именно она нужна. Но она не равна среднему времени всех начавших процесс и может улучшаться, когда самые медленные перестают завершать его. Проверка знаменателя должна предшествовать сравнению версий продукта.
Полезное упражнение при чтении любой прикладной главы — придумать значение, которое внешне похоже на допустимое, но имеет другой смысл. Например, пустая дата, технический код отсутствия ответа или повторный идентификатор. Затем проследить, на каком шаге оно будет обнаружено. Это формирует навык аудита данных, который переносится между STATISTICA, Excel, SQL и Python.
Идея вторая: пары нельзя превращать в независимые группы
В следующем собственном примере у восьми участников есть условный количественный показатель до и после. Нас интересует изменение у того же человека. Разности составляют −1, −2, −1, −3, −2, −1, −2 и −4. Среднее изменение равно −2, стандартное отклонение разностей — примерно 1,069. Парный критерий Стьюдента использует именно распределение этих разностей, а не два независимых облака измерений.
Расчёт даёт двустороннее p около 0,001134 и 95%-й интервал среднего изменения от −2,894 до −1,106. Если ошибочно объявить столбцы независимыми и запустить вариант Уэлча, получится p около 0,4053. Контраст показывает значение дизайна, а не правило выбирать меньший результат. Процедура должна следовать реальному соответствию участников ещё до того, как вы узнаете оба числа.
Это демонстрация статистического анализа пар, но не доказательство эффекта лечения: данные синтетические, контрольной группы нет. В реальном сравнении «до — после» изменение может включать естественную динамику, регрессию к среднему и параллельные события. Даже корректный парный тест не превращает наблюдательное изменение во влияние конкретного вмешательства.
import numpy as np
from scipy import stats
before = np.array([22,24,26,28,30,32,34,36.])
after = before + np.array([-1,-2,-1,-3,-2,-1,-2,-4.])
d = after-before
result = stats.ttest_rel(after,before)
print("mean difference",d.mean(),"SD differences",d.std(ddof=1))
print("paired t,p",result.statistic,result.pvalue)
print("95% CI",result.confidence_interval())
print("independent Welch p (wrong design)",stats.ttest_ind(after,before,equal_var=False).pvalue)Как проверить перенос старого расчёта
При переходе из интерфейсного пакета в Python начните с порядка строк и ключей. Если исходный файл отсортирован по разным колонкам до и после, позиционное вычитание соединит чужие измерения. Правильная пара строится по идентификатору и согласованному визиту. После соединения проверьте уникальность ключей и число потерянных соответствий, затем уже передавайте массивы в тест.
Далее сравните параметры: двусторонняя или односторонняя альтернатива, работа с пропусками, уровень доверия, округление и включённые строки. Несовпадение p между программами не обязательно означает ошибку одной из них. Часто пакеты решают разные задачи из-за настроек по умолчанию. Для воспроизводимости полезнее сохранить параметры и исходную таблицу, чем скриншот окна с итоговой звёздочкой.
Если учебный набор почти постоянный или содержит мало пар, посмотрите сами разности. Формальный вывод особенно чувствителен к единичным наблюдениям и предположениям. Непараметрическая процедура тоже не выбирается автоматически по маленькому объёму: её гипотеза и предпосылки могут отличаться. Сначала уточните, нужен ли средний сдвиг, медианный или иной эффект.
Идея третья: числовой код не создаёт количественную шкалу
Представим баллы дискомфорта 1, 2, 2, 3, 3, 4 при возрастающем ожидании. Категории упорядочены, но расстояния между ними не обещаны одинаковыми. Для вопроса о совместном порядке подходит ранговая корреляция. В нашем наборе коэффициент Спирмена примерно 0,9710. Это характеристика специально созданных пар, а не свидетельство связи в реальной медицинской популяции.
Перекодируем категории возрастающими значениями 1, 10, 100 и 1000, сохранив совпадения. Спирмен не изменится: он видит те же ранги. Среднее новых кодов и линейные расстояния при этом станут другими. Пример показывает, почему одинаковое представление в типе float не делает шкалы одинаковыми. Название колонки, смысл значения и способ получения остаются частью статистической модели.
Для реального опросника возможны обоснованные правила суммарного балла и специальные модели. Их нельзя вывести из этой игрушечной таблицы. Здесь задача скромнее: не принимать удобную кодировку за физическое измерение. В продукте это относится к статусам воронки, градациям оценки сервиса и уровням тарифа. Порядок категорий может быть осмысленным, а равенство расстояний — нет.
import numpy as np
from scipy.stats import spearmanr
# Балл дискомфорта порядковый: другая возрастающая кодировка сохраняет ранги.
wait = np.array([5,8,10,12,16,20.])
score = np.array([1,2,2,3,3,4.])
recoded = np.array([1,10,10,100,100,1000.])
print("Spearman original",spearmanr(wait,score).statistic)
print("Spearman recoded",spearmanr(wait,recoded).statistic)Что устарело, а что требует просто другой реализации
Привязку к конкретному интерфейсу STATISTICA нужно читать как исторический способ выполнить анализ. Современные версии программ, названия меню и доступность функций могут отличаться; мы не проверяем совместимость старых инструкций с каждой текущей установкой. В Python функцию проще связать с тестовым набором и сохранить рядом с отчётом. Это замена рабочего процесса, а не заявление, что все методы из старой книги устарели.
Не переносите результаты по одному имени теста. Например, «корреляция» не определяет шкалу, работу со связанными рангами и способ получения p. «Сравнение групп» не определяет пары, дисперсии и альтернативу. Составьте небольшую спецификацию расчёта словами и только потом ищите функцию. Если спецификацию не удаётся написать, проблема ещё находится на уровне вопроса, а не синтаксиса.
Для современной практики добавьте контроль версий данных, библиотек и правил включения. Книга, посвящённая статистическому пакету, не должна в одиночку обеспечивать весь инженерный процесс. И наоборот, хорошая инфраструктура не заменяет содержательного понимания эффекта. Полезная пара — прикладное чтение для постановки задачи и документация текущей библиотеки для точного поведения реализации.
Кому читать и кому выбрать другой вход
Книга может быть полезна исследователю, который уже собирает таблицы и хочет осмысленно связывать методы с медицинскими вопросами. Особенно уместно читать её с собственной небольшой задачей: определить исход, выписать ограничения, воспроизвести один расчёт и объяснить результат коллеге. Оценивать пользу лучше по тому, можете ли вы защитить выбор процедуры, а не по числу освоенных кнопок.
Если вам нужен исключительно современный учебник программирования на Python, эта книга не закроет такой запрос. Если нужен быстрый обзор терминов перед встречей, удобнее начать с более краткого справочного формата. Если вы проектируете сложное многоцентровое исследование, базовое прикладное руководство не заменит консультацию специалиста по дизайну и профильные современные источники. Это границы задачи чтения, а не рейтинг качества книги.
Необязательно покупать несколько руководств одновременно. Сначала сформулируйте, какого звена вам не хватает: выбор метода, математическое обоснование, реализация или отчёт. Для первого полезен собственный протокол, для второго — учебные разборы с предпосылками, для третьего — документация, для четвёртого — Ланг и Сесик. Такой выбор снижает риск собрать библиотеку, которая многократно объясняет знакомое и не отвечает на рабочий вопрос.
План практического чтения
Возьмите один маленький набор без персональных данных и создайте паспорт: что означает строка, какие единицы у столбцов, как обозначено отсутствие и какой эффект нужен. Затем выполните описательный анализ и запишите возможные причины искажений. Только после этого выберите одну процедуру и её параметры. Перечислите, что её результат не устанавливает, например причинность или индивидуальный прогноз.
На следующем проходе измените одну предпосылку: добавьте пропуск, нарушьте соответствие пары или замените количественную шкалу порядковой. Объясните, почему меняется процедура либо интерпретация. Не нужно специально добиваться другого p; цель — увидеть границу метода. Сохраните оба варианта и короткий текст для коллеги, который не присутствовал при расчёте.
Завершите упражнение воспроизведением с чистого запуска. Все исходные значения должны находиться в коде или в указанном файле, а не в незаметно оставленной переменной. Наши три блока независимы друг от друга и используют синтетические данные. Такой небольшой стандарт воспроизводимости полезен до перехода к большим исследованиям, где источник расхождения найти намного труднее.
Что почитать в паре
Начальный маршрут по биостатистике помогает уточнить вопрос до выбора теста. Разбор критерия Стьюдента раскрывает предпосылки парного анализа; статья о Спирмене и Пирсоне — смысл шкалы и рангов. Обзор Ланга и Сесик продолжает цепочку после расчёта: как представить частоты, эффект и неопределённость так, чтобы другой человек мог проверить вывод.
Наш вердикт ограничен проверенными сведениями: Реброва — кандидат на прикладное чтение о связи данных, процедуры и интерпретации; устаревающую привязку к интерфейсу нужно дополнять современным воспроизводимым расчётом. Полный текст и все редакции не сопоставлялись, поэтому мы не обещаем качество каждого конкретного примера или перевода терминов между версиями программ.
Материал образовательный. Все разобранные медицинские числа придуманы для обучения статистике и не служат рекомендациями по диагностике или лечению.
Материалы по теме

Корреляция Спирмена и Пирсона: выбор, расчёт и ошибки
Корреляция Спирмена и Пирсона на условных медицинских данных: линейная и монотонная связь, выбросы, перестановочный тест в Python и перенос в продукт.

Относительный риск и отношение шансов: разница на примерах
Чем относительный риск отличается от отношения шансов: таблица 2×2, абсолютный эффект, доверительные интервалы, случай — контроль и A/B-тест в Python.

Чувствительность и специфичность теста: расчёт на примере
Чувствительность и специфичность теста, PPV и NPV на синтетических данных. Распространённость, пороги, интервалы и перенос в антифрод с кодом Python.