4

R で AIC/BIC の結果を理解しようとしています。何らかの理由で、R は推定されるパラメーターの数に 1 を追加します。2 * p - 2 * logLikしたがって、R は(ガウスの場合logLikは残差二乗和) とは異なる式を使用します。実際には以下を使用します: 2 * (p + 1) - 2 * logLik.

調査の結果、問題が に関連していることがわかりましたstats:::logLik.lm()

> stats:::logLik.lm  ## truncated R function body
## ...
##     attr(val, "df") <- p + 1
## ...

実際の例 (R の組み込みデータセットを使用trees) として、以下を検討してください。

x <- lm(Height ~ Girth, trees)  ## a model with 2 parameters
logLik(x)
## 'log Lik.' -96.01663 (df=3)

これは本当に不可解です。誰でも理由を知っていますか?


Edit1: glm@crayfish44 による例

model.g <- glm(dist ~ speed, cars, family=gaussian)
logLik(model.g) # df=3
model.p <- glm(dist ~ speed, cars, family=poisson)
logLik(model.p) #df=2
model.G <- glm(dist ~ speed, cars, family=Gamma)
logLik(model.G) #df=3

Edit2: メソッドlogLik

> methods(logLik)
[1] logLik.Arima*  logLik.glm*  logLik.lm*  logLik.logLik* logLik.nls*
4

1 に答える 1

6

を検査することにしたとき、私たちは実際に答えに本当に近づいていましたstats:::logLik.lm。さらに調べていたら(@crayfish44 による glm の例に感謝します: 仲間、あなたは素晴らしいです。stats:::logLik.glm に関する最後の投稿以来、もう一度あなたは私にインスピレーションを与えてくれます。 ありがとう!)persp()trans3d()、私たちは問題を解決したでしょう.

を使用することの落とし穴は:::、コードのコメントを表示できないことです。そこで、R-3.3.0 のソースファイルを確認することにしました。ファイルR-3.3.0/src/library/stats/R/logLik.Rを開いて、汎用関数のコメント付きコードを表示できますlogLik.**

## log-likelihood for glm objects
logLik.glm <- function(object, ...)
{
    if(!missing(...)) warning("extra arguments discarded")
    fam <- family(object)$family
    p <- object$rank
    ## allow for estimated dispersion
    if(fam %in% c("gaussian", "Gamma", "inverse.gaussian")) p <- p + 1
    val <- p - object$aic / 2
    ## Note: zero prior weights have NA working residuals.
    attr(val, "nobs") <- sum(!is.na(object$residuals))
    attr(val, "df") <- p
    class(val) <- "logLik"
    val
 }

次の行に注意してください。

p <- object$rank
## allow for estimated dispersion
if(fam %in% c("gaussian", "Gamma", "inverse.gaussian")) p <- p + 1

pランク検出後のモデル係数の効果数です。

  • と応答が"gaussian()"ある場合、指数分布の分散パラメータの推定が必要になるため、自由度が 1 追加されます。"Gamma()""inverse.gaussian()"
  • " binomial()" と " poisson()" の応答では、分散パラメーターは 1 であることがわかっているため、推定する必要はありません。

?logLik私たちと同じくらい愚かな人がいる場合に備えて、これを説明することを検討する必要があるかもしれません!

于 2016-06-21T00:03:27.903 に答える