Notas de aula - Autocorrelação
Copyright OpenScience © 2018.

- by Batystuta Rocha, 30 Nov, 2018.

Versão 1.0 novembro 2018.

Introdução: significa a correlação cruzada de um sinal com o ele próprio. É uma ferramenta matemática para encontrar padrões de repetição, tal como a presença de um sinal periódico obscurecidos pelo ruído, ou para identificar a frequência fundamental em falta num sinal implícita pelas suas frequências harmónicas. É frequentemente utilizada no processamento de sinais para a análise de funções ou série de valores, como por exemplo sinais no domínio do tempo. Apesar de ser um fenômeno típico de séries temporais, pode também ocorrer em dados do tipo cross-section, entretanto neste tipo de dado a disposição das informações deve apresentar alguma lógica ou interesse científico para que possamos compreender qualquer decisão sobre a presença ou não de autocorrelação.

Visando tornar o processo mais claro, usarei alguns passos para a nossa Autocorrelação em Python:

1. Importação das Bibliotecas:

In [1]:
%matplotlib inline

from __future__ import print_function
import csv
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats.stats import pearsonr

2. Declaração da variável tempo (t) e da variável em análise (y):

In [2]:
t = []
y = []

3. Leitura do arquivo '.txt' com os dados:

Aqui o aqrquivo '.txt' está com os dados em colunas, onde a 1a é o tempo e a 2a o dado físico.

0.0 1.399
0.1 1.990
0.2 1.317
0.3 0.811
0.4 1.550
... ...
... ...
3.0 1.425
3.1 1.718
3.2 1.188

A leitura do arquivo é feita pelo comando 'open' do próprio Python e leitura de linha por linha pela biblioteca 'csv', onde é especificado que os dados estão delimitado por um espaço.
In [3]:
with open('Dados_Correlação.txt', newline='') as inputfile:
    for row in csv.reader(inputfile, delimiter=' '):
        t.append(float(row[0]))
        y.append(float(row[1]))

4. Obtenção dos valores flutuantes através da diferencia do valor registrado 'y' com a sua média:

Observação: sendo utilizando aqui o comando 'mean' da biblioteca numpy.

Propriedade descritiva do dado calculado primeiro é o valor médio: $$\large \overline{y}=\frac{1}{N}\sum_{n=1}^{N}y_{n}$$

Propriedade em seguida são os valores flutuantes: $$\large y_{flutuante}=y-\overline{y}$$

In [4]:
y = y - np.mean(y)

5. Função que calcula a Autocorrelação:

Aqui é feita a correlação cruzada dos dados com ele próprio e no loop seguinte sendo refeita com uma defasagem posterior no tempo.
In [5]:
def correlacao_vetor(vetor_1, vetor_2):

    correlacao = []

    if len(vetor_1) == len(vetor_2):
        cont = len(vetor_1)
        for i in range(cont-3):
            aux = pearsonr(vetor_1, vetor_2)
            # print(np.corrcoef(vetor_1,vetor_2))
            # print(aux)
            correlacao.append(float(aux[0]))
            vetor_1 = vetor_1[:(len(vetor_1) - 1)]
            vetor_2 = vetor_2[1:]

    return correlacao

Aqui estou plotando os resultados em um gráfico para uma análise visual e também para uma comparação com um sinal harmônico.

In [6]:
t2 = np.arange(0, t[len(t)-3], 0.01)
yt2 = 0.6*np.cos(3*np.pi*(t2/0.5))

plt.plot(t[:(len(t)-3)],correlacao_vetor(y,y), t2, yt2, '-')
plt.show()
/*# sourceMappingURL=style.min.css.map */