Considere um vetor unidimensional e com valor real x que representa observações de algum processo medido em intervalos igualmente espaçados ao longo do tempo. Chamamos x de uma série temporal .
Vamos n denotar o comprimento de X e X denotam a média aritmética dos x . A função de autocovariância de amostra é definida como
para todos - n < h < n . Isso mede a dependência linear entre dois pontos da mesma série observada em momentos diferentes.
A função de autocorrelação de amostra , ou ACF, é definida como
Isso mede a previsibilidade linear da série x no tempo t , que denotamos x t , usando apenas o valor x t + h .
Observe que essas estimativas amostrais não correspondem aos cálculos ingênuos com base nas propriedades teóricas. Ou seja, a função de autocorrelação da amostra não é igual ao coeficiente de correlação de Pearson de x com o intervalo h- passo de x .
Tarefa
Dada uma matriz x e um número inteiro não negativo h , imprima ou retorne as primeiras autocorrelações h +1 de atraso de x , começando com o lag 0. As autocorrelações de atraso são aquelas que correspondem a entradas negativas nas fórmulas acima.
Você pode assumir que 0 < h < n , onde n é o comprimento de x , e que 2 < n <256.
A saída deve estar correta dentro de 1E-4. Não há restrições quanto ao uso de funções internas ou ao tempo de execução.
Exemplos
h, x -> output
--------------
5, [2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2] -> [1.00000000, 0.07659298, -0.06007802, -0.51144343, -0.02912874, -0.10468140]
1, [2134, 1863, 1877, 1877, 1492, 1249] -> [1.0000000, 0.3343041]
2, [13067.3, 13130.5, 13198.4] -> [1.0000000000, -0.0002854906, -0.4997145094]
fonte
Python 3,
147130126120 bytesEsta solução provavelmente vai ser jogada ainda mais, é apenas um começo.
Você pode chamá-lo com:
fonte
MATL , 20 bytes
EDIT (20 de maio de 2016): a partir da versão 18.0.0 do idioma, use em
Y+
vez deX+
. O link inclui essa alteração.Experimente online!
A correlação está intimamente relacionada à convolução. Normalizamos subtraindo a média e, em seguida, envolvemos, normalizamos novamente dividindo pelo valor máximo e, em seguida, selecionamos os atrasos desejados.
fonte
Mathematica, 27 bytes
Agradecemos a LegionMammal978 por economizar 1 byte.
Poderíamos vencer o Jelly se os nomes das funções não fossem tão longos.
Caso de teste
fonte
#2~CorrelationFunction~{#}&
.Oitava,
4737 bytesfonte
disp
, porque você está returnig uma saída de função)disp
.