มีความแตกต่างระหว่าง lm และ glm สำหรับตระกูล gaussian ของ glm หรือไม่?


45

โดยเฉพาะผมต้องการที่จะทราบว่ามีความแตกต่างระหว่างและlm(y ~ x1 + x2) glm(y ~ x1 + x2, family=gaussian)ฉันคิดว่ากรณีเฉพาะของ glm นี้เท่ากับ lm ฉันผิดหรือเปล่า?


10
ใช่และไม่. ในฐานะที่เป็นโมเดลเชิงสถิติไม่มี ในฐานะที่เป็นวัตถุที่ถูกติดตั้งใน R, ใช่; วัตถุที่ส่งคืนต่างกันใช้อัลกอริทึมที่แตกต่างกัน
Gavin Simpson

3
ดูเหมือนว่าฉันมีคำถามเชิงสถิติที่นี่เช่นเดียวกับการเข้ารหัส R
Silverfish

คำตอบ:


48

ในขณะที่รูปแบบเฉพาะของแบบจำลองที่กล่าวถึงในเนื้อหาของคำถาม (เช่นlm(y ~ x1 + x2)vs glm(y ~ x1 + x2, family=gaussian)) การถดถอยและ GLMs เป็นรูปแบบเดียวกันคำถามชื่อคำถามถามอะไรบางอย่างที่กว้างกว่าเล็กน้อย:

มีความแตกต่างระหว่าง lm และ glm สำหรับตระกูล gaussian ของ glm หรือไม่?

คำตอบคือ "ใช่!"

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

เปรียบเทียบตัวอย่างเช่นโมเดลเหล่านี้ (คุณมี R ดังนั้นฉันคิดว่าคุณสามารถรันด้วยตัวคุณเองได้):

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 ด้านหนึ่งด้านการคำนวณของสิ่งต่าง ๆ ฉันก็คิดว่าอัลกอริทึม GLM จะใช้ตัวแปร IRWLS บางส่วน (ในกรณีส่วนใหญ่) ในขณะที่ LM จะถ่ายทอดในรูปแบบโซลูชันปิดบางแบบ
usεr11852พูดว่า Reinstate Monic

@ usεr11852 - ฉันคิดว่ามันเป็น EM แต่พวกเขาอาจเหมือนกันในกรณีนี้
EngrStudent - Reinstate Monica

1
ไม่ตอบสนองต่อการเห็น "ค่าผิดปกติ" (ยกเว้นผ่านโอกาสที่อธิบายไว้ข้างต้น) reweighting เกิดจากผลกระทบของฟังก์ชั่นความแปรปรวนและการเปลี่ยนแปลงในการประมาณเชิงเส้นในท้องถิ่น
Glen_b

1
@ChrisChiasson: +1 ความคิดเห็นของ Glen_b ดังกล่าวนี้ไม่เกี่ยวข้องกับความทนทานของอัลกอริทึมในการปรากฏตัวของค่าผิดปกติ คุณอาจต้องการสำรวจครอบครัวที่แตกต่างกัน (เช่นปรับขนาด -distribution ให้เหมาะสมหรือสูญเสีย Huber ให้ตรวจสอบเพิ่มเติม) - ขออภัยเพิ่งออนไลน์หลังจากสองสามวันหยุด ..tMASS::rlm
usεr11852พูดว่า Reinstate Monic

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 สรุปรูปแบบที่เหมือนกัน แต่ CI ที่คล้ายกันของค่าสัมประสิทธิ์การถดถอยจากconfintมีความแตกต่างกันเล็กน้อยระหว่างและlmglm

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