Автокорреляция: применение автокорреляции на нескольких рядах - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу найти автокорреляцию ряда чисел с лагом 1,2, ... N

В этом примере у меня есть 56 чисел и N = 20.

Так что яесть файл с первыми 56 столбцами, которые являются случайными числами.От столбца 57 до столбца 77 у меня автокорреляция с лагом 1,2 ... 20.Допустим, я загружаю только в столбце 1-56.В этом примере у меня есть только одна строка, но это также может быть несколько строк.

Таким образом, цель состоит в том, чтобы получить этот результат:

result

Я сейчас сделал это в Excel, но как я могу сделать это вPython?А также: что если у меня несколько рядов;Как я могу сделать это на нескольких строках?

Я нашел этот код, и это хорошее начало, я думаю.

import numpy
def acf(series):
    n = len(series)
    data = numpy.asarray(series)
    mean = numpy.mean(data)
    c0 = numpy.sum((data - mean) ** 2) / float(n)

def r(h):
    acf_lag = ((data[:n - h] - mean) * (data[h:] - mean)).sum() / float(n) / 
    c0
    return round(acf_lag, 3)
x = numpy.arange(n) # Avoiding lag 0 calculation
acf_coeffs = map(r, x)
return acf_coeffs

В первой функции указано «n» число чисел;в моем примере это «56», а переменная «data» - это просто первые 56 столбцов.с0 - знаменатель формулы автокорреляции.

Теперь я вижу, что h - это число лагов.Так что в моем примере с 1 по 20. acf_lag - это фактическая формула автокорреляции, так что все выглядит хорошо.

С чем я борюсь, так это то, как я могу написать строку кода, в которой я применяю это к моему фрейму данных, чтобы получить желаемый результат ??

Оценивая каждую помощь!

Обновление:

Я пытался не определять функцию "acf", но объявить все это как отдельную переменную:

n = len(df.columns)-20
data = df.iloc[:,:56]
mean = data.mean(axis=1)
c0 = np.sum((data - mean) ** 2) / float(n)

Может быть, я могу определить r (h) функционировать потом.Но c0 дает мне ноль для каждых 56 столбцов, в то время как он должен извлекать среднее значение из каждого столбца (от 1 до 56).Это не происходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...