Estoy siguiendo un documento descrito en el enlace que modela las precipitaciones. Debido a su carácter cíclico, los autores utilizan una ecuación modelo (53):
$$ log(\mu_{i}) = a_{0} + a_{1} sin (\frac{2\pi i}{365}) + a_{2} cos (\frac{2\pi i}{365}) $$
donde $$\mu_{i}$$ es la media de la distribución. Mi código en Python es el siguiente.
import pandas as pd
import numpy as np
import math
import statsmodels
import statsmodels.api as sm
from patsy import dmatrices
from statsmodels.formula.api import glm
def log_y(y):
return np.log(y)
def sin_x(x):
return np.sin(2*math.pi*x/365.0)
def cos_x(x):
return np.cos(2*math.pi*x/365.0)
def model():
N = 365*10
x = np.arange(0, N).astype(int)
y = 0.1653 + 0.9049*np.sin(2*math.pi*x/365.0) + 2.0326*np.cos(2*math.pi*x/365.0)
formula = 'np.log(y) ~ sin_x(x) + cos_x(x)'
data = {'x': x, 'y': y}
model = glm(formula, data, family=sm.families.Tweedie())
result = model.fit()
print(result.summary())
# Main function
if __name__== "__main__":
model()
Tengo dos preguntas:
- Cómo representar el término constante a0
- Cuando ejecuto el ejemplo anterior recibo el error con model.fit()
Error de valor: La primera conjetura de la función de desviación devolvió un nan. Esto podría ser un problema de límites y debe ser reportado.
ACTUALIZACIÓN
Como ha señalado Kerby Sheldon, hay un problema.
En cambio, me gustaría estimar los parámetros de la ecuación
$$ \mu_{i} = \exp^(a_{0} + a_{1} sin (\frac{2\pi i}{365}) + a_{2} cos (\frac{2\pi i}{365})) $$
He probado esta fórmula
formula = 'y ~ np.exp(1 + sin_x(x) + cos_x(x))'
pero sé que no es correcto. No estoy seguro de cómo construir esto correctamente.