Как определить коэффициент корреляции в Python? - PullRequest
0 голосов
/ 06 июня 2018

Уравнение, с которым я работаю, выглядит следующим образом:

enter image description here

В описании сказано, что x-bar и y-bar являются среднимимассива 1 и массива 2. Минимальный коэффициент равен 0,3.

Причина, по которой я спрашиваю, заключается в том, что я не слишком знаком с чтением статистических уравнений, не говоря уже о том, чтобы реализовывать их в Python ...

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Проще всего было бы использовать scipy.stats (см. здесь )

import numpy as np
from scipy.stats.stats import pearsonr

x = np.random.random(20)
y = np.random.random(20)

print(pearsonr(x, y))

Это даст вам два значения, корреляцию и значение p.

Вы можете реализовать это самостоятельно так:

x = np.random.random(20)
y = np.random.random(20)
x_bar = np.mean(x)
y_bar = np.mean(y)

top = np.sum((x - x_bar) * (y - y_bar))
bot = np.sqrt(np.sum(np.power(x - x_bar, 2)) * np.sum(np.power(y - y_bar, 2)))

print(top/bot)

Оба дают одинаковый результат, удачи!

0 голосов
/ 06 июня 2018

Простая реализация с использованием циклов for будет иметь вид:

import math

def correlation(x, y):
    x_bar = sum(x) / len(x)
    y_bar = sum(y) / len(y)

    var_x = sum((x_i - x_bar)**2 for x_i in x)
    var_y = sum((y_i - y_bar)**2 for y_i in y)

    assert len(x) == len(y)
    numerator = sum((x_i - x_bar) * (y_i - y_bar) for x_i, y_i in zip(x, y))
    denominator = math.sqrt(var_x * var_y)
    return numerator / denominator

if __name__ == "__main__":
    x = [...]
    y = [...]
    print(correlation(x, y))

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

import numpy as np

if __name__ == "__main__":
    x = np.array([...])
    y = np.array([...])
    print(np.corrcoef(x, y)[0, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...