Корреляция Спирмена и Пирсона: выбор, расчёт и ошибки
Корреляция Спирмена и Пирсона на условных медицинских данных: линейная и монотонная связь, выбросы, перестановочный тест в Python и перенос в продукт.
Содержание статьи
Вы получили таблицу ожидания приёма и оценок дискомфорта. Длинное ожидание будто сопровождается высокой оценкой, но шкала баллов неровная, а наблюдений мало. Корреляция Спирмена кажется безопасным вариантом; коллега предлагает Пирсона, потому что обе колонки числовые. Выбор зависит от того, какую связь вы хотите описать. Ниже — собственные синтетические данные, расчёт обоих коэффициентов и проверка выводов, которую можно перенести на продуктовую аналитику.
Короткий ответ: какой коэффициент выбрать
- Пирсон описывает линейную связь количественных величин. Спирмен описывает монотонную связь их рангов: растёт ли одна величина вместе с другой.
- Для порядковой шкалы и вопроса о порядке наблюдений начните со Спирмена. Для линейного соотношения осмысленных числовых шкал рассматривайте Пирсона.
- Посмотрите диаграмму рассеяния, единицу наблюдения и пропуски. Нулевая корреляция не исключает U-образную зависимость, а большая не доказывает причинность.
- На маленькой выборке отдельно выбирайте способ статистического вывода. Коэффициент и p-значение — разные результаты с разными требованиями.
Что именно измеряет Пирсон
Коэффициенты отвечают на вопросы о совместном изменении признаков, а не о согласии двух приборов. Если второй прибор всегда прибавляет постоянное смещение, корреляция может быть идеальной, хотя заменить им первый без поправки нельзя. Для проверки взаимозаменяемости нужны анализ разностей и допустимая ошибка измерения. Такая постановка возникает и в продукте, когда новая система событий должна воспроизвести старую: согласованное движение дневных сумм ещё не подтверждает корректность миграции.
Коэффициент Пирсона — ковариация, нормированная на стандартные отклонения двух величин. Он не имеет единиц измерения и лежит от минус единицы до единицы. Положительный знак означает совместный рост относительно средних, отрицательный — противоположное движение. Модуль описывает тесноту линейного соотношения в выбранной совокупности. Перевод минут в секунды не меняет коэффициент: изменяется масштаб, но не относительное расположение точек.
Сам коэффициент можно вычислить для ненормальных данных, если разброс обеих колонок ненулевой. Требования к обычному параметрическому тесту и доверительному интервалу строже, чем возможность посчитать описательное число. В частности, классическая проверка нулевой корреляции опирается на модель независимых пар из совместного нормального распределения. Две отдельные проверки нормальности колонок не устанавливают эту совместную модель. Поэтому правило «Шапиро прошёл — выбираем Пирсона» оставляет без внимания форму связи и зависимость строк.
Что меняется при переходе к Спирмену
Для Спирмена исходные значения заменяют рангами, затем вычисляют корреляцию этих рангов. Если несколько значений равны, им присваивают средний из занимаемых рангов. Поэтому порядковая шкала, где расстояние между соседними баллами не определено, подходит естественнее, чем для линейного анализа исходных баллов. Увеличение одного экстремального значения не влияет на его ранг, пока оно остаётся на том же месте.
Эта устойчивость ограничена. Выброс, перескочивший через множество наблюдений, меняет порядок и результат. Спирмен также не исправляет ошибку ввода, отбор участников и общую причину обоих признаков. При большом числе одинаковых ответов доступных порядков мало; коэффициент может быть нестабилен, хотя таблица выглядит длинной. Не разрывайте совпадения случайным шумом ради красивого результата: используйте обработку связанных рангов и показывайте распределение ответов.
Условный медицинский пример: восемь независимых пар
Представим восемь разных участников учебного опроса. Время ожидания принимает значения от одной до восьми условных единиц, а оценка дискомфорта равна 2, 3, 5, 4, 8, 7, 9, 12. Это специально сконструированная шкала для демонстрации порядка, а не валидированный клинический инструмент. Каждая строка соединяет две характеристики одного человека. Переставлять строки целиком можно; сортировать обе колонки независимо перед анализом нельзя.
Пирсон даёт 0,9518, Спирмен — 0,9524. Их близость здесь не является правилом или доказательством правильного выбора. Обе меры видят почти согласованный рост, а две соседние перестановки слегка нарушают порядок. Если рабочая задача состоит в описании балльного ранжирования, главным результатом будет Спирмен. Если в другом исследовании обе шкалы количественные и интересует линейная связь, подходящим может оказаться Пирсон. Выбор делается до просмотра более привлекательного p.
В таблице полезно оставить идентификатор, обе исходные величины и ранги. Тогда рецензент видит не только готовый коэффициент, но и происхождение каждой пары. Для реальных данных вместо учебных идентификаторов используйте обезличенные ключи. Отдельно проверьте уникальность ключа: незаметное соединение каждой записи с несколькими визитами создаёт повторения, которые обычная функция корреляции сочтёт независимыми людьми.
| ID | Ожидание | Балл | Ранг балла |
|---|---|---|---|
| 1 | 1 | 2 | 1 |
| 2 | 2 | 3 | 2 |
| 3 | 3 | 5 | 4 |
| 4 | 4 | 4 | 3 |
| 5 | 5 | 8 | 6 |
| 6 | 6 | 7 | 5 |
| 7 | 7 | 9 | 7 |
| 8 | 8 | 12 | 8 |
Расчёт Python и точные перестановки
Код использует NumPy и SciPy. Для малого набора мы не опираемся на асимптотическое p из spearmanr: перебираем все перестановки одного нормированного рангового вектора, оставляя второй фиксированным. Нулевая модель означает обменяемость пар при отсутствии зависимости. Получается двустороннее p около 0,001141. Это вероятность столь же крайнего результата в выбранной нулевой модели, а не вероятность того, что вывод ошибочен.
Перестановочный расчёт требует независимых, обменяемых единиц. Если строки принадлежат одному пациенту в разные дни, произвольная перестановка разрушает временную структуру. Если наблюдения собраны в клиниках с разными условиями, общий перебор также может не соответствовать дизайну. В таких случаях сначала определите уровень анализа и блоки перестановок либо выберите модель повторных наблюдений. Библиотека не узнает структуру исследования по длине массива.
Документация SciPy прямо отделяет коэффициент Спирмена от точности его асимптотического p и предлагает перестановки для небольших выборок. В отчёте назовите способ проверки, альтернативу и число пар. Интервал неопределённости тоже желателен, но он должен соответствовать процедуре: интервал Пирсона нельзя механически приложить к Спирмену. Здесь мы показываем точечную оценку и проверку гипотезы, не выдавая одно за другое.
import numpy as np
from scipy import stats
# Синтетические пары: время ожидания и балл дискомфорта.
x = np.arange(1, 9, dtype=float)
y = np.array([2, 3, 5, 4, 8, 7, 9, 12.])
r = stats.pearsonr(x, y)
rho = stats.spearmanr(x, y).statistic
rx, ry = stats.rankdata(x), stats.rankdata(y)
rx = (rx - rx.mean()) / np.linalg.norm(rx - rx.mean())
ry = (ry - ry.mean()) / np.linalg.norm(ry - ry.mean())
# Нулевая модель: независимые перестановки пар, все 8! вариантов.
def statistic(z, axis=-1):
return np.sum(z * ry, axis=axis)
perm = stats.permutation_test((rx,), statistic, permutation_type="pairings",
n_resamples=np.inf, alternative="two-sided", vectorized=True)
print("n, Pearson r, Spearman rho:", len(x), r.statistic, rho)
print("Permutation p:", perm.pvalue)
print("ranks:", stats.rankdata(x), stats.rankdata(y))Три контрпримера: монотонность, выброс, U-образная связь
Возьмём числа от одного до шести и сопоставим им степени двойки. Связь строго возрастает, но изгибается: Пирсон равен 0,9058, а Спирмен — единице. Ранги сохраняются идеально, расстояния между соседними значениями растут. Это удобная модель насыщения или ускорения показателя, хотя направление изгиба в реальном процессе может быть другим. Ранговая мера описывает порядок, но не сообщает величину изменения результата при добавлении одной единицы фактора.
Теперь добавим пару с x = 7 и y = −100. Пирсон станет примерно −0,2470, Спирмен — 0,25. Один противоречащий общий картине случай изменил оба вывода. Первая реакция — выяснить происхождение записи: единицы, импорт, реальный особый процесс. Удаление только потому, что знак неудобен, не является очисткой. Если случай допустим, анализ чувствительности с ним и без него нужно показать явно и объяснить, какую совокупность описывает каждый вариант.
Наконец, для x от −3 до 3 и y = x² оба коэффициента равны нулю. Зависимость при этом задана формулой без всякого шума. Слева значения убывают, справа растут, и направления компенсируются. Поэтому запрос «доказать отсутствие связи корреляцией» требует пересмотра: коэффициент проверяет определённую форму связи. График обнаруживает проблему быстрее, чем последовательный запуск десятка тестов на той же таблице.
| Данные | Пирсон | Спирмен |
|---|---|---|
| Восемь учебных пар | 0,9518 | 0,9524 |
| Степени двойки | 0,9058 | 1,0000 |
| Добавлен выброс | −0,2470 | 0,2500 |
| U-образная связь | 0 | 0 |
import numpy as np
from scipy import stats
x = np.arange(1, 7, dtype=float)
y = 2.0 ** x
for label, a, b in [("monotonic", x, y),
("outlier", np.r_[x, 7], np.r_[y, -100]),
("U shape", np.arange(-3, 4.), np.arange(-3, 4.)**2)]:
print(label, "Pearson", stats.pearsonr(a,b).statistic,
"Spearman", stats.spearmanr(a,b).statistic)Как проверить данные до расчёта
Сначала сформулируйте единицу: человек, визит, клиника или календарный день. Затем опишите правила попадания пары в таблицу. Обе величины должны относиться к согласованному периоду. Текущий балл и ожидание годичной давности формально образуют пару по идентификатору, но содержательно могут отвечать другому вопросу. Для продуктовой задачи аналогичная ошибка — соотнести расходы текущего месяца с выручкой накопленным итогом с начала жизни клиента.
Постройте диаграмму рассеяния с прозрачностью или небольшим визуальным смещением совпадающих точек. В исходном расчёте значения при этом не меняйте. Рассмотрите отдельные сегменты и диапазон измерений. Ограниченный диапазон может уменьшать корреляцию: связь среди всех посетителей и связь только среди участников с похожим исходным состоянием — разные параметры. Сравнивать их как показатели качества методики без описания отбора нельзя.
Если столбец постоянный, коэффициент не определён. Не заменяйте возвращённый NaN нулём: это разные сообщения. Ноль означает вычисленную оценку определённой связи, а NaN здесь указывает на отсутствие вариации, необходимой для формулы. В автоматическом отчёте лучше вывести «не рассчитывается: все значения одинаковы» и количество наблюдений, чем добавить ещё одну нейтральную ячейку в матрицу.
Много корреляций: как не выбрать случайную находку
Матрица показателей удобна для разведки, но каждая её ячейка может стать отдельной проверкой. Если вы просмотрели множество пар и вынесли в отчёт только наиболее убедительную, читатель не видит масштаба поиска. Заранее отделяйте основную гипотезу от исследовательских наблюдений; для набора подтверждающих проверок выбирайте подходящий контроль множественности. Новую найденную связь полезно проверить на независимых данных, сохранив прежнее определение признаков.
Не выбирайте сегмент только после того, как общий коэффициент оказался неудобным. Содержательно обоснованный разрез может раскрыть механизм, но его статус должен быть явным. Покажите общую картину и объясните, почему следующий анализ ограничен конкретной группой. Это помогает отличить уточнение вопроса от поиска красивого результата.
Пропуски и повторные измерения
Удаление строк с пропуском в одной из колонок меняет состав выборки. Если оценку дискомфорта чаще не заполняют люди с долгим ожиданием, корреляция полных пар может систематически отличаться от связи во всей группе. Покажите количество исходных строк, полных пар и причины отсутствия. Заполнение пропусков средним искусственно добавляет точки в центр и меняет совместный разброс; это не универсальный способ сохранить объём.
Для матрицы из многих показателей попарное удаление создаёт дополнительную ловушку: у каждой ячейки своё n и иногда своя популяция. Два похожих коэффициента могут относиться к разным участникам. Подпишите размеры пар или выберите единый аналитический набор, объяснив его ограничения. Если нужны множественная импутация или модель пропусков, это отдельный анализ с допущениями, которые нельзя заменить настройкой nan_policy.
Повторные измерения содержат два вопроса: отличаются ли люди между собой и меняется ли состояние конкретного человека со временем. Общая корреляция смешивает эти уровни. Усреднение по человеку может подойти для первого вопроса, но потеряет динамику второго. Для внутриличностной связи рассматривают соответствующие модели повторных наблюдений; просто увеличить n количеством визитов и оставить прежнюю формулу стандартной ошибки нельзя.
Перенос на продукт: активность и удержание
Замените ожидание числом действий в первую неделю, а балл — длительностью непрерывной подписки. Если все сроки уже известны и интересует порядок, Спирмен описывает, остаются ли более активные пользователи дольше. Тот же код примет два массива по одному значению на пользователя. Однако у недавно пришедших длительность ещё не завершена. Записать текущий возраст подписки как окончательное время ухода значит систематически укоротить новые наблюдения; здесь нужен анализ выживаемости.
Есть и временная утечка. Если в «первую неделю активности» попадают действия после события, которое вы пытаетесь предсказать, корреляция использует будущее. Зафиксируйте окно признака и начните окно результата после него. При этом пользователи, которые должны дожить до конца окна признака, составляют специально отобранную группу. Опишите эту границу: вывод об удержавшихся до конца недели нельзя автоматически распространить на всех зарегистрировавшихся.
Допустим, связь сохранилась после корректной сборки таблицы. Это основание исследовать механизм, но не обещание, что принудительное добавление действий повысит удержание. Мотивация пользователя может одновременно увеличивать активность и срок подписки. Для оценки изменения интерфейса нужен эксперимент или обоснованный причинный дизайн. Корреляционный анализ помогает сформулировать гипотезу и сегменты проверки, а не подменяет саму проверку воздействия.
Ошибки, которые меняют заключение
- Выбирать коэффициент по меньшему p после расчёта обоих. Последствие: процедура отбора результата скрыта, уровень ошибки не соответствует одному заранее выбранному тесту.
- Сортировать колонки независимо. Последствие: вы создаёте искусственную связь между чужими наблюдениями, даже если исходно её не было.
- Считать все визиты независимыми людьми. Последствие: уверенность завышается, а связь между людьми смешивается с изменениями внутри человека.
- Объявлять отсутствие зависимости при коэффициенте около нуля. Последствие: пропускаете U-образную форму и неоднородные сегменты с противоположными связями.
- Удалять неудобный выброс без проверки причины. Последствие: итог описывает вручную выбранную часть процесса, а не заявленную популяцию.
- Переносить корреляцию на эффект вмешательства. Последствие: продуктовая команда инвестирует в показатель, который может быть лишь следствием мотивации.
Как написать результат без преувеличения
В учебном отчёте достаточно сказать: «Для восьми синтетических независимых пар оценена положительная монотонная связь ожидания и балла: ρ Спирмена = 0,9524. Двусторонний полный перестановочный тест при обменяемости пар дал p = 0,001141. Данные сконструированы для демонстрации; причинное влияние ожидания не оценивалось». Для реального исследования добавьте способ формирования выборки, пропуски и интервал неопределённости, полученный подходящим методом.
Не навешивайте универсальные ярлыки «сильная» и «слабая» по одной таблице порогов. Практическая полезность зависит от точности измерений, диапазона, задачи прогнозирования и цены ошибки. Высокая связь может оказаться бесполезной, если признак недоступен в момент решения. Умеренная связь может быть полезна в сочетании с другими заранее выбранными признаками. Проверять прогностическую полезность следует на данных, не использованных для настройки.
Что почитать и что сделать дальше
Для перехода от механического запуска процедуры к проверке данных подойдёт обзор Ребровой. Если вопрос уже стал причинным, продолжите разбором корреляции и причинности; если мешает экстремальное наблюдение — материалом о выбросах. Эти тексты решают разные части одной задачи, поэтому порядок чтения определяет ваша проблема, а не величина полученного коэффициента.
Практическое упражнение: сохраните исходные пары, переставьте только одну колонку, затем сравните диаграммы и коэффициенты. После этого смените единицы измерения, не меняя порядок. Вы увидите разницу между разрушением соответствия наблюдений и безобидным масштабированием. Запишите эти действия рядом с расчётом: коллега должен суметь восстановить ваш путь без догадок о подготовке таблицы.
Материал образовательный: медицинские ситуации и данные условные. Он объясняет статистический метод и не содержит рекомендаций по диагностике или лечению.
Материалы по теме

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

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

Анализ выживаемости: Каплан — Мейер и удержание пользователей
Кривая Каплана — Мейера на условных данных: цензурирование, число под риском, Python с lifelines и удержание подписчиков без ошибки незрелых когорт.