Коэффициент корреляции пирсона python

Коэффициент корреляции пирсона python

Функция corrcoef() вычисляет коэфициент корреляции Пирсона (линейный коэфициент корреляции).

Данный коэфициент вычисляется по формуле:

Коэфициент корреляции находится в интервале [-1, 1].

Параметры: x — массив NumPy или подобный массиву объект. Входные данные в виде одномерного или двумерного массива, содержащего несколько выборок (случайных величин). Каждая строка в этом массиве представляет собой отдельную выборку (случайную переменную), а столбец отдельное наблюдение в каждой выборке. y — массив NumPy или подобный массиву объект (необязательный параметр). Дополнительный набор выборок, который имеет ту же форму что и m. rowvar — True или False (необязательный параметр). Если rowvar = True (по умолчанию это так), то каждой строке соответствует определенная выборка, а столбцу определенное наблюдение из этой выборки. Если параметр установлен в значение False, выполняется транспонирование массива, т.е. каждый столбец начинает соответсвовать выборкам, а каждая строка соответствующим наблюдениям из этих выборок. bias — . Начиная с версии 1.10.0 считается устаревшим и не используется. ddof — . Начиная с версии 1.10.0 считается устаревшим и не используется. Возвращает: результат — массив NumPy или число Матрица корреляционных коэфициентов для указанной выборки наблюдений.

Замечание

Параметры bias и ddof могут быть указаны, но они никак не влияют на вычисления. Это сделано для обратной совместимости и должно быть исправлено.

Из-за округления чисел с плавающей запятой при выполнении вычислений, возвращаемый массив может оказаться не эрмитовым (не симметричным), диагональные элементы могут оказаться отличны от 1, а прочие элементы матрицы могут выходить за пределы интервала [-1, 1]. Если входные данные представлены комплексными числами, то действительная и мнимая часть элементов результирующей матрицы, обрезается до допустимого интервала [-1, 1].

Примеры

Сгенерируем какие-нибудь случайные данные, которые будут имитировать два набора наблюдений:

Для наглядности изобразим каждую точку наблдений на графике разброса:

Теперь вычислим коофициент корреляции данных величин:

Как видим данные величины очень сильно коррелируют, о чем говорит близкое к 1 значение коэфициента, к тому же они обе возрастают, о чем говорит положительное значение коэфициента.

Я ищу функцию, которая принимает в качестве входных данных два списка и возвращает корреляцию Пирсона и значение корреляции.

Вы можете посмотреть scipy.stats :

Корреляция Пирсона может быть рассчитана с помощью numpy corrcoef .

Если вам не хочется устанавливать scipy, я использовал этот быстрый хак, слегка модифицированный Программирование коллективного интеллекта:

(Отредактировано для правильности.)

Альтернативой может быть встроенная функция scipy из linregress, которая вычисляет:

перехват: перехват линии регрессии

r-значение: коэффициент корреляции

p-значение: двухстороннее p-значение для теста гипотезы, нулевой гипотезой которого является то, что наклон равен нулю

Читайте также:  Как составлять майнд карты

stderr: стандартная ошибка оценки

Следующий код представляет собой прямолинейную интерпретацию определения:

Это согласуется с Excel, этот калькулятор, SciPy (также NumPy), которые возвращают 0.981980506 и 0.9819805060619657, и 0.98198050606196574 соответственно.

EDIT: исправлена ​​ошибка, отмеченная комментатором.

Вместо того, чтобы полагаться на numpy/scipy, я думаю, что мой ответ должен быть самым простым для кода и понять шаги при вычислении коэффициента корреляции Пирсона (PCC).

Значение PCC в основном показывает вам, как сильно коррелирует две переменные/списки. Важно отметить, что значение PCC составляет от -1 до 1. Значение от 0 до 1 означает положительную корреляцию. Значение 0 = наибольшая вариация (без корреляции). Значение от -1 до 0 означает отрицательную корреляцию.

Хм, многие из этих ответов долго и трудно читать код.

Я предлагаю использовать numpy с его отличными функциями при работе с массивами:

Вы можете сделать это с помощью pandas.DataFrame.corr :

Вот реализация корреляции pearson, основанная на разреженном векторе. Здесь векторы выражаются в виде списка кортежей, выраженных как (индекс, значение). Два разреженных вектора могут иметь разную длину, но по всему размеру вектора должны быть одинаковыми. Это полезно для приложений для интеллектуального анализа текста, где размер вектора чрезвычайно велик из-за того, что большинство функций являются мешками слов, и, следовательно, вычисления обычно выполняются с использованием разреженных векторов.

0 1307 non-null object
1 0 non-null float64
2 0 non-null float64
3 1306 non-null object
.
17 1500 non-null int64

1 2 4 7 8 11 13 15 16
count 0 0 0 0 1500.000000 0 1500 1497.000000 1497.00
mean NaN NaN NaN NaN 1.852667 NaN 2 52300.977288 2967182.03
std NaN NaN NaN NaN 0.837911 NaN 0 19574.930119 1710899.18
min NaN NaN NaN NaN 1.000000 NaN 2 33.000000 2500.00
25% NaN NaN NaN NaN 1.000000 NaN 2 46400.000000 1850000.00
50% NaN NaN NaN NaN 2.000000 NaN 2 55000.000000 2950000.00
75% NaN NaN NaN NaN 2.000000 NaN 2 62500.000000 3480000.00
max NaN NaN NaN NaN 4.000000 NaN 2 93650.000000 10500000.00

17
count 1500.000000
mean 10.500000
std 5.768204
min 1.000000
25% 5.750000
50% 10.500000
75% 15.250000
max 20.000000

Создание объекта DataFrame из списков

Обработка данных

Графическое представление данных

Несколько диаграмм на одном рисунке doc

Пример

После того, как данные представленны графически, проверим несколько статистических гипотез.

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

Читайте также:  Как включить навигатор explay

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

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

Помимо этого, одни критерии (или их варианты) применимы для зависимых, а другие для независимых выборок.
Зависимые выборки — это те где одному объекту из первой выборки соответствует обхект из второй. Стало быть выборки должны иметь один и тот же объём.
Например близнецов можно рахбить на две выборки. У каждого близнеца будет ровно один брат (или сетра) в другой выборке. Причём не любой брат, а именно его брат.
Другой пример зависимых выборок — рост людей в 20 и в 30 лет. Здесь человеку ставится в соответствие он же сам.

Для независимых выборок нельзя сказать, что именно этому объекту из первой ыборки соответствует именно из второй. Пример с кошками как раз представляет собой две независимые выборки.

Проверим гипотезу о равенстве средних используя t-критерий Стьюдента. (Притворимся что выборки имеют нормальное распределение).
Нулевая гипотеза здесь (как и во многих похожих тестах) следующая: математические ожидания равны. Если точнее, то равны именно математические ожидания генеральныз совокупностей из которых сделаны выборки. Ведь выборочные мат.ожидания мы и без критериев сравнить можем.

from scipy.stats import *

В результате нам интересно p-value. Оно здесь заметно больше всякого разумного уровня значимости (например 0.05) поэтому оснований для отклонения нулевой гипотезы нет: матожидания генеральных совокупностей равны.

Другие статистические критерии для проверки равенства средних:

Читайте также:  Блок питания atx400r схема

Вычисление коэффициента корреляции Пирсона и проверка его значимости.
Коэффициент корреляции Пирсона (лиейный коэффициент корреляции) описывает силу линейной зависимости между двумя случайными величинами. Он принимает значения в отрезке от 1 до -1. Значение к.к. Пирсона близкое к нулю говорит об отсутствии (слабой зависимости) линейной зависимости между случайными величинами. Значение близкое по модулю к еденице, наоборот говорит о сильной линейной зависимости. Стоит отметить, что случайные величины могут быть связаны ещё и нелинейной зависимостью, тогда к.к. Пирсона здесь плохой помошник. Кроме того, вычисляя к.к. по выборке можно совершенно случайно получить то или иное значение к.к., поэтому имеет смысл оперировать ещё и степенью уверенности для этого значения. В математической статистике для этого служит p-value — вероятность получить такое или ещё более выраженное значение случайно. На практике, особенно при небольших объемах выборки нулевого p-value добится не получается, поэтому довольствуются некоторыми малыми вероятностями того, что величниа (в нашем случае к.к) получена не случайно. Обычно, в соответствии с принципом практической невозможности маловероятных событий, принимают допустимую вероятность ошибки в 0.05 или 0.01. Однако стоит обратить внимание на то, что при многократном извлечении выборки и вычислении параметра, можно получить желаемое значение параметра совершенно случайно.

В итоге имем значение к.к. r= 0.49
p-vlue = 0.000013 scipy.stats.uniforn — равномерное распределение
scipy.stats.norm — нормальное распределение
scipy.stats.t — распределение Стьюдента (t-распределение)
scipy.stats.poisson — распределение Пуассона

Эти классы имеют схожие методы для генерирования случайных значений — rvs .

Генерирование одного значения СВ распределённой по стандартному нормальному закону:
scipy.stats.norm.rvs()

Различия в вызове функции rvs для каждого подмодуля — это различия в параметрах распределений.
Например равномерное распределение (uniform) имеет два параметра определяющие минимальное и максимальное значение СВ.
Нормальное распределение имеет тоже два параметра, но это математическое ожидание и стандартное отклонение.

функция rvs имеет три параметра которые и задают параметры распределения эти параметры loc, shape, scale
какие из этих трёх параметров нужно задавать и какой смысл они имеют напиcано в документации к подмодулю

параметры указываются так:
scipy.stats.norm.rvs(loc = 12.2)
Для параметра shape приводится просто число:
scipy.stats.norm.rvs(5.72)

Пример

help( scipy.stats.norm )

The location (loc) keyword specifies the mean.
The scale (scale) keyword specifies the standard deviation.

loc — это математическое ожидание
sсale — стандартное отклонение

Отдельным параметром size задаётся количество значений СВ которые нужно сгенерировать.

Создание 100 значений нормально распределённой случайной величины с математическим лжиданием 4 и стандартным отклонением 7.

Ссылка на основную публикацию
Adblock detector