ทำไมคอลัมน์สกัดกั้นใน model.matrix จึงมาแทนที่ปัจจัยแรก


9

ฉันพยายามแปลงคอลัมน์ปัจจัยของฉันเป็นตัวแปรจำลอง:

str(cards$pointsBin)
# Factor w/ 5 levels ".lte100",".lte150",..: 3 2 3 1 4 4 2 2 4 4 ...

labels <- model.matrix(~ pointsBin, data=cards)

head(labels)

#     (Intercept) pointsBin.lte150 pointsBin.lte200 pointsBin.lte250 pointsBin.lte300
# 741           1                0                0                0                0
# 407           1                1                0                0                0
# 676           1                0                0                1                0
# 697           1                1                0                0                0
# 422           1                0                1                0                0
# 300           1                0                1                0                0

ไม่มีคอลัมน์สำหรับค่าแรกของปัจจัยของฉัน ( ".lte100") ซึ่งเป็นสิ่งที่แถวแรกควรถูกจัดประเภทเป็น ฉันจะรับข้อมูลนี้กลับมาได้อย่างไร และคอลัมน์สกัดกั้นที่ดูเหมือนจะเป็น 1 ทั้งหมดหมายความว่าอย่างไร


3
เมื่อคุณมีตัวแปรจำลอง "K" โมเดลที่เป็นผลลัพธ์ของคุณจะมี.) คำดักจับ (ซึ่งเป็นคอลัมน์ของคน) และ b.) คอลัมน์เพิ่มเติม "K-1" เหตุผลก็เพราะมิฉะนั้นคอลัมน์ของเมทริกซ์ที่ได้จะไม่เป็นอิสระเป็นเส้นตรง (และดังนั้นคุณจะไม่สามารถทำOLS ได้ )
Steve S

2
ทำไม 'ไม่สื่อความหมาย'? มันเป็นรุ่นเดียวกันที่มีความพอดีที่ดีเหมือนกันเพียงแปรในวิธีที่ต่างกัน
Wolfgang

2
@digitgopher: เมื่อคุณเรียกใช้การถดถอยและจบลงด้วยแบบจำลองเช่นนี้: , คุณจะต้องลงท้ายด้วยรูปแบบทางเทคนิค นี่:ซึ่งคำใหม่นี้จะเท่ากับ "1" เสมอดังนั้นคอลัมน์ของ คน) หากคุณต้องกำจัดคอลัมน์ของคอลัมน์นี้เมื่อเรียกใช้การถดถอยปกติคุณจะต้องจบด้วยโมเดลที่มีอคติเนื่องจากบังคับให้คุณบังคับให้ทุกรุ่นผ่านต้นกำเนิด y^=β0+β1x1y^=β0x0+β1x1x0
Steve S

2
@SteveS: ในความเป็นจริง R นั้นเป็นมิตรมากหากคุณลองลบการสกัดกั้น - 1เมื่อคุณมีตัวทำนายหมวดหมู่เดียวที่แสดงเป็นปัจจัย (ตามคำถามนี้) มันจะถือว่าคุณไม่ได้หมายความว่า & เปลี่ยนเป็นการใช้ผลรวม - การเข้ารหัสเป็นศูนย์ ซึ่งแน่นอนว่าเป็นเพียงการเปลี่ยนแปลงที่แตกต่างกัน เป็นมิตรมากเกินไปถ้าคุณถามฉัน
Scortchi - Reinstate Monica

2
@SteveS: ขอบคุณ ฉันควรตรวจสอบแล้ว: มันเปลี่ยนเป็นการเข้ารหัสแบบเซลล์ มันไม่ได้ทำในสิ่งที่คุณคาดหวังซึ่งเหมาะกับรูปแบบที่ถูกบังคับผ่านทางต้นกำเนิดที่คุณเตือนค่อนข้างถูกต้อง (มันจะทำอย่างนั้นแม้ว่าเมื่อคอลัมน์ของประเภทตัวเลข)
Scortchi - Reinstate Monica

คำตอบ:


10

พิจารณาสิ่งต่อไปนี้:

require(mlbench)

data(HouseVotes84, package = "mlbench")
head(HouseVotes84)

labels <- model.matrix(~ V1, data=HouseVotes84)
head(labels)

labels1 <- model.matrix(~ V1+1, data=HouseVotes84)
head(labels1)

labels0 <- model.matrix(~ V1+0, data=HouseVotes84)
head(labels0)

labels_1 <- model.matrix(~ V1-1, data=HouseVotes84)
head(labels_1)

คำสั่งสองคำแรกเหมือนกัน คำสั่งสองคำสั่งสุดท้ายระบุว่าจะไม่ทำการดักจับและเก็บรักษาตัวแปรจำลองสองตัวไว้


1
ขอบคุณ - นี่อธิบายรหัสที่ฉันต้องการ แต่มันไม่ได้อธิบายว่าทำไมหรือช่วยให้ฉันเข้าใจ
digitgopher

2
@digitgopher: ดูats.ucla.edu/stat/r/library/contrast_coding.htmสำหรับคำอธิบายเกี่ยวกับการเข้ารหัสระดับอ้างอิงและรูปแบบการเข้ารหัสอื่น ๆ
Scortchi - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.