लॉग-रूपांतरित प्रतिक्रिया चर के लिए LM और GLM के बीच चयन करना


55

मैं एक सामान्यीकृत मॉडल (GLM) बनाम एक रैखिक मॉडल (LM) का उपयोग करने के पीछे के दर्शन को समझने की कोशिश कर रहा हूं। मैंने नीचे एक उदाहरण डेटा सेट बनाया है:

log(y)=x+ε

उदाहरण में की परिमाण के एक कार्य के रूप में त्रुटि नहीं है , इसलिए मैं मानूंगा कि लॉग-रूपांतरित y का एक रेखीय मॉडल सबसे अच्छा होगा। नीचे दिए गए उदाहरण में, यह वास्तव में मामला है (मुझे लगता है) - चूंकि लॉग-ट्रांसफ़ॉर्म किए गए डेटा पर एलएम का एआईसी सबसे कम है। लॉग-लिंक फ़ंक्शन के साथ गामा वितरण GLM के एआईसी में वर्गों (एसएस) का कम योग है, लेकिन स्वतंत्रता के अतिरिक्त डिग्री से थोड़ा अधिक एआईसी में परिणाम होता है। मुझे आश्चर्य था कि गौसियन वितरण एआईसी इतना अधिक है (भले ही एसएस मॉडल का सबसे कम है)।εy

मुझे उम्मीद है कि जब मुझे GLM मॉडल से संपर्क करना चाहिए, तो मुझे कुछ सलाह मिलनी चाहिए - यानी ऐसा कुछ है जो मुझे अपने LM मॉडल फिट अवशिष्ट में दिखना चाहिए, ताकि मुझे पता चल सके कि एक और वितरण अधिक उपयुक्त है? साथ ही, एक उचित वितरण परिवार के चयन में कैसे आगे बढ़ना चाहिए।

आपकी मदद के लिए आगे से बहुत - बहुत धन्यवाद।

[संपादित करें]: मैंने अब सारांश आँकड़ों को समायोजित कर दिया है ताकि लॉग-ट्रांसफ़र लीनियर मॉडल का एसएस लॉग-लिंक फ़ंक्शन के साथ जीएलएम मॉडल के बराबर हो। अब आँकड़ों का एक ग्राफ दिखाया गया है।

उदाहरण

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 में अनुमानित मूल्य का सूत्र गलत है। का माध्यिका देता है । अपेक्षित मूल्य प्राप्त करने के लिए, घातांक में जोड़ेंy 1 / 2 × रों मैं जी मीटर एक 2exp(Xbeta^)y1/2×sigma2
pauljohn32

1
एक और मॉडल, जिसके लिए आर एक परिवार की पेशकश नहीं करता है, एक लॉगनॉर्मल वितरण है। एसएएस फिट होगा कि, मुझे नहीं पता कि आर glm क्यों नहीं करता है। कुछ लोग tgat के लिए R पैकेज गमलों का सुझाव देते हैं, लेकिन यह मेरे लिए कभी समझदारी से काम नहीं करता है। शायद आपके पास बेहतर भाग्य होगा।
pauljohn32

जवाबों:


23

इस मुद्दे के माध्यम से सोचने के लिए अच्छा प्रयास। यहाँ एक अधूरा जवाब है, लेकिन अगले चरणों के लिए कुछ शुरुआत।

सबसे पहले, AIC स्कोर - संभावना के आधार पर - अलग-अलग वितरण और लिंक फ़ंक्शन के कारण अलग-अलग पैमानों पर होते हैं, इसलिए उनकी तुलना की जा सकती है। आपकी राशि का वर्ग और औसत योग की गणना मूल पैमाने पर की गई है और इसलिए समान पैमाने पर हैं, इसलिए तुलना की जा सकती है, हालांकि क्या यह मॉडल चयन के लिए एक अच्छा मानदंड है, यह एक और सवाल है (यह हो सकता है, या नहीं भी हो सकता है) - इस के कुछ अच्छी चर्चा के लिए मॉडल चयन पर क्रॉस मान्य अभिलेखागार खोजें)।

आपके अधिक सामान्य प्रश्न के लिए, समस्या पर ध्यान केंद्रित करने का एक अच्छा तरीका LOG.LM (लॉग (y) के रूप में प्रतिक्रिया के साथ आपका रैखिक मॉडल) के बीच अंतर पर विचार करना है; और LOG.GAUSS.GLM, y के रूप में प्रतिक्रिया के साथ glm और एक लॉग लिंक फ़ंक्शन। पहले मामले में आप जिस मॉडल को फिट कर रहे हैं वह है:

log(y)=Xβ+ϵ ;

और glm () मामले में यह है:

log(y+ϵ)=Xβ

और दोनों मामलों में को वितरित किया जाता है ।एन ( 0 , σ 2 )ϵN(0,σ2)


3
Glm का लक्षण वर्णन सही नहीं दिखता है: बाएँ हाथ की तरफ एक यादृच्छिक चर जबकि दाहिने हाथ की तरफ केवल डेटा और पैरामीटर हैं, लेकिन कोई यादृच्छिक चर नहीं है। ϵ
व्हिबर

4
यह डालने का एक अजीब तरीका है, मुझे पता है कि मैं @ शुभकर्ता हूं लेकिन से बनता है । बिंदु यह है कि लिंक फ़ंक्शनजी ( ( वाई ) ) = एक्स β ( वाई )E(Y)=g1(Xβ)g(E(Y))=XβE(Y)
पीटर एलिस

मुझे यह बहुत मददगार लगा: christoph-scherber.de/content/PDF%20Files/…
आदित्य

16

अधिक सामान्य तरीके से, और समान नहीं हैं। इसके अलावा GLM द्वारा बनाई गई विचरण धारणाएं OLS की तुलना में अधिक लचीली हैं, और निश्चित रूप से अलग-अलग वितरण परिवारों को लेते हुए मॉडलिंग की स्थिति मायने रखती है।ln ( [ E ( Y | X ] )E[ln(Y|x)]ln([E(Y|X])

मेरी राय में वितरण परिवार के बारे में विचरण और माध्य के साथ इसके संबंध के बारे में एक प्रश्न है। उदाहरण के लिए एक गाऊसी परिवार में हमारे पास निरंतर विचरण है। एक गामा परिवार में हमारे पास माध्य के द्विघात कार्य के रूप में विचरण होता है। फिट किए गए मूल्यों बनाम अपने स्टैंडराइज्ड अवशेषों को प्लॉट करें और देखें कि वे कैसे हैं।


1
+1 वास्तव में इस सवाल से संबंधित है कि सही परिवार का चयन कैसे करें (और मैं कहूंगा कि यहां कुछ और विस्तार के लिए जगह है)
etov

7

दुर्भाग्य से, आपका Rकोड एक उदाहरण के लिए नहीं ले जाता है जहां । इसके बजाय, आपका उदाहरण । यहां त्रुटियां क्षैतिज हैं, ऊर्ध्वाधर नहीं; वे में त्रुटियां हैं, में त्रुटियां नहीं हैं । सहज रूप से, ऐसा लगता है कि यह एक अंतर नहीं होना चाहिए, लेकिन यह करता है। आप यहाँ मेरा जवाब पढ़ना चाहते हैं: y के साथ x और x के साथ y पर रैखिक प्रतिगमन में क्या अंतर है? आपका सेटअप "सही" मॉडल के मुद्दे को जटिल करता है। सख्ती से, सही मॉडल रिवर्स प्रतिगमन है: एक्स = लॉग ( y ) + ε एक्स 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), तो आपको लॉग (y) = x + rnorm (n, माध्य = 0, sd = 1) मिलता है। अगर @ व्हिबर की टिप्पणी ने आपके उत्तर को गलत ठहराया (मुझे विश्वास है कि यह किया है), तो मेरा मानना ​​है कि वह डेटा पीढ़ी का जिक्र नहीं कर रहा है, बल्कि @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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.