Перерахуйте ймовірність журналу з простої моделі R lm


10

Я просто намагаюся перерахувати за допомогою dnorm () імовірність журналу, яку забезпечує функція logLik з lm-моделі (в R).

Він працює (майже ідеально) для великої кількості даних (наприклад, 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 за виправлення, але все одно, здається, це не працює
Жил,

спробуйте подивитися вихідний код:stats:::logLik.glm
припустимонормальне

Я зробив це, але ця функція просто повернула aic слот від об'єкта glm, щоб знайти ймовірність журналу. І я нічого не бачу про aic у функції glm ...
Жил,

Я підозрюю, що це має щось спільне з LogLik та AIC (які пов'язані між собою на стегні), припускаючи, що оцінюються три параметри (нахил, перехоплення та дисперсія / залишкова стандартна помилка), тоді як дисперсійна / залишкова стандартна помилка обчислюється за умови оцінюються два параметри (нахил і перехоплення).
Том

Відповіді:


12

logLik()Функція забезпечує оцінку логарифмічного правдоподібності шляхом підстановки оцінки ML параметрів для значень невідомих параметрів. Тепер максимальна оцінка ймовірності параметрів регресії ( в ) збігається з оцінками найменших квадратів, але оцінка ML є , тоді як ви використовуєте , тобто квадратний корінь неупередженого оцінка .β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)

До речі, ви також повинні бути обережними з варіантом REML / ML для моделей lme / lmer.
Стефан Лоран

(+1) Це n-1 чи це дійсно n-2 у знаменнику ? σ^
Патрік Куломбе

@PatrickCoulombe Ні: перехоплення + нахил
Stéphane Laurent

Гаразд, ідеально зрозуміло зараз. Дуже дякую ! Але що ви маєте на увазі з REML / ML (щось, що я можу зробити з моїм останнім повідомленням в GuR)? Будь ласка, поясніть (можливо, там). Я хочу вивчити !
Жиль

Оцінки REML для дисперсійних компонентів у змішаних моделях нагадують оцінки "виправленого на зміщення" ML. Я ще не бачив вашої публікації на GuR :)
Stéphane Laurent
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.