Я сталкиваюсь с некоторыми расхождениями при сравнении отклонения взвешенной и невзвешенной модели со значениями AIC. Общий пример (из «nls»):
DNase1 <- subset(DNase, Run == 1)
fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), DNase1)
Это невзвешенная подгонка, в коде nls видно, что nls генерирует вектор wts <- rep(1, n)
.
Теперь для взвешенной подгонки:
fm2DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal),
DNase1, weights = rep(1:8, each = 2))
в котором я присваиваю возрастающие веса каждой из 8 концентраций с 2 повторениями.
Теперь с deviance
я получаю:
deviance(fm1DNase1)
[1] 0.004789569
> deviance(fm2DNase1)
[1] 0.0164259
говорят мне, что взвешенная подгонка имеет значительно более высокое отклонение (хуже подгонка).
Теперь с AIC
(или BIC
) я получаю
> AIC(fm1DNase1)
[1] -76.41642
> AIC(fm2DNase1)
[1] -372.5437
что говорит мне о том, что второе соответствие на порядки лучше (более низкий AIC). Почему так?
Если я определяю AIC
на основе остаточной суммы квадратов, найденной в учебниках
RSS <- function (object)
{
w <- object$weights
r <- residuals(object)
if (is.null(w))
w <- rep(1, length(r))
sum(w * residuals(object)^2)
}
AICrss <- function(object)
{
n <- nobs(object)
k <- length(coef(object))
rss <- RSS(object)
n * log((2 * pi)/n) + n + 2 + n * log(rss) + 2 * k
}
я получил
> AICrss(fm1DNase1)
[1] -76.41642
что является тем же значением, что и вышеприведенный AIC (stats:::AIC.logLik
), основанный на логарифмическом правдоподобии
но
> AICrss(fm2DNase1)
[1] -56.69772
что выше и идеально соответствует также более высокому отклонению второй модели.
Может ли кто-нибудь просветить меня? Является ли стандартная реализация AIC для моделей «nls» неприменимой в случае взвешенной подгонки?
С уважением, Андрей
nls
подходит. - person Roland   schedule 24.09.2012