从简单的R lm模型重新计算对数似然


10

我只是想用dnorm()重新计算lm模型(在R中)的logLik函数提供的对数似然率。

对于大量数据(例如n = 1000),它可以(几乎完美)工作:

> n <- 1000
> x <- 1:n
> set.seed(1)
> y <- 10 + 2*x + rnorm(n, 0, 2)
> mod <- glm(y ~ x, family = gaussian)
> logLik(mod)
'log Lik.' -2145.562 (df=3)
> sigma <- sqrt(summary(mod)$dispersion)
> sum(log(dnorm(x = y, mean = predict(mod), sd = sigma)))
[1] -2145.563
> sum(log(dnorm(x = resid(mod), mean = 0, sd = sigma)))
[1] -2145.563

但是对于小型数据集,存在明显的差异:

> n <- 5
> x <- 1:n
> set.seed(1)
> y <- 10 + 2*x + rnorm(n, 0, 2)
> 
> mod <- glm(y ~ x, family = gaussian)
> logLik(mod)
'log Lik.' -8.915768 (df=3)
> sigma <- sqrt(summary(mod)$dispersion)
> sum(log(dnorm(x = y, mean = predict(mod), sd = sigma)))
[1] -9.192832
> sum(log(dnorm(x = resid(mod), mean = 0, sd = sigma)))
[1] -9.192832

由于数据集的影响较小,我认为这可能是由于lm和glm之间的残差方差估计值不同,但是使用lm提供的结果与glm相同:

> modlm <- lm(y ~ x)
> logLik(modlm)
'log Lik.' -8.915768 (df=3)
> 
> sigma <- summary(modlm)$sigma
> sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma)))
[1] -9.192832
> sum(log(dnorm(x = resid(modlm), mean = 0, sd = sigma)))
[1] -9.192832

我哪里错了?


2
通过lm(),您正在使用代替σσ^σ^
斯特凡·洛朗

感谢斯特凡(Stéphane)的更正,但仍无法正常工作
-Gilles

尝试查看源代码:stats:::logLik.glm
假定正常的2013年

我这样做了,但是此功能只是将glm对象的aic插槽反转以找到对数似然性。而且我在glm函数中看不到有关aic的任何信息……
Gilles

我怀疑这与LogLik和AIC(在臀部绑在一起)有关,假设正在估计三个参数(斜率,截距和色散/残差标准误差),而色散/残差标准误差是在假定估计两个参数(斜率和截距)。
汤姆,

Answers:


12

logLik()βjXβσϵ^i2nσ^=ϵ^i2n2σ2

>  n <- 5
>  x <- 1:n
>  set.seed(1)
>  y <- 10 + 2*x + rnorm(n, 0, 2)
>  modlm <- lm(y ~ x)
>  sigma <- summary(modlm)$sigma
> 
>  # value of the likelihood with the "classical" sigma hat
>  sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma)))
[1] -9.192832
> 
>  # value of the likelihood with the ML sigma hat
>  sigma.ML <- sigma*sqrt((n-dim(model.matrix(modlm))[2])/n) 
>  sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma.ML)))
[1] -8.915768
>  logLik(modlm)
'log Lik.' -8.915768 (df=3)

顺便说一下,对于lme / lmer模型,您必须同样小心使用REML / ML选项。
斯特凡·洛朗

(+1)是的分母是n-1还是确实是n-2 ?σ^
Patrick Coulombe 2013年

@PatrickCoulombe号:截距+斜率
斯特凡劳伦

好吧,现在完全清楚了。非常感谢 !但是,您对REML / ML的含义是什么(我想这与我上一篇有关GuR的最新文章有关)?请解释(可能)。我想学习 !
吉尔斯2013年

混合模型中方差分量的REML估计类似于“针对偏差校正”的ML估计。我还没有看到你对古尔后尚未:)
斯特凡纳·洛朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.