Estou simplesmente tentando recalcular com dnorm () a probabilidade de log fornecida pela função logLik de um modelo lm (em R).
Funciona (quase perfeitamente) para um grande número de dados (por exemplo, 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
mas para pequenos conjuntos de dados há diferenças claras:
> 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
Devido ao pequeno efeito do conjunto de dados, pensei que poderia ser devido às diferenças nas estimativas de variação residual entre lm e glm, mas o uso de lm fornece o mesmo resultado que o 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
Onde eu estou errado?
r
generalized-linear-model
likelihood
lm
Gilles
fonte
fonte
lm()
, você está usando vez de . σstats:::logLik.glm
Respostas:
Aβj Xβ √σ σ=√∑ϵ^2in−−−−√ σ2σ^=∑ϵ^2in−2−−−−√ σ2
logLik()
função fornece a avaliação da probabilidade logarítmica, substituindo as estimativas de ML dos parâmetros pelos valores dos parâmetros desconhecidos. Agora, as estimativas de probabilidade máxima dos parâmetros de regressão (os em ) coincidem com as estimativas de mínimos quadrados, mas a estimativa ML de é , enquanto você está usando , que é a raiz quadrada dos estimativa de . X βfonte