Ich versuche einfach, mit dnorm () die von der logLik-Funktion bereitgestellte Log-Wahrscheinlichkeit aus einem lm-Modell (in R) neu zu berechnen.
Es funktioniert (fast perfekt) für eine hohe Anzahl von Daten (z. B. 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
Bei kleinen Datensätzen gibt es jedoch deutliche Unterschiede:
> 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
Aufgrund des Effekts eines kleinen Datensatzes dachte ich, dass dies an den Unterschieden bei den Restvarianzschätzungen zwischen lm und glm liegen könnte, aber die Verwendung von lm liefert das gleiche Ergebnis wie 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
Wo irre ich mich
r
generalized-linear-model
likelihood
lm
Gilles
quelle
quelle
lm()
stats:::logLik.glm
Antworten:
logLik()
quelle