Как я могу выбрать модель с помощью AIC с помощью Gamma GLM в R?

Как объясняется в документации для glm (), компонент aic значения, возвращаемого glm (), не является допустимым AIC:

Для гауссовых, гамма- и обратных гауссовых семейств дисперсия оценивается по остаточному отклонению, а количество параметров равно количеству коэффициентов плюс один. Для гауссовского семейства используется MLE дисперсии, поэтому это действительное значение AIC, но для гамма-семейства и обратных гауссовских семейств - нет.

Таким образом, действительный AIC необходимо получить другим способом.


person e3bo    schedule 15.11.2012    source источник


Ответы (1)


Если вы хотите использовать функции выбора модели step () или MASS :: stepAIC (), вы можете сначала убедиться, что AIC рассчитывается правильно, выполнив что-то вроде этого:

GammaAIC <- function(fit){
  disp <- MASS::gamma.dispersion(fit)
  mu <- fit$fitted.values
  p <- fit$rank
  y <- fit$y
  -2 * sum(dgamma(y, 1/disp, scale = mu * disp, log = TRUE)) + 2 * p
}
GammaAICc <- function(fit){
  val <- logLik(fit)
  p <- attributes(val)$df
  n <- attributes(val)$nobs
  GammaAIC(fit) + 2 * p * (p + 1) / (n - p - 1)      
}

my_extractAIC <- function(fit, scale=0, k=2, ...){
  n <- length(fit$residuals)
  edf <- n - fit$df.residual  
  if (fit$family$family == "Gamma"){
    aic <- GammaAIC(fit)
  } else {
    aic <- fit$aic
  }
  c(edf, aic + (k - 2) * edf)
}
assignInNamespace("extractAIC.glm", my_extractAIC, ns="stats")

Если вы используете пакет glmulti, вы можете просто указать использование вышеупомянутых функций GammaAIC () или GammaAICc () с параметром крита glmulti ().

person e3bo    schedule 15.11.2012