2 votos

Python statsmodels constante y error utilizando la distribución Tweedie

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:

  1. Cómo representar el término constante a0
  2. 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.

2voto

Florian Rachor Puntos 111

Su y variable tiene valores negativos y luego se toma el logaritmo, por lo que nans resultado. Los nans se dejan caer, pero no estoy seguro de que quieras el logaritmo allí. La familia Tweedie por defecto a un enlace de registro, pero es y o log(y) que tiene una distribución Tweedie? Además, probablemente quieras asignar algo a la var_power parámetro o de lo contrario usted está básicamente haciendo la regresión de Poisson.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X