Вибір між LM та GLM для змінної відповіді, перетвореної журналом


55

Я намагаюся зрозуміти філософію, що використовується за допомогою узагальненої лінійної моделі (GLM) проти лінійної моделі (LM). Я створив приклад набору даних нижче, де:

log(y)=x+ε

У прикладі немає помилки як функції величини y , тому я вважаю, що лінійна модель перетвореного y журналу y була б найкращою. У наведеному нижче прикладі це справді так (я думаю) - оскільки AIC LM для даних, перетворених журналом, найнижчий. AIC дистрибуції Gamma GLM з функцією log-link має меншу суму квадратів (SS), але додаткові ступені свободи призводять до дещо більшого AIC. Мене здивувало, що AIC розподілу Гаусса настільки вищий (навіть незважаючи на те, що SS найнижчий з моделей).εy

Я сподіваюся отримати пораду щодо того, коли слід підходити до GLM-моделей - тобто є щось, що мені слід шукати в моїй LM-моделі, що відповідає залишкам, щоб сказати мені, що інший розподіл є більш підходящим? Крім того, як слід діяти у виборі відповідної сім'ї розподілу.

Заздалегідь дякую за вашу допомогу.

[EDIT]: Я зараз скоригував підсумкову статистику, щоб SS лінійної моделі, трансформованої журналом, був порівнянний з моделями GLM з функцією log-link. Тепер показано графік статистики.

Приклад

set.seed(1111)
n <- 1000
y <- rnorm(n, mean=0, sd=1)
y <- exp(y)
hist(y, n=20)
hist(log(y), n=20)

x <- log(y) - rnorm(n, mean=0, sd=1)
hist(x, n=20)

df  <- data.frame(y=y, x=x)
df2 <- data.frame(x=seq(from=min(df$x), to=max(df$x),,100))


#models
mod.name <- "LM"
assign(mod.name, lm(y ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2) ~ df2$x, col=2)

mod.name <- "LOG.LM"
assign(mod.name, lm(log(y) ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(exp(predict(get(mod.name), newdata=df2)) ~ df2$x, col=2)

mod.name <- "LOG.GAUSS.GLM"
assign(mod.name, glm(y ~ x, df, family=gaussian(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)

mod.name <- "LOG.GAMMA.GLM"
assign(mod.name, glm(y ~ x, df, family=Gamma(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)

#Results
model.names <- list("LM", "LOG.LM", "LOG.GAUSS.GLM", "LOG.GAMMA.GLM")

plot(y ~ x, df, log="y", pch=".", cex=3, col=8)
lines(predict(LM, newdata=df2) ~ df2$x, col=1, lwd=2)
lines(exp(predict(LOG.LM, newdata=df2)) ~ df2$x, col=2, lwd=2)
lines(predict(LOG.GAUSS.GLM, newdata=df2, type="response") ~ df2$x, col=3, lwd=2)
lines(predict(LOG.GAMMA.GLM, newdata=df2, type="response") ~ df2$x, col=4, lwd=2)
legend("topleft", legend=model.names, col=1:4, lwd=2, bty="n") 

res.AIC <- as.matrix(
    data.frame(
        LM=AIC(LM),
        LOG.LM=AIC(LOG.LM),
        LOG.GAUSS.GLM=AIC(LOG.GAUSS.GLM),
        LOG.GAMMA.GLM=AIC(LOG.GAMMA.GLM)
    )
)

res.SS <- as.matrix(
    data.frame(
        LM=sum((predict(LM)-y)^2),
        LOG.LM=sum((exp(predict(LOG.LM))-y)^2),
        LOG.GAUSS.GLM=sum((predict(LOG.GAUSS.GLM, type="response")-y)^2),
        LOG.GAMMA.GLM=sum((predict(LOG.GAMMA.GLM, type="response")-y)^2)
    )
)

res.RMS <- as.matrix(
    data.frame(
        LM=sqrt(mean((predict(LM)-y)^2)),
        LOG.LM=sqrt(mean((exp(predict(LOG.LM))-y)^2)),
        LOG.GAUSS.GLM=sqrt(mean((predict(LOG.GAUSS.GLM, type="response")-y)^2)),
        LOG.GAMMA.GLM=sqrt(mean((predict(LOG.GAMMA.GLM, type="response")-y)^2))
    )
)

png("stats.png", height=7, width=10, units="in", res=300)
#x11(height=7, width=10)
par(mar=c(10,5,2,1), mfcol=c(1,3), cex=1, ps=12)
barplot(res.AIC, main="AIC", las=2)
barplot(res.SS, main="SS", las=2)
barplot(res.RMS, main="RMS", las=2)
dev.off()

введіть тут опис зображення

введіть тут опис зображення


Формула прогнозованого значення в log.lm невірна. дає медіану . Щоб отримати очікуване значення, додайте в експонентіexp(Xbeta^)y1/2×sigma2
pauljohn32

1
Інша модель, для якої R не пропонує сім'ї, - це логічний розподіл. SAS це підходить, я не знаю, чому R glm не робить. Деякі пропонують пакет Rl gamlss для tgat, але це ніколи для мене не зрозуміло. Можливо, вам пощастить більше.
pauljohn32

Відповіді:


23

Гарне зусилля для роздумів над цим питанням. Ось неповна відповідь, але кілька початківців для наступних кроків.

По-перше, оцінки AIC - на основі ймовірності - знаходяться на різних масштабах через різні розподіли та функції зв’язку, тому не є порівнянними. Ваша сума квадратів і середня сума квадратів були обчислені за початковою шкалою і, отже, знаходяться в одній шкалі, тому їх можна порівняти, хоча це хороший критерій вибору моделі - це інше питання (це може бути, чи не може - шукати схрещені архіви щодо вибору моделі для гарного обговорення цього питання).

Що стосується більш загального питання, гарним способом зосередитись на проблемі є розгляд різниці між LOG.LM (вашою лінійною моделлю з відповіддю як log (y)); та LOG.GAUSS.GLM, glm з відповіддю як y та функцією зв’язку журналу. У першому випадку модель, яка вам підходить, це:

log(y)=Xβ+ϵ ;

і у випадку glm () це:

log(y+ϵ)=Xβ

і в обох випадках розподіляється .ϵN(0,σ2)


3
Характеристика glm не виглядає правильною: ліворуч - випадкова величина тоді як у правій частині є лише дані та параметри, але немає випадкових змінних. ϵ
whuber

4
Це незвичайний спосіб сказати, я знаю, @whuber, але походить від стає . Справа в тому, що функція зв’язку обходитьE(Y)=g1(Xβ)g(E(Y))=XβE(Y)
Пітер Елліс

Я вважаю це дуже корисним: christoph-scherber.de/content/PDF%20Files/…
Aditya

16

Більш загальним чином, і не є однаковими. Також припущення про дисперсію, зроблені GLM, більш гнучкі, ніж в OLS, і для певних Ситуація моделювання як варіації підрахунку може бути різною з урахуванням різних сімей розподілу.E[ln(Y|x)]ln([E(Y|X])

Щодо сімейства розподілу, на мою думку, є питання про дисперсії та її зв’язку із середнім. Наприклад, у гауссовій сім'ї у нас постійні розбіжності. У гамма-сімействі ми маємо дисперсію як квадратичну функцію середнього. Накресліть стандартизовані залишки проти встановлених значень та подивіться, як вони є.


1
+1 за те, що насправді стосується питання про те, як правильно вибрати сім’ю (і я б сказав, що тут є можливість ще трохи розробитись)
etov

7

На жаль, ваш Rкод не призводить до прикладу, коли . Натомість ваш приклад - . Помилки тут - горизонтальні, а не вертикальні; вони є помилки в , а не помилки в . Інтуїтивно, схоже, це не повинно змінити значення, але все-таки є. Ви можете прочитати тут мою відповідь: Яка різниця між лінійною регресією на y з x та x з y? Ваша установка ускладнює питання про те, що таке "правильна" модель. Суворо, правильна модель - це зворотна регресія: x = log ( y ) + ε x ylog(y)=x+εx=log(y)+εxy

ly = log(y)
REVERSE.REGRESSION = lm(x~ly)
summary(REVERSE.REGRESSION)
# Call:
# lm(formula = x ~ ly)
# 
# Residuals:
#      Min       1Q   Median       3Q      Max 
# -2.93996 -0.64547 -0.01351  0.63133  2.92991 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.01563    0.03113   0.502    0.616    
# ly           1.01519    0.03138  32.350   <2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 0.984 on 998 degrees of freedom
# Multiple R-squared:  0.5119,    Adjusted R-squared:  0.5114 
# F-statistic:  1047 on 1 and 998 DF,  p-value: < 2.2e-16

Показники для цієї моделі (як AIC) не будуть порівняти з вашими моделями. Однак ми знаємо, що це правильна модель, заснована на процесі генерації даних, і зауважуємо, що оцінені коефіцієнти є правильними за цільовим показником.


Дякуємо за ваш коментар Зізнаюся, приклади даних могли бути кращими, але я вважаю, що вони правильні в тому, як вони створювали помилки. У прикладі немає перехоплення і нахил дорівнює 1. Якщо ви x = log(y) - rnorm(n, mean=0, sd=1)обернете лінію , ви отримаєте log (y) = x + rnorm (n, середнє = 0, sd = 1). Якщо коментар @ whuber породив вашу відповідь (я вважаю, що це було), я вважаю, що він не має на увазі генерування даних, а скоріше формулювання моделі GLM від @peterellis.
Марк у коробці

0

Вибір ґрунтується на вашій гіпотезі щодо змінної.

перетворення журналу базується на

Var(XtE(Xt)=constant

базується розподіл гамми

Var(Xt)E(Xt)=constant

Перетворення журналу спирається на гіпотезу, що

Var(Xt=E(Xt)σ

Таким чином,

Xt=Xt=E(Xt)XtE(Xt)=E(Xt)XtE(Xt)+E(Xt)E(Xt)=E(Xt)(1+XtE(Xt)E(Xt))

Спираючись на правило Тейлора,

log(1+x)x

Ми отримуємо

log(1+XtE(Xt)E(Xt))=XtE(Xt)E(Xt)

Таким чином,

Xt=E(Xt)(1+XtE(Xt)E(Xt))logXt=logE(Xt)+log(1+XtE(Xt)E(Xt))=logE(Xt)+XtE(Xt)E(Xt)E(logXt)logE(Xt)

Однак розподіл гамма спирається на гіпотезу, що

YΓ(α,β)

{E(yi)=αiβiVar(yi)=αiβi2Var(yi)E(yi)=βi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.