これは間違いなく独特です。最初に考えたとおりのモデルが(別の固定効果構造をしているモデル比較やったときm2
とm3
など)を、それが私たちに最善であるとして意志「変更」。(それはで乗算されます。で、)使用して機能するのは興味深いことで、バグではない可能性があります。それはほとんど「良い習慣」を実施しているようです。y k k X = 0MLREML
ykk X= 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
これは明らかに2つの間に矛盾があるように見えますが、Gavinが説明したとおりではありません。明白なことを述べるだけです:
attr( logLik(lme(y ~ x, random = ~ 1|cat, na.action = na.omit, method="ML")),
"nobs")
#[1] 500
私が考える方法論の観点からこれが起こるのには十分な理由があります。lme
LME回帰の意味を理解しようとしますがlmer
、モデルの比較を行うと、すぐにMLの結果にフォールバックします。私は、この問題に関するバグが存在しないと思いますlme
し、lmer
各パッケージの後ろのちょうど別の理論的根拠は。
何がanova()
起こったのかについてのより洞察に満ちた説明についてのGavin Simposonのコメントも参照してください(同じことが実際にはで起こりますAIC
)