gpt4 book ai didi

r - logLik.lm() : Why does R use (p + 1) instead of p for degree of freedom?

转载 作者:行者123 更新时间:2023-12-03 01:44:39 26 4
gpt4 key购买 nike

我试图理解 R 中 AIC/BIC 的结果。出于某种原因,R 在要估计的参数数量上加了 1。因此,R 使用与 2 * p - 2 * logLik 不同的公式(在高斯情况下,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)

这实在是令人费解。有人知道为什么吗?

<小时/>

编辑1:@crayfish44的glm示例

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*

最佳答案

当我们决定检查 stats:::logLik.lm 时,我们实际上非常接近答案。我们是否进一步检查 stats:::logLik.glm (感谢 @crayfish44 的 glm 示例:Mate,你太棒了。自从上一篇关于 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()”“Gamma()”“inverse.gaussian()”响应时,度数自由度加1,因为我们需要估计指数分布的离散参数。
  • 对于“binomial()”和“poisson()”响应,已知色散参数为 1,因此无需估计。

也许?logLik应该考虑解释一下这一点,以防有人像我们一样愚蠢!

关于r - logLik.lm() : Why does R use (p + 1) instead of p for degree of freedom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com