Вычисление коэффициента корреляции Пирсона в Python с помощью Numpy
В этой статье мы рассмотрим теорию корреляции Пирсона, а также примеры сильных положительных и отрицательных корреляций, используя Python, Numpy и Matplotlib.
- Автор записи
Вычисление коэффициента корреляции Пирсона в Python с помощью Numpy
Вступление
Эта статья представляет собой введение в коэффициент корреляции Пирсона , его ручное вычисление и вычисление с помощью модуля Python numpy .
Коэффициент корреляции Пирсона измеряет линейную связь между переменными. Его значение можно интерпретировать следующим образом:
- +1 – Полная положительная корреляция
- +0.8 – Сильная положительная корреляция
- +0.6 – Умеренная положительная корреляция
- 0 – никакой корреляции вообще
- -0,6 – Умеренная отрицательная корреляция
- -0,8 – Сильная отрицательная корреляция
- -1 – Полная отрицательная корреляция
Проиллюстрируем, как изменяется коэффициент корреляции при различных типах ассоциаций. В этой статье мы также покажем, что нулевая корреляция не всегда означает нулевые ассоциации . Нелинейно связанные переменные могут иметь коэффициенты корреляции, близкие к нулю.
Что такое Коэффициент Корреляции Пирсона?
Коэффициент корреляции Пирсона также известен как Коэффициент корреляции Произведение Пирсона-Момент . Это мера линейной зависимости между двумя случайными величинами – X и Y . Математически, если ( σXY ) – ковариация между X и Y , а ( σX ) – стандартное отклонение X , то коэффициент корреляции Пирсона ρ задается формулой:
Поскольку ковариация всегда меньше произведения индивидуальных стандартных отклонений, значение ρ изменяется между -1 и +1 . Из вышесказанного видно также, что корреляция переменной с самой собой равна единице:
Как вычисляется коэффициент корреляции Пирсона?
Предположим, что нам даны некоторые наблюдения случайных величин X и Y . Если вы планируете реализовать все с нуля или сделать некоторые ручные вычисления, то вам нужно следующее, когда заданы X и Y :
Давайте воспользуемся вышеизложенным для вычисления корреляции. Мы будем использовать предвзятую оценку ковариации и стандартных отклонений. Это не повлияет на значение вычисляемого коэффициента корреляции, так как количество наблюдений отменяется в числителе и знаменателе:
Коэффициент корреляции Пирсона в Python с использованием Numpy
Коэффициент корреляции Пирсона можно вычислить в Python с помощью метода corrcoef() из Numpy.
Входными данными для этой функции обычно является матрица, скажем, размера mxn , где:
- Каждый столбец представляет значения случайной величины
- Каждая строка представляет собой одну выборку n случайных величин
- n представляет общее число различных случайных величин
- m представляет общее количество выборок для каждой переменной
Для n случайных величин он возвращает nxn квадратную матрицу M , причем M(i,j) указывает коэффициент корреляции между случайной величиной i и j . Поскольку коэффициент корреляции между переменной и самой собой равен 1, все диагональные записи (i,i) равны единице.
Во-первых, давайте импортируем модуль numpy вместе с модулем pyplot из Matplotlib. Позже мы будем использовать Matplotlib для визуализации корреляции:
Мы будем использовать те же значения из предыдущего ручного примера. Давайте сохраним это в x_simple и вычислим корреляционную матрицу:
Ниже приведена выходная корреляционная матрица. Обратите внимание на диагонали, указывающие на то, что коэффициент корреляции переменной с самой собой равен единице:
Примеры положительной и отрицательной корреляции
Давайте визуализируем коэффициенты корреляции для нескольких взаимосвязей. Во-первых, у нас будет полная положительная (+1) и полная отрицательная (-1) корреляция между двумя переменными. Затем мы сгенерируем две случайные величины, так что коэффициент корреляции непременно должен быть близок к нулю, если только случайность случайно не имеет какой-то корреляции, что крайне маловероятно.
Мы будем использовать seed , чтобы этот пример можно было повторить при вызове Random State из Numpy:
Первый вызов rand.uniform() генерирует случайное равномерное распределение:
Затем мы можем вызвать vstack () , чтобы вертикально сложить в него другие массивы. Таким образом, мы можем сложить кучу переменных, подобных приведенным выше, в одну и ту же ссылку x и обращаться к ним последовательно.
После первого равномерного распределения мы сложили несколько наборов переменных вертикально – второй имеет полную положительную корреляцию с первым, третий имеет полную отрицательную корреляцию с первым, а четвертый полностью случайный, поэтому он должен иметь корреляцию
Когда у нас есть одна ссылка x , подобная этой, мы можем вычислить корреляцию для каждого из элементов в вертикальном стеке, передав ее отдельно в np.corrcoef() :
Понимание изменений коэффициента корреляции Пирсона
Просто чтобы увидеть, как изменяется коэффициент корреляции с изменением отношения между двумя переменными, давайте добавим некоторый случайный шум к матрице x , сгенерированной в предыдущем разделе, и повторно запустим код.
В этом примере мы будем медленно добавлять различные степени шума к корреляционным диаграммам и вычислять коэффициенты корреляции на каждом шаге:
Общая ловушка: Ассоциации без корреляции
Существует распространенное заблуждение, что нулевая корреляция не подразумевает никакой ассоциации. Поясним, что корреляция строго измеряет линейную связь между двумя переменными.
Приведенные ниже примеры показывают переменные, которые нелинейно связаны друг с другом, но имеют нулевую корреляцию.
Последний пример x ) имеет коэффициент корреляции около 0,52, что опять же не является отражением истинной связи между двумя переменными:
Выводы
В этой статье мы обсуждали коэффициент корреляции Пирсона. Мы использовали метод corrcoef() из модуля Python numpy для вычисления его значения.
Если случайные величины имеют высокие линейные ассоциации, то их коэффициент корреляции близок к +1 или -1. С другой стороны, статистически независимые переменные имеют коэффициенты корреляции, близкие к нулю.
Мы также показали, что нелинейные ассоциации могут иметь коэффициент корреляции нулевой или близкий к нулю, подразумевая, что переменные, имеющие высокие ассоциации, могут не иметь высокого значения коэффициента корреляции Пирсона.
Как вычислить непараметрическую ранговую корреляцию в Python
Корреляция является мерой связи между двумя переменными.
Легко рассчитать и интерпретировать, когда обе переменные имеют хорошо понятное распределение Гаусса. Когда мы не знаем распределение переменных, мы должны использовать непараметрические методы ранговой корреляции.
В этом руководстве вы найдете методы ранговой корреляции для количественной оценки связи между переменными с негауссовым распределением.
После завершения этого урока вы узнаете:
- Как работают методы ранговой корреляции и какие методы доступны.
- Как рассчитать и интерпретировать ранговый коэффициент корреляции Спирмена в Python.
- Как рассчитать и интерпретировать ранговый коэффициент корреляции Кендалла в Python.
Обзор учебника
Этот урок разделен на 4 части; они есть:
- Ранговая корреляция
- Тестовый набор данных
- Ранговая корреляция Спирмена
- Ранговая корреляция Кендалла
Ранговая корреляция
Корреляция относится к ассоциации между наблюдаемыми значениями двух переменных.
Переменные могут иметь положительную связь, что означает, что при увеличении значений для одной переменной значения другой переменной также увеличиваются. Ассоциация также может быть отрицательной, что означает, что при увеличении значений одной переменной значения других уменьшаются. Наконец, ассоциация может быть нейтральной, что означает, что переменные не связаны.
Корреляция количественно определяет эту связь, часто в качестве меры между значениями от -1 до 1 для совершенно отрицательно и совершенно положительно коррелированных. Рассчитанная корреляция называется «коэффициент корреляции. »Этот коэффициент корреляции затем можно интерпретировать для описания мер.
См. Таблицу ниже, чтобы помочь с интерпретацией коэффициента корреляции.
Корреляция между двумя переменными, каждая из которых имеет гауссово распределение, может быть рассчитана с использованием стандартных методов, таких как корреляция Пирсона. Эту процедуру нельзя использовать для данных, которые не имеют гауссовского распределения. Вместо этого должны использоваться методы ранговой корреляции.
Ранговая корреляцияотносится к методам, которые определяют количество между переменными, используя порядковые отношения между значениями, а не конкретные значения. Порядковые данные — это данные, которые имеют значения меток и имеют отношение порядка или ранга; например: ‘низкий‘,‘Средняя‘, а также ‘высоко«.
Ранговая корреляция может быть рассчитана для вещественных переменных. Это делается путем предварительного преобразования значений для каждой переменной в данные ранга. Здесь значения упорядочены и им присвоено целочисленное значение ранга. Затем можно рассчитать ранговые коэффициенты корреляции для количественной оценки связи между двумя ранжированными переменными.
Поскольку распределение значений не предполагается, методы ранговой корреляции называются корреляцией без распределения или непараметрической корреляцией. Интересно, что меры ранговой корреляции часто используются в качестве основы для других тестов статистической гипотезы, таких как определение того, были ли две выборки, вероятно, взяты из одинаковых (или разных) распределений населения.
Методы ранговой корреляции часто называют в честь исследователя или исследователей, которые разработали метод. Вот четыре примера методов ранговой корреляции:
- Ранговая корреляция Спирмена.
- Ранговая корреляция Кендалла.
- Ранговая корреляция Гудмана и Крускала.
- Ранговая корреляция Сомерса.
В следующих разделах мы подробнее рассмотрим два наиболее распространенных метода ранговой корреляции: метод Спирмена и Кендалла.
Тестовый набор данных
Прежде чем продемонстрировать методы ранговой корреляции, мы должны сначала определить тестовую задачу.
В этом разделе мы определим простой набор данных из двух переменных, где каждая переменная берется из равномерного распределения (например, негауссова), а значения второй переменной зависят от значений первого значения.
В частности, выборка из 1000 случайных значений с плавающей запятой берется из равномерного распределения и масштабируется до диапазона от 0 до 20. Вторая выборка из 1000 случайных значений с плавающей запятой берется из равномерного распределения между 0 и 10 и добавляется к значениям в Первый образец для создания ассоциации.
Полный пример приведен ниже.
Выполнение примера создает образец данных и отображает точки на точечной диаграмме.
Мы можем ясно видеть, что каждая переменная имеет равномерное распределение, и положительная ассоциация между переменными видна по диагональной группировке точек от левого нижнего до правого верхнего угла графика.
Ранговая корреляция Спирмена
Ранг корреляции Спирменаназван в честь Чарльза Спирмена.
Это также можно назвать коэффициентом корреляции Спирмена и обозначается строчной греческой буквой rho (p) Как таковой, это может упоминаться как ро Спирмена.
Этот статистический метод количественно определяет степень, в которой ранжированные переменные связаны монотонной функцией, что означает увеличение или уменьшение отношения. В качестве теста статистической гипотезы метод предполагает, что выборки некоррелированы (не отбрасывают H0).
Ранговая корреляция Спирмена — это статистическая процедура, предназначенная для измерения взаимосвязи между двумя переменными по порядковой шкале измерения.
Интуиция для ранговой корреляции Спирмена состоит в том, что он вычисляет корреляцию Пирсона (например, параметрическую меру корреляции), используя ранговые значения вместо реальных значений. Где корреляция Пирсона — это расчет ковариации (или ожидаемой разницы наблюдений от среднего) между двумя переменными, нормализованными по дисперсии или разбросу обеих переменных.
Ранговая корреляция Спирмена может быть рассчитана в Python с помощьюspearmanr () функция SciPy,
Функция принимает две действительные выборки в качестве аргументов и возвращает как коэффициент корреляции в диапазоне от -1 до 1, так и значение p для интерпретации значимости коэффициента.
Мы можем продемонстрировать ранговую корреляцию Спирмена на тестовом наборе данных. Мы знаем, что существует сильная связь между переменными в наборе данных, и мы ожидаем, что тест Спирмена найдет эту связь.
Полный пример приведен ниже.
При выполнении примера вычисляется коэффициент корреляции Спирмена между двумя переменными в наборе тестовых данных.
Статистический тест сообщает о сильной положительной корреляции со значением 0,9. Значение p близко к нулю, что означает, что вероятность наблюдения данных при условии, что образцы не коррелированы, очень маловероятна (например, 95% достоверность), и что мы можем отвергнуть нулевую гипотезу, что образцы не коррелированы.
Ранговая корреляция Кендалла
Ранг корреляции Кендалланазван в честь Мориса Кендалла.
Его также называют коэффициентом корреляции Кендалла, и этот коэффициент часто обозначается строчной греческой буквой тау (t). В свою очередь, тест можно назвать тау Кендалла.
Интуиция для теста состоит в том, что он вычисляет нормированную оценку для числа совпадающих или согласованных ранжирований между двумя выборками. Таким образом, этот тест также называется тестом соответствия Кендалла.
Ранговый коэффициент корреляции Кендалла может быть рассчитан в Python с использованиемфункция кендаллтау () SciPy, Тест берет две выборки данных в качестве аргументов и возвращает коэффициент корреляции и значение p. В качестве теста статистической гипотезы метод предполагает (H0), что нет никакой связи между двумя выборками.
Мы можем продемонстрировать расчет на тестовом наборе данных, где мы ожидаем, что будет сообщено о существенной положительной связи.
Полный пример приведен ниже.
При выполнении примера вычисляется коэффициент корреляции Кендалла как 0,7, что сильно коррелирует.
Значение p близко к нулю (и печатается как ноль), как и в тесте Спирмена, что означает, что мы можем уверенно отвергнуть нулевую гипотезу о том, что выборки некоррелированы.
расширения
В этом разделе перечислены некоторые идеи по расширению учебника, которые вы, возможно, захотите изучить.
- Перечислите три примера, в которых вычисление непараметрического коэффициента корреляции может быть полезным во время проекта машинного обучения.
- Обновите каждый пример, чтобы вычислить корреляцию между некоррелированными выборками данных, взятыми из негауссова распределения.
- Загрузите стандартный набор данных машинного обучения и рассчитайте попарную непараметрическую корреляцию между всеми переменными.
Если вы исследуете какое-либо из этих расширений, я хотел бы знать.
Дальнейшее чтение
Этот раздел предоставляет больше ресурсов по теме, если вы хотите углубиться.
книги
- , 2009. Четвертое издание, 2007. 1990
статьи
Резюме
В этом уроке вы обнаружили методы ранговой корреляции для количественной оценки ассоциации между переменными с негауссовым распределением.
В частности, вы узнали:
- Как работают методы ранговой корреляции и какие методы доступны
- Как рассчитать и интерпретировать ранговый коэффициент корреляции Спирмена в Python.
- Как рассчитать и интерпретировать ранговый коэффициент корреляции Кендалла в Python.
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.
Изучение корреляции в Python
Эта статья призвана дать лучшее понимание очень важного метода многомерного исследования.
Корреляционная матрица — это в основном ковариационная матрица. Также известен как автоковариационная матрица, дисперсионная матрица, дисперсионная матрица или дисперсионно-ковариационная матрица. Это матрица, в которой позиция ij определяет корреляцию между i- м и j- м параметром данного набора данных.
Когда точки данных следуют приблизительно по прямой линии, переменные, как говорят, имеют приблизительно линейную зависимость. В некоторых случаях точки данных располагаются близко к прямой линии, но чаще наблюдается небольшая изменчивость точек вокруг прямой линии. Сводная мера, называемая корреляцией, описывает силу линейной ассоциации. Корреляция суммирует силу и направление линейной (прямой) связи между двумя количественными переменными. Обозначается r , принимает значения от -1 до +1. Положительное значение для r указывает на положительную связь, а отрицательное значение для r указывает на отрицательную связь.
Чем ближе r к 1, тем ближе точки данных падают на прямую линию, таким образом, линейная ассоциация сильнее. Чем ближе r к 0, тем слабее линейная ассоциация.
Чтобы получить ссылку на House_price Data, нажмите здесь .
Загрузка библиотек
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import norm
Загрузка данных
data = pd.read_csv( «House Price.csv» )
Выход:
«Цена продажи» Описание
data[ ‘SalePrice’ ].describe()
Выход:
Гистограмма
plt.figure(figsize = ( 9 , 5 ))
data[ ‘SalePrice’ ].plot(kind = «hist» )
Выход:
Код № 1: Матрица корреляции
f, ax = plt.subplots(figsize = ( 9 , 8 ))
sns.heatmap(corrmat, ax = ax, cmap = «YlGnBu» , linewidths = 0.1 )
Выход:
Код № 2: матрица корреляции сетки
cg = sns.clustermap(corrmat, cmap = «YlGnBu» , linewidths = 0.1 );
plt.setp(cg.ax_heatmap.yaxis.get_majorticklabels(), rotation = 0 )
Выход:
Код № 3: соотношение для Saleprice
# Saleprice корреляционная матрица
# k: количество переменных для тепловой карты
Корреляция в Python
Корреляция
Добрый вечер, в приложении задание в эксель (решенный вариант), цветом залиты те столбци и.
Корреляция
Помогите решить проблему — хочу посчитать коэффициент автокорреляции сигнала "на лету", то есть по.
корреляция
M(xy)*MxMy вычислить корреляцию для дискретного и непрерывного случая.. помогите пож..срочно надо
Свертка и корреляция
Доброго времени суток! Как посчитать свертку и корреляцию следующих функций y(x)=cos(5x).