Obteniendo el AIC de distribuciones lognormales utilizando GMM de Scikit.
Tengo los siguientes datos generados mediante:
from scipy.stats import skewnorm
import matplotlib.pyplot as plt
import numpy as np
numValues = 10000
maxValue = 100
skewness = -5
data = skewnorm.rvs(a = skewness,loc=maxValue, size=numValues)
Para el modelo gaussiano, he calculado el AIC utilizando el siguiente código:
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components = 1).fit(X=np.expand_dims(data,1))
gmm_aic = gmm.aic(X=np.expand_dims(data,1))
gmm_bic = gmm.bic(X=np.expand_dims(data,1))
Para el modelo logarítmico normal, tomé el logaritmo de los datos y ajusté una distribución gaussiana utilizando el siguiente código:
log_gmm = GaussianMixture(n_components = 1).fit(X=np.expand_dims(np.log(data),1))
y calculé el AIC para este modelo en los datos y no en np.log(data)
log_gmm_aic = log_gmm.aic(X=np.expand_dims(data,1))
log_gmm_bic = log_gmm.bic(X=np.expand_dims(data,1))
De esta manera, mis valores de AIC y BIC en ambos casos son los siguientes:
Gaussiano - AIC: 18790.27 BIC:18804.69
lognormal - AIC: 2231500479614.06 BIC:2231500479628.48
Los valores parecen incomparables. ¿Qué estoy haciendo mal si quiero calcular el AIC y BIC del modelo lognormal?
davy.ai
Un posible error es que se debe tomar el logaritmo de los valores de verosimilitud al calcular AIC y BIC para el modelo lognormal, ya que el modelo se ajusta a los datos transformados con logaritmos.
Para corregir esto, se puede modificar el código de la siguiente manera:
Aquí,
log_gmm.lower_bound_
es el logaritmo de la verosimilitud para el modelo lognormal, obtenido a partir delog_gmm.score(X=np.expand_dims(np.log(data),1))
. Al multiplicarlog_gmm.lower_bound_
por 2 y restarle 2 veces el número de parámetros (es decir, el número de componentes en el modelo de mezcla), obtenemos el valor de AIC. Al utilizar la fórmula para BIC con el logaritmo del tamaño de la muestralog(len(data))
, podemos obtener el valor correspondiente de BIC.Con esta modificación, debería ser posible obtener valores comparables de AIC y BIC para los dos modelos.