Как интерпретировать этот тупой вывод corrcoef - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь вычислить корреляцию между двумя временными рядами.Я попробовал приведенный ниже код

time1 = np.arange(0,1000,1).reshape((-1,1))
slope1 = 15
slope2 = 3
amp=1000

line1 = time1*slope1+amp
line2=time1*(0.5)+amp/10

corr=np.corrcoef(x=line1,y=line2,rowvar = False)

Вывод был

corr = [[1. 1.][1. 1.]]

Я ожидал, что корреляция будет намного меньше 1, так как наклон двух линий различен.Почему корреляция показана как 1?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Если вы имеете в виду корреляцию, как в R ^ 2 Excel, вы можете использовать что-то вроде этого (уже сделал это для моей работы):

def correlation(Measure, Fit):
    """Calculates the correlation coefficient R^2 between the two sets
       of Y data provided. Logically, in order for the result to have a sense
       you want both Y arrays to have been created from the same X array."""

    Mean = np.mean(Measure)
    s1 = 0
    s2 = 0
    Size = np.size(Measure) # identical to np.size(Fit)

    for i in range(0, Size):
        s1 += (Measure[i] - Fit[i]) ** 2
        s2 += (Measure[i] - Mean) ** 2
    Rsquare = 1 - s1/s2
    return Rsquare

И я удалил их для удобства чтения, но вы можетеокружите это различными мерами предосторожности и сообщениями об ошибках, например, когда оба массива не имеют одинаковый размер или содержат NAN.

Редактировать: используемая формула взята из статьи о коэффициенте определения в Википедии.enter image description here

0 голосов
/ 26 сентября 2018

Хотя наклон сильно отличается, вы можете думать о корреляции как о чем-то, что игнорирует масштаб и ищет направление движения.Когда одна из ваших переменных возрастает на величину x1, другая увеличивается на величину x1*k, где k - постоянная величина, поэтому они идеально коррелируют (они всегда ведут себя одинаково по отношению друг к другу).

...