¿Una serie anticipa a la otra? en Python
La prueba de Granger pregunta si el pasado de x mejora un pronóstico de y.
import numpy as np
from statsmodels.tsa.stattools import grangercausalitytests
rng = np.random.default_rng(16)
n = 300
lider = rng.normal(size=n)
seguidor = np.zeros(n)
for i in range(2, n):
seguidor[i] = 0.5 * lider[i - 2] + rng.normal(scale=0.5)
datos = np.column_stack([seguidor, lider])
resultados = grangercausalitytests(datos, maxlag=3, verbose=False)
for rezago, resultado in resultados.items():
p = resultado[0]["ssr_ftest"][1]
print(f"rezago {rezago}: p={p:.5f}")
Cómo funciona
- Los datos entran como dos columnas, y primero.
maxlagacota qué tan atrás mirar.- Prueba predicción, que no es lo mismo que causalidad.
Palabras clave y builtins usados aquí
asforprintrange
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 475
- Tokens
- 142
- Ritmo de tres estrellas
- 115 tpm
Al ritmo de tres estrellas de 115 tokens por minuto, este intento toma unos 74 segundos.
Paso 6 de 6 en Series de tiempo; paso 18 de 19 en Estadística con statsmodels.