이것은 확실히 독특합니다. 모델 (다른 고정 구조의 효과를 갖는 곳 모델의 비교를 할 때, 제 1로 생각 m2
하고 m3
, 예를 들면)이 우리에게 최선 같은 것 "변경" . (그것은 그것을 곱하면됩니다 , 즉, 그것을 사용하여 작동을 재미) 내가 그것을 버그하지 않을 수 있습니다 생각하게한다. "좋은 습관"을 집행하는 것처럼 보입니다.MLREML
ykkX=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
)