Scelta tra LM e GLM per una variabile di risposta trasformata in log


55

Sto cercando di capire la filosofia alla base dell'utilizzo di un modello lineare generalizzato (GLM) rispetto a un modello lineare (LM). Di seguito ho creato un set di dati di esempio in cui:

log(y)=x+ε

L'esempio non ha l'errore in funzione della grandezza di , quindi suppongo che un modello lineare di y trasformato in log sia il migliore. Nell'esempio che segue, questo è effettivamente il caso (penso) - poiché l'AIC dell'LM sui dati trasformati nel registro è il più basso. L'AIC della distribuzione gamma GLM con una funzione log-link ha una somma inferiore di quadrati (SS), ma i gradi di libertà aggiuntivi si traducono in un AIC leggermente più alto. Sono rimasto sorpreso dal fatto che la distribuzione gaussiana dell'AIC sia molto più alta (anche se la SS è la più bassa dei modelli).yεy

Spero di ottenere qualche consiglio su quando uno dovrebbe avvicinarsi ai modelli GLM - cioè c'è qualcosa che dovrei cercare nel mio modello LM residui residui per dirmi che un'altra distribuzione è più appropriata? Inoltre, come si dovrebbe procedere nella selezione di una famiglia di distribuzione appropriata.

Molte grazie in anticipo per il vostro aiuto.

[EDIT]: ora ho adattato le statistiche di riepilogo in modo che le SS del modello lineare trasformato in registro siano paragonabili ai modelli GLM con la funzione log-link. Viene ora mostrato un grafico delle statistiche.

Esempio

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()

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


La formula per il valore previsto in log.lm non è corretta. fornisce la mediana di . Per ottenere il valore atteso, aggiungi in esponentey 1 / 2 × s i g m un 2exp(Xbeta^)y1/2×sigma2
pauljohn32

1
Un altro modello, per il quale R non offre una famiglia, è una distribuzione lognormale. SAS si adatterà a questo, non so perché R glm no. Alcuni suggeriscono gamlss di pacchetti R per tgat, ma per me non funziona mai in modo comprensibile. Forse avrai più fortuna.
pauljohn32,

Risposte:


23

Buon sforzo per riflettere su questo problema. Ecco una risposta incompleta, ma alcuni principianti per i prossimi passi.

Innanzitutto, i punteggi AIC - in base alle probabilità - sono su scale diverse a causa delle diverse distribuzioni e funzioni di collegamento, quindi non sono comparabili. La somma dei quadrati e la somma media dei quadrati sono stati calcolati sulla scala originale e quindi sono sulla stessa scala, quindi possono essere confrontati, anche se questo è un buon criterio per la selezione del modello è un'altra domanda (potrebbe essere o meno - cerca negli archivi validati in modo incrociato sulla selezione del modello per una buona discussione di questo).

Per la tua domanda più generale, un buon modo di concentrarsi sul problema è considerare la differenza tra LOG.LM (il tuo modello lineare con la risposta come log (y)); e LOG.GAUSS.GLM, glm con la risposta come y e una funzione di collegamento del registro. Nel primo caso il modello che stai adattando è:

log(y)=Xβ+ϵ ;

e nel caso glm () è:

log(y+ϵ)=Xβ

e in entrambi i casi è distribuito .N ( 0 , σ 2 )ϵN(0,σ2)


3
La caratterizzazione del glm non sembra corretta: sul lato sinistro c'è una variabile casuale mentre il lato destro contiene solo dati e parametri ma nessuna variabile casuale. ϵ
whuber

4
È un modo strano di dirlo, lo so @whuber ma viene da diventa . Il punto è che la funzione di collegamento gira intorno allag ( E ( Y ) ) = X β E ( Y )E(Y)=g1(Xβ)g(E(Y))=XβE(Y)
Peter Ellis,

Ho trovato questo molto utile: christoph-scherber.de/content/PDF%20Files/…
Aditya

16

In modo più generale, e non sono gli stessi. Anche le ipotesi di varianza fatte da GLM sono più flessibili che in OLS, e per certi la modellizzazione della situazione poiché la varianza dei conteggi può essere diversa prendendo famiglie di distribuzione distinte.E[ln(Y|x)]ln([E(Y|X])

A mio avviso, la famiglia di distribuzione è una domanda sulla varianza e sulla sua relazione con la media. Ad esempio in una famiglia gaussiana abbiamo una varianza costante. In una famiglia gamma abbiamo varianza come funzione quadratica della media. Traccia i tuoi residui standardizzati rispetto ai valori adattati e guarda come sono.


1
+1 per avere effettivamente a che fare con la domanda su come scegliere la famiglia giusta (e direi che qui c'è spazio per ulteriori elaborazioni)
etov

7

Sfortunatamente, il tuo Rcodice non porta ad un esempio in cui . Invece, il tuo esempio è . Gli errori qui sono orizzontali, non verticali; sono errori in , non errori in . Intuitivamente, sembra che questo non dovrebbe fare la differenza, ma lo fa. Potresti voler leggere la mia risposta qui: Qual è la differenza tra la regressione lineare su y con xe x con y? La tua configurazione complica il problema di quale sia il modello "giusto". In senso stretto, il modello giusto è la regressione inversa: log(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

Le metriche per questo modello (come l'AIC) non saranno paragonabili ai tuoi modelli. Tuttavia, sappiamo che questo è il modello giusto basato sul processo di generazione dei dati e notiamo che i coefficienti stimati sono giusti sull'obiettivo.


Grazie per il tuo commento. Lo ammetto, i dati di esempio avrebbero potuto essere migliori, ma ritengo che siano corretti nel modo in cui hanno generato errori. Nell'esempio, non vi è alcuna intercettazione e la pendenza è 1. Se si gira intorno alla linea x = log(y) - rnorm(n, mean=0, sd=1), si ottiene log (y) = x + rnorm (n, mean = 0, sd = 1). Se il commento di @ whuber ha generato la tua risposta (credo lo abbia fatto), allora credo che non si riferisca alla generazione dei dati, ma piuttosto alla formulazione del modello GLM di @peterellis.
Marc nella scatola

0

La scelta si basa sulla tua ipotesi sulla tua variabile.

la trasformazione del log si basa su

Var(XtE(Xt)=constant

la distribuzione gamma si basa su

Var(Xt)E(Xt)=constant

La trasformazione del log si basa sull'ipotesi che,

Var(Xt=E(Xt)σ

In questo modo,

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

Basato sulla regola di Taylor,

log(1+x)x

Noi abbiamo

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

Così,

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)

Tuttavia, la distribuzione gamma si basa sull'ipotesi che,

YΓ(α,β)

{E(yi)=αiβiVar(yi)=αiβi2Var(yi)E(yi)=βi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.