विशेष रूप से, मैं अगर वहाँ के बीच एक अंतर है जानना चाहता हूँ lm(y ~ x1 + x2)और glm(y ~ x1 + x2, family=gaussian)। मुझे लगता है कि glm का यह विशेष मामला lm के बराबर है। क्या मै गलत हु?
विशेष रूप से, मैं अगर वहाँ के बीच एक अंतर है जानना चाहता हूँ lm(y ~ x1 + x2)और glm(y ~ x1 + x2, family=gaussian)। मुझे लगता है कि glm का यह विशेष मामला lm के बराबर है। क्या मै गलत हु?
जवाबों:
जबकि प्रश्न के शरीर में निर्दिष्ट मॉडल के विशिष्ट रूप (अर्थात lm(y ~ x1 + x2)बनाम glm(y ~ x1 + x2, family=gaussian)) के लिए, प्रतिगमन और जीएलएम एक ही मॉडल हैं, शीर्षक प्रश्न कुछ सामान्य रूप से कुछ पूछता है:
क्या glm के गॉसियन परिवार के लिए lm और glm में कोई अंतर है?
जिस पर जवाब "हाँ!" है।
कारण यह है कि वे भिन्न हो सकते हैं क्योंकि आप GLM में एक लिंक फ़ंक्शन भी निर्दिष्ट कर सकते हैं । यह आपको (या इसके सशर्त माध्य) और चर के बीच गैर-संबंध संबंध के विशेष रूपों को फिट करने की अनुमति देता है ; जब आप ऐसा कर सकते हैं , तो मूल्यों को शुरू करने की कोई आवश्यकता नहीं है, कभी-कभी अभिसरण बेहतर होता है (सिंटैक्स भी थोड़ा आसान है)।nls
तुलना करें, उदाहरण के लिए, ये मॉडल (आपके पास आर है इसलिए मुझे लगता है कि आप इन्हें खुद चला सकते हैं):
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))
ध्यान दें कि पहली जोड़ी एक ही मॉडल ( ), और दूसरी जोड़ी एक ही मॉडल ( और फिट बैठता है अनिवार्य रूप से प्रत्येक जोड़ी के भीतर एक ही है।
इसलिए - शीर्षक प्रश्न के संबंध में - आप प्रतिगमन की तुलना में GLM के साथ गाऊसी मॉडल के एक व्यापक रूप से व्यापक विविधता को फिट कर सकते हैं।
MASS::rlm
संक्षिप्त उत्तर, वे बिल्कुल समान हैं:
# 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 अनुमानों के साथ समाप्त होते हैं।
glmहै glm(y ~ x1 + x2, family = gaussian(link = "identity"))।
से @ 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
-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