क्या glm के गॉसियन परिवार के लिए lm और glm में कोई अंतर है?


45

विशेष रूप से, मैं अगर वहाँ के बीच एक अंतर है जानना चाहता हूँ lm(y ~ x1 + x2)और glm(y ~ x1 + x2, family=gaussian)। मुझे लगता है कि glm का यह विशेष मामला lm के बराबर है। क्या मै गलत हु?


10
हां और ना। एक सांख्यिकीय मॉडल के रूप में, नहीं। आर में एक फिट वस्तु के रूप में, हाँ; अलग-अलग लौटे ऑब्जेक्ट, अलग-अलग एल्गोरिथ्म का इस्तेमाल किया।
मोनिका को बहाल करें - जी। सिम्पसन

3
ऐसा लगता है कि यहां एक सांख्यिकीय सवाल है, साथ ही साथ एक आर कोडिंग भी है।
सिल्वरफिश नोव

जवाबों:


48

जबकि प्रश्न के शरीर में निर्दिष्ट मॉडल के विशिष्ट रूप (अर्थात lm(y ~ x1 + x2)बनाम glm(y ~ x1 + x2, family=gaussian)) के लिए, प्रतिगमन और जीएलएम एक ही मॉडल हैं, शीर्षक प्रश्न कुछ सामान्य रूप से कुछ पूछता है:

क्या glm के गॉसियन परिवार के लिए lm और glm में कोई अंतर है?

जिस पर जवाब "हाँ!" है।

कारण यह है कि वे भिन्न हो सकते हैं क्योंकि आप GLM में एक लिंक फ़ंक्शन भी निर्दिष्ट कर सकते हैं । यह आपको (या इसके सशर्त माध्य) और चर के बीच गैर-संबंध संबंध के विशेष रूपों को फिट करने की अनुमति देता है ; जब आप ऐसा कर सकते हैं , तो मूल्यों को शुरू करने की कोई आवश्यकता नहीं है, कभी-कभी अभिसरण बेहतर होता है (सिंटैक्स भी थोड़ा आसान है)।yxnls

तुलना करें, उदाहरण के लिए, ये मॉडल (आपके पास आर है इसलिए मुझे लगता है कि आप इन्हें खुद चला सकते हैं):

x1=c(56.1, 26.8, 23.9, 46.8, 34.8, 42.1, 22.9, 55.5, 56.1, 46.9, 26.7, 33.9, 
37.0, 57.6, 27.2, 25.7, 37.0, 44.4, 44.7, 67.2, 48.7, 20.4, 45.2, 22.4, 23.2, 
39.9, 51.3, 24.1, 56.3, 58.9, 62.2, 37.7, 36.0, 63.9, 62.5, 44.1, 46.9, 45.4, 
23.7, 36.5, 56.1, 69.6, 40.3, 26.2, 67.1, 33.8, 29.9, 25.7, 40.0, 27.5)

x2=c(12.29, 11.42, 13.59, 8.64, 12.77, 9.9, 13.2, 7.34, 10.67, 18.8, 9.84, 16.72, 
10.32, 13.67, 7.65, 9.44, 14.52, 8.24, 14.14, 17.2, 16.21, 6.01, 14.23, 15.63, 
10.83, 13.39, 10.5, 10.01, 13.56, 11.26, 4.8, 9.59, 11.87, 11, 12.02, 10.9, 9.5, 
10.63, 19.03, 16.71, 15.11, 7.22, 12.6, 15.35, 8.77, 9.81, 9.49, 15.82, 10.94, 6.53)

y = c(1.54, 0.81, 1.39, 1.09, 1.3, 1.16, 0.95, 1.29, 1.35, 1.86, 1.1, 0.96,
1.03, 1.8, 0.7, 0.88, 1.24, 0.94, 1.41, 2.13, 1.63, 0.78, 1.55, 1.5, 0.96, 
1.21, 1.4, 0.66, 1.55, 1.37, 1.19, 0.88, 0.97, 1.56, 1.51, 1.09, 1.23, 1.2, 
1.62, 1.52, 1.64, 1.77, 0.97, 1.12, 1.48, 0.83, 1.06, 1.1, 1.21, 0.75)

lm(y ~ x1 + x2)
glm(y ~ x1 + x2, family=gaussian) 
glm(y ~ x1 + x2, family=gaussian(link="log")) 
nls(y ~ exp(b0+b1*x1+b2*x2), start=list(b0=-1,b1=0.01,b2=0.1))

ध्यान दें कि पहली जोड़ी एक ही मॉडल ( ), और दूसरी जोड़ी एक ही मॉडल ( और फिट बैठता है अनिवार्य रूप से प्रत्येक जोड़ी के भीतर एक ही है।yiN(β0+β1x1i+β2x2i,σ2)yiN(exp(β0+β1x1i+β2x2i),σ2)

इसलिए - शीर्षक प्रश्न के संबंध में - आप प्रतिगमन की तुलना में GLM के साथ गाऊसी मॉडल के एक व्यापक रूप से व्यापक विविधता को फिट कर सकते हैं।


4
+1। चीजों का एक कम्प्यूटेशनल पक्ष भी मुझे लगता है कि एक जीएलएम एल्गोरिथ्म कुछ आईआरडब्ल्यूएलएस वेरिएंट का उपयोग करेगा (ज्यादातर मामलों में) जबकि एक एलएम कुछ बंद-फॉर्म समाधान संस्करण पर रिले करेगा।
us --r11852 का कहना है कि

@ us @r11852 - मैंने सोचा होगा कि यह ईएम था, लेकिन वे इस मामले में एक ही बात हो सकती है।
एंग्रीस्टूडेंट - मोनिका

1
यह "आउटलेयर" को देखने का जवाब नहीं देता (ऊपर वर्णित संभावना के माध्यम से छोड़कर); पुन: लोडिंग विचरण समारोह के प्रभाव और स्थानीय रैखिक सन्निकटन में बदलाव के कारण होता है।
Glen_b

1
@ChrisChiasson: +1 ग्लेन_ब की टिप्पणी के लिए। जैसा कि उल्लेख किया गया है यह आउटलेयर की उपस्थिति में एल्गोरिथ्म की मजबूती से संबंधित नहीं है। आप अलग-अलग परिवारों का पता लगाना चाहते हैं (जैसे। उपयुक्त रूप से स्केल किए गए डिस्ट्रिब्यूशन, या एक ह्यूबर लॉस, उस पर अधिक जानकारी के लिए जांच करें ) - क्षमा करें, कुछ दिनों के बाद ही ऑनलाइन हो गया है ..tMASS::rlm
usεr11852 का कहना है कि

1
आपको लगता है कि आप जिस तरह की मजबूती हासिल कर सकते हैं, वह आपको कई तरह से करना है। हालांकि, glms और प्रतिगमन प्रकार के मॉडल के साथ, आपको न केवल y- दिशा में, बल्कि प्रभावशाली आउटलेर के बाहरी लोगों से सावधान रहना होगा , जो खुद को जगह से बाहर नहीं देख सकते हैं ..
Glen_b

14

संक्षिप्त उत्तर, वे बिल्कुल समान हैं:

# Simulate data:
set.seed(42)
n <- 1000

x1 <- rnorm(n, mean = 150, sd = 3)
x2 <- rnorm(n, mean = 100, sd = 2)
u  <- rnorm(n)
y  <- 5 + 2*x1 + 3*x2 + u

# Estimate with OLS:
reg1 <- lm(y ~ x1 + x2)
# Estimate with GLS
reg2 <- glm(y ~ x1 + x2, family=gaussian)

# Compare:
require(texreg)
screenreg(l = list(reg1, reg2))

=========================================
                Model 1      Model 2     
-----------------------------------------
(Intercept)        6.37 **       6.37 ** 
                  (2.20)        (2.20)   
x1                 1.99 ***      1.99 ***
                  (0.01)        (0.01)   
x2                 3.00 ***      3.00 ***
                  (0.02)        (0.02)   
-----------------------------------------
R^2                0.99                  
Adj. R^2           0.99                  
Num. obs.          1000          1000       
RMSE               1.00                  
AIC                           2837.66    
BIC                           2857.29    
Log Likelihood               -1414.83    
Deviance                       991.82    
=========================================
*** p < 0.001, ** p < 0.01, * p < 0.05

लंबे उत्तर; Glm फ़ंक्शन MLE द्वारा मॉडल को फिट करता है, हालांकि, लिंक फ़ंक्शन (इस मामले में सामान्य) के बारे में आपके द्वारा की गई धारणा के कारण, आप OLS अनुमानों के साथ समाप्त होते हैं।


+1, अंतिम वाक्य में एक टाइपो। सामान्य धारणा त्रुटि वितरण के बारे में है, लिंक फ़ंक्शन के बारे में नहीं। आपके उदाहरण में, डिफ़ॉल्ट लिंक फ़ंक्शन "पहचान" है। के लिए एक और अधिक पूर्ण रूप glmहै glm(y ~ x1 + x2, family = gaussian(link = "identity"))
पॉल

14

से @ Repmat का जवाब, मॉडल सारांश ही कर रहे हैं, लेकिन सीआई प्रतिगमन गुणांक की है से confintके बीच थोड़े अलग हैं lmऔर glm

> confint(reg1, level=0.95)
               2.5 %    97.5 %
(Intercept) 2.474742 11.526174
x1          1.971466  2.014002
x2          2.958422  3.023291
> confint(reg2, level=0.95)
Waiting for profiling to be done...
               2.5 %    97.5 %
(Intercept) 2.480236 11.520680
x1          1.971492  2.013976
x2          2.958461  3.023251

t -distribution का उपयोग तब lmकिया जाता है glmजब अंतराल का निर्माण करते समय सामान्य वितरण का उपयोग किया जाता है ।

> beta <- summary(reg1)$coefficients[, 1]
    > beta_se <- summary(reg1)$coefficients[, 2]
> cbind(`2.5%` = beta - qt(0.975, n - 3) * beta_se, 
        `97.5%` = beta + qt(0.975, n - 3) * beta_se) #t
                2.5%     97.5%
(Intercept) 2.474742 11.526174
x1          1.971466  2.014002
x2          2.958422  3.023291
> cbind(`2.5%` = beta - qnorm(0.975)*beta_se, 
        `97.5%` = beta + qnorm(0.975)*beta_se) #normal
                2.5%     97.5%
(Intercept) 2.480236 11.520680
x1          1.971492  2.013976
x2          2.958461  3.023251
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.