![](/img/trans.png)
[英]How do I plot points and the model's line with glm gamma link=log?
[英]How can I do model selection by AIC with a Gamma GLM in R?
正如glm()的文档所述,glm()返回的值的aic分量不是有效的AIC:
对于高斯,伽马和反高斯族,根据残差偏差来估计色散,参数的数量是系数的数量加一。 对于高斯族,使用色散的MLE,因此这是AIC的有效值,但对于伽马和反高斯族则不是。
因此,需要以其他方式获得有效的AIC。
如果要使用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包,则只需使用glmulti()的crit参数指定使用上述GammaAIC()或GammaAICc()函数即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.