วิธีการใช้ตัวแปรจำลองโดยใช้ตัวแปร n-1


9

ถ้าฉันมีตัวแปรที่มี 4 ระดับในทางทฤษฎีฉันต้องใช้ตัวแปร 3 ตัว ในทางปฏิบัติสิ่งนี้เกิดขึ้นจริงได้อย่างไร? ฉันจะใช้ 0-3 ฉันจะใช้ 1-3 และปล่อยว่างไว้ที่ 4 หรือไม่? ข้อเสนอแนะใด ๆ

หมายเหตุ: ฉันจะทำงานในอาร์

UPDATE: จะเกิดอะไรขึ้นถ้าฉันใช้คอลัมน์เดียวที่ใช้ 1-4 สอดคล้องกับโฆษณา มันจะทำงานหรือแนะนำปัญหาหรือไม่


3
ฉันคิดว่าหน้านี้จาก UCLA ATSอธิบายได้ค่อนข้างดี
caracal

4
เพื่อให้ชัดเจนโปรดทราบว่าการเข้ารหัสตัวแปรนี้ด้วยจำนวนเต็ม 0-3 หรือ 1-4 หรือ 1-3 ไม่ใช่การเข้ารหัสแบบหลอกตาและจะไม่มีผลเช่นเดียวกับตัวแปรจำลองสามตัว อย่างไรก็ตามการเข้ารหัสที่ไม่ถูกต้องจะทำงานในสูตรการถดถอยและซอฟต์แวร์และจะมีผลลัพธ์ที่เป็นไปได้: มันจะไม่สอดคล้องกับรูปแบบที่ต้องการ (หมายเหตุ: นี่ตอบการอัปเดตล่าสุดของคำถาม )
whuber

คำตอบ:


11

ในทางปฏิบัติมักจะให้ซอฟต์แวร์ตัวเลือกจัดการการสร้างและจัดการตัวแปรจำลอง มีหลายวิธีที่อาจถูกจัดการ ต่อไปนี้เป็นความเป็นไปได้ทั่วไปหลายประการสำหรับชุดข้อมูลที่มีการสังเกตสี่แบบโดยแต่ละอันมีระดับ A, B, C และ D สิ่งเหล่านี้คือการกำหนดพารามิเตอร์ที่แตกต่างกัน พวกมันส่งผลให้แบบจำลองเดียวกันพอดี แต่มีการตีความที่แตกต่างกันกับพารามิเตอร์ หนึ่งสามารถแปลงจากที่หนึ่งไปยังอีกโดยใช้พีชคณิตพื้นฐาน ทราบว่าพวกเขาทั้งหมดรวมกันเชิงเส้นของกันและกัน ในความเป็นจริงการรวมกันเชิงเส้นใด ๆ สามารถนำมาใช้

ใช้ความแตกต่างจากระดับแรก (ค่าเริ่มต้นใน R):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

ใช้ความแตกต่างจากระดับสุดท้าย (ค่าเริ่มต้นใน SAS):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

ใช้ความแตกต่าง "ผลรวม":

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

ใช้ความแตกต่าง "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3

1
ฉันจะบอกว่าเพื่อให้เกิดความบริสุทธิ์ตัวแปรหุ่นจำลองนั้นเป็นเพียงตัวอย่างที่ 1 และ 2 ของคุณ ตัวแปร Dummy ยังเป็นที่รู้จักกันเป็นตัวบ่งชี้ตัวแปรทางตรงกันข้าม Helmert , การเบี่ยงเบนและตัวแปรทางเลือกอื่น ๆ ไม่ควรเรียกว่าดัมมี่สำหรับฉัน
ttnphns

1
@ttnphns ฉันเห็นด้วยว่าความแตกต่างของ Helmert ไม่ได้เป็นการจำลองแบบหลอกตาจากมุมมองทางเทคนิค แต่ฉันคิดว่ามันสมเหตุสมผลอย่างยิ่งสำหรับพวกเขาที่จะถูกรวมไว้ที่นี่อย่างไรก็ตาม ฉันไม่สามารถบอกได้ว่าคุณกำลังชี้ให้เห็นเพื่อความชัดเจนหรือแนะนำว่าคำตอบจะเปลี่ยนไป @ Aaron +1 คำตอบนี้จะดียิ่งขึ้นถ้าคุณต้องอธิบายสั้น ๆ ว่าการตีความของรูปแบบการเข้ารหัสที่แตกต่างกันเหล่านี้จะแตกต่างกันอย่างไร
gung - Reinstate Monica

7

ให้เราสมมติว่าระดับตัวแปรของคุณคือ A, B, C และ D หากคุณมีเงื่อนไขคงที่ในการถดถอยคุณต้องใช้ตัวแปรจำลองสามตัวมิฉะนั้นคุณต้องมีทั้งสี่ตัวแปร

มีวิธีที่เทียบเท่าคณิตศาสตร์หลายวิธีที่คุณสามารถใช้ตัวแปรจำลองได้ หากคุณมีคำที่คงที่ในการถดถอยวิธีหนึ่งคือการเลือกระดับใดระดับหนึ่งเป็นระดับ "พื้นฐาน" และเปรียบเทียบอีกสามระดับ ให้เราบอกว่าสำหรับ concreteness ระดับ baseline คือ A จากนั้นตัวแปร dummy ตัวแรกของคุณใช้ค่า 1 เมื่อใดก็ตามที่ระดับ B และ 0 เป็นอย่างอื่น ครั้งที่สองใช้ค่า 1 เมื่อใดก็ตามที่ระดับเป็น C และ 0 เป็นอย่างอื่นและที่สามใช้ค่า 1 ทุกครั้งที่ระดับเป็น D และ 0 เป็นอย่างอื่น เนื่องจากเทอมคงที่ของคุณเท่ากับ 1 ตลอดเวลาค่าสัมประสิทธิ์โดยประมาณของตัวแปรตัวแรกจะเป็นการประมาณความแตกต่างระหว่างระดับ B และ A และใกล้เคียงกับตัวแปรตัวจำลองอื่น ๆ

หากคุณไม่มีคำที่คงที่คุณสามารถใช้ตัวแปรดัมมี่สี่ตัวสร้างขึ้นในตัวอย่างก่อนหน้าเพียงเพิ่มหนึ่งตัวสำหรับระดับ A


Nice note เกี่ยวกับการมีคำที่คงที่ในเรื่องการถดถอย
Aaron ออกจาก Stack Overflow

5

ใน R ให้นิยามตัวแปรเป็นปัจจัยและจะนำมาใช้กับคุณ:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

ซึ่งผลตอบแทน

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

เอกสารสำหรับ 'lm', 'factor' และ 'formula' ใน R เติมในรายละเอียดบางส่วน


1
+1 นี่เป็นส่วนเสริมที่ดีของคำตอบที่มีอยู่แล้ว นอกจากนี้เรายังสามารถทราบได้ว่าหากคุณมีตัวแปรที่มีชื่อกลุ่ม (เช่น AD) แล้วสิ่งนี้สามารถทำได้ในการเรียกใช้ฟังก์ชันการวิเคราะห์โดยไม่ต้องดำเนินการพิเศษ: lm(y ~ as.factor(x))
gung - Reinstate Monica

เหตุผลหลักที่ฉันใช้ตัวแปรจำลองคือฉันกำลังทำงานกับชุดข้อมูลขนาดใหญ่ที่มีระดับปัจจัยหลายอย่าง (> 32) และแพ็กเกจบางตัวใน R (คือแบบสุ่ม) ไม่สามารถจัดการกับปัจจัยได้หลายระดับดังนั้นฉันจึงพยายาม เพื่อดูว่าหุ่นจำลองกำลังทำงานอยู่หรือไม่
screechOwl

1
คุณสามารถสร้างเมทริกซ์การออกแบบการถดถอยโดยใช้ 'model.matrix': model.matrix (y ~ x) (x ยังคงเป็นปัจจัย) จะให้เมทริกซ์กับตัวแปรจำลอง ฉันไม่คุ้นเคยกับแพ็คเกจแบบสุ่ม แต่ฉันสงสัยว่าคุณสามารถให้ฟังก์ชั่นการออกแบบที่ชัดเจนที่คุณได้รับจาก model.matrix และ model.matrix ดูเหมือนว่าจะทำงานกับหลายระดับ (เช่นหลายร้อย)
สีเทา

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

4

whuber บอกคุณในความคิดเห็นว่าการเข้ารหัส 0-3 หรือ 1-4 การเข้ารหัสแทนที่จะสร้างตัวแปรดัมมี่ไม่ใช่สิ่งที่คุณต้องการ นี่คือความพยายามฉันหวังว่าจะอธิบายว่าคุณจะทำอะไรกับโมเดลนั้นและทำไมมันถึงผิด

ถ้าคุณทำรหัสตัวแปร X เช่นนั้นถ้า A แล้ว X = 1, ถ้า B แล้ว X = 2, ถ้า C แล้ว X = 3, ถ้า D แล้ว X = 4 จากนั้นเมื่อคุณทำการถดถอยคุณจะได้รับเพียงหนึ่งพารามิเตอร์ สมมุติว่ามันจบลงด้วยการที่พารามิเตอร์โดยประมาณที่เกี่ยวข้องกับ X คือ 2 นี่จะบอกคุณว่าความแตกต่างที่คาดหวังระหว่างค่าเฉลี่ยของ B และค่าเฉลี่ยของ A คือ 2 นอกจากนี้ยังบอกคุณว่าความแตกต่างที่คาดหวังระหว่างค่าเฉลี่ยของ C และค่าเฉลี่ยของ B คือ 2 บางค่าสำหรับ D และ C คุณจะบังคับให้เกิดความแตกต่างในค่าเฉลี่ยสำหรับกลุ่มเหล่านี้ที่จะทำตามรูปแบบที่เข้มงวดมากนี้ พารามิเตอร์ตัวหนึ่งบอกคุณได้อย่างชัดเจนว่ากลุ่มของคุณมีความสัมพันธ์กันอย่างไร

ดังนั้นหากคุณทำการเข้ารหัสแบบนี้คุณจะต้องคิดว่าไม่เพียง แต่คุณจะได้รับการสั่งซื้อที่ถูกต้อง (เพราะในกรณีนี้ถ้าคุณคาดว่าจะเพิ่มจาก A ถึง B คุณต้องคาดหวังว่าจะเพิ่มขึ้นจาก B เป็น C และ C ถึง D) แต่คุณต้องสมมติว่าความแตกต่างนั้นเหมือนกัน!

หากคุณทำรหัสจำลองที่แนะนำให้คุณอนุญาตให้แต่ละกลุ่มมีค่าเฉลี่ยของตัวเอง - ไม่มีข้อ จำกัด รุ่นนี้มีไหวพริบมากกว่าและตอบคำถามที่คุณต้องการ

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