Memilih antara LM dan GLM untuk variabel respons log-transformed


55

Saya mencoba memahami filosofi di balik menggunakan Generalized Linear Model (GLM) vs Linear Model (LM). Saya telah membuat kumpulan data contoh di bawah ini di mana:

catatan(y)=x+ε

Contohnya tidak memiliki kesalahan sebagai fungsi dari besarnya , jadi saya akan berasumsi bahwa model linear dari y yang ditransformasi log akan menjadi yang terbaik. Dalam contoh di bawah ini, memang demikian (saya kira) - karena AIC dari LM pada data yang ditransformasi log adalah yang terendah. AIC dari distribusi Gamma GLM dengan fungsi log-link memiliki jumlah kuadrat (SS) yang lebih rendah, tetapi derajat kebebasan tambahan menghasilkan AIC yang sedikit lebih tinggi. Saya terkejut bahwa distribusi AIC Gaussian jauh lebih tinggi (meskipun SS adalah yang terendah dari model).yεy

Saya berharap untuk mendapatkan beberapa saran tentang kapan seseorang harus mendekati model GLM - yaitu apakah ada sesuatu yang harus saya cari dalam model LM saya sesuai residual untuk memberi tahu saya bahwa distribusi lain lebih tepat? Juga, bagaimana seharusnya seseorang melanjutkan memilih keluarga distribusi yang tepat.

Banyak terima kasih sebelumnya atas bantuan Anda.

[EDIT]: Saya sekarang telah menyesuaikan statistik ringkasan sehingga SS dari model linear log-transformable sebanding dengan model GLM dengan fungsi log-link. Grafik statistik sekarang ditampilkan.

Contoh

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

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


Rumus untuk nilai prediksi di log.lm salah. memberikan median . Untuk mendapatkan nilai yang diharapkan, tambahkan dalam eksponeny 1 / 2 × s i g m a 2exhal(XbetSebuah^)y1/2×ssayagmSebuah2
pauljohn32

1
Model lain, yang R tidak menawarkan keluarga, adalah distribusi lognormal. SAS akan cocok dengan itu, saya tidak tahu mengapa R glm tidak. Beberapa menyarankan paket R gamlss untuk tgat, tetapi tidak pernah berhasil dimengerti bagi saya. Mungkin Anda akan memiliki keberuntungan yang lebih baik.
pauljohn32

Jawaban:


23

Upaya yang baik untuk memikirkan masalah ini. Inilah jawaban yang tidak lengkap, tetapi beberapa permulaan untuk langkah selanjutnya.

Pertama, skor AIC - berdasarkan pada kemungkinan - berada pada skala yang berbeda karena distribusi yang berbeda dan fungsi tautan, sehingga tidak dapat dibandingkan. Jumlah kuadrat dan jumlah kuadrat Anda telah dihitung pada skala asli dan karenanya pada skala yang sama, sehingga dapat dibandingkan, meskipun apakah ini merupakan kriteria yang baik untuk pemilihan model adalah pertanyaan lain (mungkin, atau mungkin tidak - cari arsip yang divalidasi silang pada pemilihan model untuk beberapa diskusi yang baik tentang ini).

Untuk pertanyaan Anda yang lebih umum, cara yang baik untuk berfokus pada masalah adalah dengan mempertimbangkan perbedaan antara LOG.LM (model linier Anda dengan respons sebagai log (y)); dan LOG.GAUSS.GLM, glm dengan respons sebagai y dan fungsi tautan log. Dalam kasus pertama model yang Anda pas adalah:

catatan(y)=Xβ+ϵ ;

dan dalam kasus glm () itu adalah:

catatan(y+ϵ)=Xβ

dan dalam kedua kasus didistribusikan .N ( 0 , σ 2 )ϵN(0,σ2)


3
Karakterisasi glm tidak terlihat benar: di sisi kiri adalah variabel acak sedangkan sisi kanan hanya berisi data dan parameter tetapi tidak ada variabel acak. ϵ
whuber

4
Ini cara yang aneh untuk mengatakannya, saya tahu @whuber tetapi berasal dari menjadi . Intinya adalah bahwa fungsi tautan berjalan di sekitarg ( E ( Y ) ) = X β E ( Y )E(Y)=g-1(Xβ)g(E(Y))=XβE(Y)
Peter Ellis

Saya menemukan ini sangat membantu: christoph-scherber.de/content/PDF%20Files/…
Aditya

16

E[dalam(Y|x)]dalam([E(Y|X])

Tentang distribusi keluarga menurut saya adalah pertanyaan tentang varians dan hubungannya dengan mean. Misalnya dalam keluarga gaussian kita memiliki varian konstan. Dalam keluarga gamma, kita memiliki varians sebagai fungsi kuadrat dari mean. Plot residu terstandarisasi Anda vs nilai-nilai yang sesuai dan lihat bagaimana mereka.


1
+1 untuk benar-benar berkaitan dengan pertanyaan tentang bagaimana memilih keluarga yang tepat (dan saya akan mengatakan ada ruang untuk elaborasi lebih lanjut di sini)
etov

7

Sayangnya, Rkode Anda tidak mengarah ke contoh di mana . Sebagai gantinya, contoh Anda adalah . Kesalahan di sini adalah horisontal, bukan vertikal; mereka adalah kesalahan di , bukan kesalahan di . Secara intuitif, sepertinya ini seharusnya tidak membuat perbedaan, tetapi itu benar. Anda mungkin ingin membaca jawaban saya di sini: Apa perbedaan antara regresi linier pada y dengan x dan x dengan y? Pengaturan Anda memperumit masalah apa model "benar" itu. Secara ketat, model yang tepat adalah regresi terbalik: x = log ( y ) + εcatatan(y)=x+εx=catatan(y)+εyxy

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

Metrik untuk model ini (seperti AIC) tidak akan sebanding dengan model Anda. Namun, kita tahu bahwa ini adalah model yang tepat berdasarkan proses pembuatan data, dan perhatikan bahwa koefisien yang diperkirakan tepat pada target.


Terima kasih atas komentar Anda. Saya akui, contoh data bisa saja lebih baik, tetapi saya percaya itu benar dalam bagaimana hal itu menghasilkan kesalahan. Dalam contoh tersebut, tidak ada intersep dan kemiringannya adalah 1. Jika Anda memutar garis x = log(y) - rnorm(n, mean=0, sd=1), Anda mendapatkan log (y) = x + rnorm (n, rata-rata = 0, sd = 1). Jika komentar @ whuber menelurkan jawaban Anda (saya yakin memang demikian), maka saya yakin dia tidak merujuk pada pembuatan data, melainkan formulasi model GLM oleh @peterellis.
Marc di dalam kotak

0

Pilihannya didasarkan pada hipotesis Anda pada variabel Anda.

transformasi log didasarkan pada

VSebuahr(XtE(Xt)=cHainstSebuahnt

distribusi gamma didasarkan pada

VSebuahr(Xt)E(Xt)=cHainstSebuahnt

Transformasi log bertumpu pada hipotesis bahwa,

VSebuahr(Xt=E(Xt)σ

Lewat sini,

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

Berdasarkan aturan Taylor,

catatan(1+x)x

Kita mendapatkan

catatan(1+Xt-E(Xt)E(Xt))=Xt-E(Xt)E(Xt)

Jadi,

Xt=E(Xt)(1+Xt-E(Xt)E(Xt))catatanXt=catatanE(Xt)+catatan(1+Xt-E(Xt)E(Xt))=catatanE(Xt)+Xt-E(Xt)E(Xt)E(catatanXt)catatanE(Xt)

Namun, distribusi gamma bersandar pada hipotesis bahwa,

YΓ(α,β)

{E(ysaya)=αsayaβsayaVSebuahr(ysaya)=αsayaβsaya2VSebuahr(ysaya)E(ysaya)=βsaya
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.