Bir log-dönüştürülmüş cevap değişkeni için LM ve GLM arasında seçim yapma


55

Genelleştirilmiş Doğrusal Model (GLM) ile Doğrusal Model (LM) kullanmanın ardındaki felsefeyi anlamaya çalışıyorum. Aşağıda örnek bir veri seti oluşturdum.

log(y)=x+ε

Örnek, büyüklüğünün bir işlevi olarak hatasını içermez , bu nedenle log-dönüştürülmüş y'nin doğrusal bir modelinin en iyi olacağını varsayardım. Aşağıdaki örnekte, bu gerçekten böyledir (bence) - log-dönüştürülmüş verilerdeki LM'in AIC'si en düşük olduğundan. Bir log-link işlevine sahip olan Gamma dağılım GLM'sinin AIC'si daha düşük kareler toplamına (SS) sahiptir, ancak ek serbestlik dereceleri biraz daha yüksek bir AIC ile sonuçlanır. Gauss dağılım AIC'sinin çok daha yüksek olmasına şaşırdım (SS modellerin en düşük olduğu halde).yεy

Birinin GLM modellerine ne zaman yaklaşması gerektiği konusunda bir tavsiyede bulunmayı umuyorum - yani LM modelimde kalanlar için başka bir dağıtımın daha uygun olduğunu söylememe uygun bir şey var mı? Ayrıca, uygun bir dağıtım ailesini seçmede kişi nasıl ilerlemelidir.

Yardımlarınız için şimdiden çok teşekkürler.

[EDIT]: Özet istatistiklerini, log-dönüştürülmüş lineer modelin SS'sinin log-link fonksiyonu ile GLM modelleriyle karşılaştırılabilir olmasını sağlayacak şekilde ayarlamıştım. Şimdi istatistiklerin bir grafiği gösterilmektedir.

Örnek

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

görüntü tanımını buraya girin

görüntü tanımını buraya girin


Log.lm'de öngörülen değer için formül yanlış. , medyanını verir . Beklenen değeri elde eklemek için üs içindey 1 / 2 x s ı g m bir 2exp(Xbeta^)y1/2×sigma2
pauljohn32

1
R'nin bir aile sunmadığı bir başka model lognormal bir dağılımdır. SAS buna uyacak, R glm'in neden olmadığını bilmiyorum. Bazıları R paketinin tgat için oynadığını söylüyor, ancak benim için hiçbir zaman anlaşılmaz bir şekilde çalışıyor. Belki daha iyi şansın olur.
pauljohn32

Yanıtlar:


23

Bu konuda düşünmek için iyi bir çaba. İşte eksik bir cevap, ancak sonraki adımlar için bazı başlangıçlar.

İlk olarak, AIC puanları - olasılıklara dayanarak - farklı dağılımlar ve bağlantı işlevleri nedeniyle farklı ölçeklerdedir, bu nedenle karşılaştırılamaz. Kareler toplamınız ve ortalama kareler toplamınız orijinal ölçekte hesaplanmıştır ve dolayısıyla aynı ölçektedir, bu nedenle, model seçiminde iyi bir kriter olsa da başka bir soru olsa da karşılaştırılabilir. - Bunun doğru bir şekilde tartışılması için çapraz onaylanmış arşivlerin model seçiminde araştırılması.

Daha genel sorunuz için, soruna odaklanmanın iyi bir yolu LOG.LM (log (y) olarak yanıtı olan doğrusal modeliniz) arasındaki farkı göz önünde bulundurmaktır; ve LOG.GAUSS.GLM, y olarak yanıt veren glm ve bir log link fonksiyonu. İlk durumda, uydurduğunuz model:

log(y)=Xβ+ϵ ;

ve glm () durumunda bu:

log(y+ϵ)=Xβ

ve her iki durumda da dağıtılmış .N ( 0 , σ 2 )ϵN(0,σ2)


3
Glm'nin karakterizasyonu doğru görünmüyor: sol tarafta rastgele bir değişken ; sağ tarafta ise sadece veri ve parametreler var, fakat rastgele değişken yok. ϵ
whuber

4
Ben @whuber bilmek koyma tek yoldur ancak gelen olur . Bağlantı fonksiyonununE(Y)=g1(Xβ)g(E(Y))=XβE(Y)
Peter Ellis


16

Daha genel bir şekilde, ve aynı değildir. Ayrıca, GLM tarafından yapılan varyans varsayımları, OLS’den daha kesin ve sayım varyansı olarak modelleme durumu farklı dağıtım aileleri alarak farklı olabilir.E[ln(Y|x)]ln([E(Y|X])

Dağıtım ailesi hakkında bence, varyans ve ortalama ile ilişkisi hakkında bir soru. Örneğin, bir gaussian ailede sabit bir varyansa sahibiz. Bir gama ailesinde, ortalamanın ikinci dereceden bir işlevi olarak varyansa sahibiz. Standartlaştırılmış artıklarınızı, takılan değerlerle karşılaştırın ve nasıl olduklarını görün.


1
Doğru aileyi nasıl seçeceğine dair soruyla ilgili olarak +1 (ve burada biraz daha fazla çalışmaya yer olduğunu söyleyebilirim)
etov

7

Maalesef, Rkodunuz olduğu bir örneğe yol açmıyor . Bunun yerine, örneğin . Buradaki hatalar yatay değil dikeydir; onlar hatalardır , değil hataları . Sezgisel olarak, bunun bir fark yaratmaması gerektiği gibi görünüyor, ama öyle. Cevabımı burada okumak isteyebilirsiniz: y ile x ve x ile y ile doğrusal regresyon arasındaki fark nedir? Kurulumunuz, “doğru” modelin ne olduğu sorununu zorlaştırıyor. Kesinlikle, doğru model ters regresyondur: 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

Bu modelin ölçümleri (AIC gibi) modellerinizle karşılaştırılamaz. Ancak, bunun veri üretme sürecine dayanan doğru model olduğunu biliyoruz ve tahmini katsayıların doğru hedef olduğuna dikkat edin.


Yorumun için teşekkürler. Kabul ediyorum, örnek veriler daha iyi olabilirdi, ancak hata üretme şeklinin doğru olduğuna inanıyorum. Örnekte, kesişme yoktur ve eğim 1'dir. Çizgiyi döndürürseniz x = log(y) - rnorm(n, mean=0, sd=1), log (y) = x + rnorm (n, ortalama = 0, sd = 1) olur. @ Whuber'un yorumu, cevabınızı doğurduysa (sanırım vermiş), o zaman veri üretime atıfta bulunmadığına inanıyorum, daha doğrusu @peterellis'in GLM model formülasyonuna değindiğine inanıyorum.
Marc,

0

Seçim, değişkeniniz hakkındaki hipotezinize dayanır.

Var(XtE(Xt)=constant

gama dağılımı

Var(Xt)E(Xt)=constant

Log dönüşümü, şu varsayımlara dayanır:

Var(Xt=E(Xt)σ

Böylece,

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

Taylor kuralına göre,

log(1+x)x

Alırız

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

Böylece,

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)

Bununla birlikte, gama dağılımı,

YΓ(α,β)

{E(yi)=αiβiVar(yi)=αiβi2Var(yi)E(yi)=βi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.