Ben sadece bir lm modelinden (R) logLik işlevi tarafından sağlanan log-olasılık dnorm () ile yeniden hesaplamak çalışıyorum.
Çok sayıda veri (örneğin n = 1000) için (neredeyse mükemmel) çalışır:
> 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
ancak küçük veri kümeleri için belirgin farklılıklar vardır:
> 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
Küçük veri kümesi etkisi nedeniyle bunun lm ve glm arasındaki artık varyans tahminlerindeki farklılıklardan kaynaklanabileceğini düşündüm, ancak lm kullanmak glm ile aynı sonucu veriyor:
> 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
Nerede yanılıyorum?
stats:::logLik.glm
lm()
, kullandığınız yerine .