이것은 확실히 독특합니다. 모델 (다른 고정 구조의 효과를 갖는 곳 모델의 비교를 할 때, 제 1로 생각 m2하고 m3, 예를 들면)이 우리에게 최선 같은 것 "변경" . (그것은 그것을 곱하면됩니다 , 즉, 그것을 사용하여 작동을 재미) 내가 그것을 버그하지 않을 수 있습니다 생각하게한다. "좋은 습관"을 집행하는 것처럼 보입니다.MLREMLykkX=0method="ML"
그렇게 말하면서 후드를 살펴 보겠습니다.
methods(AIC)
getAnywhere('AIC.default')
A single object matching ‘AIC.default’ was found
It was found in the following places
registered S3 method for AIC from namespace stats
namespace:stats with value
function (object, ..., k = 2)
{
ll <- if ("stats4" %in% loadedNamespaces())
stats4:::logLik
else logLik
if (!missing(...)) {
lls <- lapply(list(object, ...), ll)
vals <- sapply(lls, function(el) {
no <- attr(el, "nobs") #THIS IS THE ISSUE!
c(as.numeric(el), attr(el, "df"), if (is.null(no)) NA_integer_ else no)
})
val <- data.frame(df = vals[2L, ], ll = vals[1L, ])
nos <- na.omit(vals[3L, ])
if (length(nos) && any(nos != nos[1L]))
warning("models are not all fitted to the same number of observations")
val <- data.frame(df = val$df, AIC = -2 * val$ll + k * val$df)
Call <- match.call()
Call$k <- NULL
row.names(val) <- as.character(Call[-1L])
val
}
else {
lls <- ll(object)
-2 * as.numeric(lls) + k * attr(lls, "df")
}
}
귀하의 경우에 당신은 그것을 볼 수 있습니다 :
lls <- lapply(list(m2,m3), stats4::logLik)
attr(lls[[1]], "nobs")
#[1] 500
attr(lls[[2]], "nobs")
#[1] 498
그리고 logLik아마도 (아마도?) 예기치 않은 일을하고 있습니까 ...? 당신의 문서를 보면 아니, 정말,하지 logLik, ?logLik당신은 그것을 볼 수 있습니다 명시되어있다 :
There may be other attributes depending on the method used: see
the appropriate documentation. One that is used by several
methods is ‘"nobs"’, the number of observations used in estimation
(after the restrictions if ‘REML = TRUE’)
원래의 요점으로 돌아가려면을 사용해야합니다 ML.
CS에서 일반적인 말을 사용하려면 : "버그가 아니라 (실제) 기능입니다!"
편집 : (당신의 의견을 해결하기 위해 :) lmer이번에 다른 모델을 사용한다고 가정하십시오 .
m3lmer <- lmer(y ~ x + 1|cat)
그리고 당신은 다음을 수행합니다 :
lls <- lapply(list(m2,m3, m3lmer), stats4::logLik)
attr(lls[[3]], "nobs")
#[1] 500
attr(lls[[2]], "nobs")
#[1] 498
이것은 둘 사이의 명확한 불일치처럼 보이지만 실제로 Gavin이 설명한 것과 다릅니다. 명백한 것을 말하면 :
attr( logLik(lme(y ~ x, random = ~ 1|cat, na.action = na.omit, method="ML")),
"nobs")
#[1] 500
내가 생각하는 방법론의 관점에서 이것이 일어나는 이유는 충분합니다. 모델 비교를 수행 할 때 ML 결과로 즉시 lme넘어가는 동안 LME 회귀를 이해하려고 시도 lmer합니다. 나는 더이 문제에 버그가 없다고 생각 lme하고 lmer각 패키지 뒤에 바로 다른 근거는.
또한 진행 상황에 대한 통찰력있는 설명에 대한 Gavin Simposon의 의견을 참조하십시오 anova()(실제로 동일한 일이 발생합니다 AIC)