วิธีการเขียนคำศัพท์ใน lm แตกต่างกันอย่างไร


42

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

d <- structure(list(r = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
     1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("r1","r2"),
     class = "factor"), s = structure(c(1L, 1L, 1L, 1L, 1L, 
     2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
    .Label = c("s1","s2"), class = "factor"), rs = structure(c(1L, 1L,
     1L,1L, 1L,2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L),
    .Label = c("r1s1","r1s2", "r2s1", "r2s2"), class = "factor"), 
     y = c(19.3788027518437, 23.832287726332, 26.2533235300492,
     15.962906892112, 24.2873740664331, 28.5181676764727, 25.2757801195961,
     25.3601044326474, 25.3066440027202, 24.3298865128677, 32.5684219007394,
     31.0048406654209, 31.671238316086, 34.1933764518288, 36.8784821769123,
     41.6691435168277, 40.4669714825801, 39.2664137501106, 39.4884849591932,
     49.247505535468)), .Names = c("r","s", "rs", "y"), 
     row.names = c(NA, -20L), class = "data.frame")

สองวิธีที่เทียบเท่าในการระบุรูปแบบที่มีการโต้ตอบคือ:

lm0 <- lm(y ~ r*s, data=d)
lm1 <- lm(y ~ r + s + r:s, data=d)

คำถามของฉันคือถ้าฉันสามารถระบุการโต้ตอบโดยพิจารณาตัวแปรใหม่ (rs) ที่มีระดับการโต้ตอบเท่ากัน:

lm2 <- lm(y ~ r + s + rs, data=d)

ข้อดี / ข้อเสียอะไรที่มีแนวทางนี้ และทำไมผลลัพธ์จากวิธีการทั้งสองนี้จึงแตกต่างกัน

summary(lm1)

lm(formula = y ~ r + s + r:s, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          3.82     2.07  
rr2:ss2      4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87


summary(lm2)

lm(formula = y ~ r + s + rs, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          8.76     2.07   # ss2 coef is different from lm1
rsr1s2      -4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87

คุณหมายถึงว่าrsถูกกำหนดเป็นinteraction(r, s)?
chl

คุณอาจแสดงรหัสที่สร้าง rsr1s2 ให้เราได้ไหม
jbowman

ปัจจัย rs ถูกกำหนดด้วยตนเอง (เพียงแค่วางปัจจัย r และ s) ดูชุดข้อมูล
Manuel Ramón

1
ฉันเดาว่าเกี่ยวข้องกับวิธีการในตัวแปรที่มีความสัมพันธ์ดูattr(terms(lm1),"factors")และattr(terms(lm2),"factors")
Galled

คำตอบ:


8

ผลลัพธ์จะแตกต่างกันเนื่องจากวิธีที่ lm ตั้งค่าโมเดลด้วยการโต้ตอบต่างจากวิธีตั้งค่าเมื่อคุณตั้งค่าด้วยตัวคุณเอง หากคุณดู sd ส่วนที่เหลือจะเหมือนกันซึ่งบ่งบอกถึง (ไม่แน่นอน) ว่าโมเดลพื้นฐานนั้นเหมือนกันเพียงแสดง (ไปยัง lm internals) แตกต่างกัน

หากคุณกำหนดปฏิสัมพันธ์ของคุณpaste(d$s, d$r)แทนการpaste(d$r, d$s)ประมาณพารามิเตอร์ของคุณจะเปลี่ยนอีกครั้งด้วยวิธีที่น่าสนใจ

โปรดสังเกตว่าในการสรุปแบบจำลองของคุณสำหรับ lm1 การประมาณค่าสัมประสิทธิ์สำหรับ ss2 คือ 4.94 ต่ำกว่าในการสรุปสำหรับ lm2 โดยมีค่าสัมประสิทธิ์สำหรับ rr2: ss2 เป็น 4.95 (ถ้าคุณพิมพ์ทศนิยม 3 ตำแหน่งความแตกต่างจะหายไป) นี่เป็นข้อบ่งชี้อีกอย่างหนึ่งว่ามีการจัดเรียงเงื่อนไขใหม่เกิดขึ้น

ฉันไม่สามารถนึกถึงข้อได้เปรียบใด ๆ ในการทำด้วยตัวเอง แต่อาจมีรูปแบบที่ซับซ้อนกว่าซึ่งคุณไม่ต้องการคำศัพท์เต็มรูปแบบ แต่แทนที่จะใช้คำบางคำใน "กากบาท" ระหว่างปัจจัยสองอย่างหรือมากกว่านั้น


ข้อได้เปรียบเดียวที่ฉันเห็นเพื่อกำหนดการโต้ตอบเช่นเดียวกับใน lm2 คือมันเป็นเรื่องง่ายที่จะทำการเปรียบเทียบหลาย ๆ คำสำหรับการโต้ตอบ สิ่งที่ฉันไม่เข้าใจค่อนข้างมากคือเหตุผลที่ทำให้ได้ผลลัพธ์ที่แตกต่างกันหากตามหลักการแล้วดูเหมือนว่าทั้งสองวิธีจะเหมือนกัน
Manuel Ramón

5
วิธีการเหมือนกัน แต่การกำหนดพารามิเตอร์ที่แน่นอนของแบบจำลองที่ประมาณไว้นั้นแตกต่างกันดังนั้นผลลัพธ์ที่ปรากฏจะแตกต่างกัน พิจารณาแบบจำลองที่มีสองฐานสองและการโต้ตอบ คุณมีสี่หมวดหมู่ แต่คุณสามารถเขียนแบบจำลองได้หลายวิธีเช่นปล่อยให้ 1 เป็นคำคงที่โดยมีตัวแปรหรือหรืออื่น ๆ ตัวแปรเป็นเพียงการผสมเชิงเส้นของกันและกันการประมาณค่าสัมประสิทธิ์จะแตกต่างกัน แต่แบบจำลองนั้นเหมือนกันจริงๆx1,x2(1,x1,x2,x1x2)(x1,x2,x1x2,(1x1)(1x2)
jbowman

ดังนั้นแม้ว่าวิธีการทั้งสองจะแตกต่างกันใช่มั้ย
Manuel Ramón

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

9

คุณอาจเข้าใจพฤติกรรมนี้ดีขึ้นถ้าคุณดูเมทริกซ์โมเดล

 model.matrix(lm1 <- lm(y ~ r*s, data=d))
 model.matrix(lm2 <- lm(y ~ r + s + rs, data=d))

เมื่อคุณดูเมทริกซ์เหล่านี้คุณสามารถเปรียบเทียบกลุ่มดาวs2=1กับตัวแปรอื่น ๆ (เช่นเมื่อs2=1ใดที่ตัวแปรอื่นใช้ค่าใด?) คุณจะเห็นว่ากลุ่มดาวเหล่านี้แตกต่างกันเล็กน้อยซึ่งหมายความว่าหมวดหมู่ฐานนั้นแตกต่างกัน ทุกอย่างอื่นเป็นสาระสำคัญเหมือนกัน โดยเฉพาะอย่างยิ่งทราบว่าในคุณlm1ค่าสัมประสิทธิ์บนss2เท่ากับค่าสัมประสิทธิ์ss2+rsr1s2ของlm2คือ 3.82 = 8.76-4.95 สั้นของข้อผิดพลาดในการปัดเศษ

ตัวอย่างเช่นการรันโค้ดต่อไปนี้จะให้ผลลัพธ์เหมือนกับการใช้การตั้งค่าอัตโนมัติของ R:

  d$rs <- relevel(d$rs, "r1s1")
  summary(lm1 <- lm(y~ factor(r) + factor(s) + factor(rs), data=d))

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

นั่นคือ:wage=α+β edu+γ eduminority+ϵ

หากกล่าวว่าปัจจัยส่วนน้อยใช้ค่า 1 หากคุณเป็นของชนกลุ่มน้อยค่าสัมประสิทธิ์สามารถตีความได้ว่าเป็นความแตกต่างของค่าจ้างสำหรับบุคคลที่ไม่ใช่ชนกลุ่มน้อยที่สำเร็จการศึกษาระดับมัธยม หากนี่เป็นค่าสัมประสิทธิ์ความสนใจของคุณคุณควรเขียนโค้ดดังกล่าว มิฉะนั้นสมมติว่าปัจจัยส่วนน้อยใช้ค่า 1 หากคุณไม่ได้เป็นของชนกลุ่มน้อย จากนั้นเพื่อให้สามารถดูวิธีการมากขึ้นบุคคลที่ไม่ใช่ชนกลุ่มน้อยที่ได้รับเมื่อพวกเขาที่โรงเรียนมัธยมสมบูรณ์คุณจะต้อง "ด้วยตนเอง" คำนวณ\โปรดทราบว่าข้อมูลทั้งหมดมีอยู่ในการประมาณการและผลลัพธ์ที่สำคัญไม่เปลี่ยนแปลงโดยการตั้งค่าปัจจัยที่แตกต่างกัน!บีตา+ γββ+γ

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