การเลือกระหว่าง LM และ GLM สำหรับตัวแปรตอบกลับที่บันทึกการเปลี่ยนแปลง


55

ฉันพยายามที่จะเข้าใจปรัชญาที่อยู่เบื้องหลังโดยใช้แบบจำลองเชิงเส้นทั่วไป (GLM) เทียบกับแบบจำลองเชิงเส้น (LM) ฉันได้สร้างชุดข้อมูลตัวอย่างด้านล่างโดยที่:

log(y)=x+ε

ตัวอย่างไม่ได้มีข้อผิดพลาดเป็นฟังก์ชันของขนาดของyดังนั้นฉันจะสมมติว่าโมเดลเชิงเส้นของบันทึกการแปลง y จะดีที่สุด ในตัวอย่างด้านล่างนี่เป็นกรณี (ฉันคิดว่า) - เนื่องจาก AIC ของ LM ในข้อมูลการแปลงบันทึกมีค่าต่ำที่สุด AIC ของการแจกแจงแกมมา GLM ที่มีฟังก์ชั่นบันทึกการเชื่อมโยงมีผลรวมของกำลังสองน้อยลง (SS) แต่การเพิ่มระดับความอิสระเพิ่มขึ้นส่งผลให้ AIC ที่สูงขึ้นเล็กน้อย ฉันรู้สึกประหลาดใจที่การแจกแจงแบบเกาส์ AIC นั้นสูงกว่ามาก (แม้ว่า SS จะเป็นรุ่นที่ต่ำที่สุด)εy

ฉันหวังว่าจะได้รับคำแนะนำเมื่อควรเข้าใกล้รุ่น GLM - มีบางสิ่งที่ฉันควรมองหาในโมเดล LM ของฉันที่พอดีกับส่วนที่เหลือเพื่อบอกฉันว่าการกระจายอื่นเหมาะสมกว่าหรือไม่ นอกจากนี้เราควรเลือกตระกูลการแจกจ่ายที่เหมาะสมอย่างไร

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของคุณ

[แก้ไข]: ตอนนี้ฉันได้ปรับสถิติสรุปเพื่อให้ SS ของโมเดลเชิงเส้นที่บันทึกการแปลงนั้นเทียบเคียงได้กับโมเดล GLM ที่มีฟังก์ชั่นบันทึกการเชื่อมโยง กราฟของสถิติจะปรากฏขึ้นในขณะนี้

ตัวอย่าง

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

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


exp(Xbeta^)y1/2×sigma2

1
อีกรุ่นที่ R ไม่ได้เสนอให้กับครอบครัวคือการแจกแจงแบบปกติ SAS จะพอดีกับที่ฉันไม่รู้ว่าทำไม R glm ไม่ บางคนแนะนำให้ใช้แพ็คเกจ R สำหรับเกม tgat แต่มันก็ใช้ไม่ได้สำหรับฉัน บางทีคุณอาจจะโชคดีกว่า
pauljohn32

คำตอบ:


23

ความพยายามที่ดีสำหรับการคิดผ่านปัญหานี้ นี่คือคำตอบที่ไม่สมบูรณ์ แต่มีผู้เริ่มสำหรับขั้นตอนต่อไป

อันดับแรกคะแนน AIC - ขึ้นอยู่กับความน่าจะเป็น - อยู่ในระดับที่แตกต่างกันเนื่องจากฟังก์ชั่นการแจกแจงและลิงก์ที่แตกต่างกันดังนั้นจึงไม่สามารถเปรียบเทียบกันได้ ผลรวมของกำลังสองของคุณและค่าเฉลี่ยผลรวมของกำลังสองได้รับการคำนวณในระดับเดิมแล้วดังนั้นจึงอยู่ในระดับเดียวกันดังนั้นจึงสามารถนำมาเปรียบเทียบได้แม้ว่าจะเป็นเกณฑ์ที่ดีสำหรับการเลือกแบบจำลองหรือไม่ - ค้นหาเอกสารสำคัญที่ได้รับการตรวจสอบความถูกต้องไขว้กับการเลือกแบบจำลองเพื่อการอภิปรายที่ดีในเรื่องนี้)

สำหรับคำถามทั่วไปของคุณวิธีที่ดีในการมุ่งเน้นไปที่ปัญหาคือการพิจารณาความแตกต่างระหว่าง LOG.LM (โมเดลเชิงเส้นของคุณพร้อมการตอบสนองเป็นบันทึก (y)); และ LOG.GAUSS.GLM, glm พร้อมการตอบสนองเป็น y และฟังก์ชั่นบันทึกลิงค์ ในกรณีแรกรูปแบบที่คุณเหมาะสมคือ:

log(y)=Xβ+ϵ

และในกรณี glm () มันคือ:

log(y+ϵ)=Xβ

ϵN(0,σ2)


3
ϵ

4
E(Y)=g1(Xβ)g(E(Y))=XβE(Y)

ฉันพบสิ่งนี้มีประโยชน์มาก: christoph-scherber.de/content/PDF%20Files/…
Aditya

16

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

เกี่ยวกับตระกูลการกระจายในความเห็นของฉันเป็นคำถามเกี่ยวกับความแปรปรวนและความสัมพันธ์กับค่าเฉลี่ย เช่นในตระกูลเกาส์เรามีความแปรปรวนคงที่ ในตระกูลแกมม่าเรามีความแปรปรวนเป็นฟังก์ชันกำลังสองของค่าเฉลี่ย พล็อตค่าคงที่แบบแยกส่วนของคุณเทียบกับค่าติดตั้งและดูว่าเป็นอย่างไร


1
+1 สำหรับคำถามที่เกี่ยวข้องกับวิธีการเลือกครอบครัวที่ถูกต้อง (และฉันขอบอกว่ามีที่ว่างสำหรับรายละเอียดเพิ่มเติมที่นี่)
etov

7

Rlog(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, mean = 0, sd = 1) หากความคิดเห็นของ @ whuber กลับกลายเป็นคำตอบของคุณ (ฉันเชื่อว่าเป็นเช่นนั้น) ฉันเชื่อว่าเขาไม่ได้อ้างถึงการสร้างข้อมูล แต่เป็นการกำหนดรูปแบบ GLM โดย @peterellis
Marc ในกล่อง

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.