การเข้ารหัสตัวแปรเชิงคุณภาพในการถดถอยนำไปสู่“ ภาวะเอกฐาน”


17

ฉันมีตัวแปรอิสระที่เรียกว่า "คุณภาพ" ตัวแปรนี้มีการตอบสนอง 3 แบบ (คุณภาพไม่ดีคุณภาพปานกลาง; คุณภาพสูง) ฉันต้องการแนะนำตัวแปรอิสระนี้ในการถดถอยเชิงเส้นหลายครั้งของฉัน เมื่อฉันมีตัวแปรไบนารีอิสระ (ตัวแปรดัมมี่ฉันสามารถโค้ด0/ 1) มันเป็นเรื่องง่ายที่จะแนะนำมันในรูปแบบการถดถอยเชิงเส้นหลายแบบ

แต่ด้วยการตอบสนอง 3 แบบฉันได้ลองใช้รหัสตัวแปรนี้ดังนี้

Bad quality      Medium quality      High quality

     0                1                  0
     1                0                  0
     0                0                  1
     0                1                  0

แต่มีปัญหาเมื่อฉันพยายามทำการถดถอยเชิงเส้นหลายครั้ง: วิธีการMedium qualityให้ฉันNA:

Coefficients: (1 not defined because of singularities) 

ฉันจะเขียนโค้ด "คุณภาพ" ตัวแปรนี้ด้วย 3 แบบได้อย่างไร ฉันต้องสร้างตัวแปรเป็นปัจจัย ( factorในR) แต่จากนั้นฉันจะสามารถแนะนำปัจจัยนี้ในการถดถอยเชิงเส้นหลายครั้งได้หรือไม่?


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

1
มีคำอธิบายที่โดดเด่นในบริบททางสถิติของสิ่งที่ถือเป็นเมทริกซ์เอกพจน์ที่นี่: what-correlation-make-a-matrix-singular?
gung - Reinstate Monica

คำตอบ:


23

ปัญหาที่คุณมี (เช่น "เอกพจน์") สามารถถูกมองว่าเป็นตัวอย่างของพหุ Multicollinearity มักถูกกำหนดเป็น:

ตัวแปรทำนายอย่างน้อยหนึ่งรายการเป็นชุดค่าผสมเชิงเส้นของตัวแปรพยากรณ์อื่น ๆ

อันที่จริงแล้วคำจำกัดความที่ค่อนข้างเข้มงวดคือ มันเป็นmulticollinearity ที่สมบูรณ์แบบและคุณสามารถมีปัญหากับ multicollinearity ได้อย่างง่ายดายโดยไม่ต้องมีตัวแปรใด ๆ ของคุณที่เป็นชุดค่าผสมเชิงเส้นที่สมบูรณ์แบบของผู้อื่น ยิ่งไปกว่านั้นความสัมพันธ์อันสมบูรณ์แบบที่ไม่ค่อยเกิดขึ้น อย่างไรก็ตามคุณได้พบกรณีที่สามารถเกิดขึ้นได้ ให้เราดูว่าเราสามารถที่ดีที่สุดที่คาดการณ์medium qualityจากความรู้ของทั้งสองประเภทของเรา (เราจะทำเช่นนี้กับตัวแบบการถดถอยที่medium qualityเป็นและและเป็น+ β 2 X 2 หมายเหตุว่าไม่มีคำผิดพลาดεYbad qualityhigh quality & X 2ตามลำดับ): Y = β 0 + β 1X1X2
- 1 ตอนนี้เมื่อคุณมีแล้ว X 1 = 1ซึ่งยกเลิก β 0 ( 1

Y=β0+β1X1+β2X2
εระบุเนื่องจากเราสามารถทำนายได้อย่างสมบูรณ์แบบ หากต้องการทำเช่นนั้นเราตั้งค่า , β 1 = - 1 , และβ 2 =β0=1β1=1β2=1bad qualityX1=1β0 ) และ X 2 = 0ดังนั้นคำนั้นจะถูกยกเลิกเช่นกัน ( - 1 × 0 ) ดังนั้นเราจึงเหลือค่าที่คาดการณ์ไว้ 0สำหรับ Y (1+1×1X2=01×00Ymedium quality ) ซึ่งถูกต้องแน่นอน ฉันจะปล่อยให้คุณคิดออกความเป็นไปได้อื่น ๆ (มันใช้ได้ผลเสมอในกรณีของคุณ)

0Rคุณสามารถใช้factorและR จะทำทุกอย่างให้คุณ - จะทำได้อย่างถูกต้องและสะดวกกว่า - อย่างไรก็ตามมันคุ้มค่าที่จะเข้าใจว่านี่คือสิ่งที่เกิดขึ้น 'เบื้องหลัง'


ขอบคุณสำหรับความคิดเห็นของคุณ! ฉันใช้ R ดังนั้นถ้าฉันเข้าใจดีด้วยปัจจัย R จะทำทุกอย่างฉันไม่จำเป็นต้องทำอะไร! สมบูรณ์แบบ! รถถังอีกครั้ง!
varin sacha

หากคุณตั้งค่าการสกัดกั้นให้เป็นศูนย์ในlmสูตร ( + 0) จะใช้งานได้หรือไม่
Firebug

1
@ Firebug หากคุณใช้ระดับหมายถึงการเข้ารหัส (เช่นคุณมีตัวแปรแยกต่างหากสำหรับทุกระดับ) จากนั้นคุณสามารถตั้งค่าการสกัดกั้นให้เป็นศูนย์และควรทำงานได้ดี แม้ว่าความหมายของสัมประสิทธิ์ตัวแปรและการทดสอบสมมติฐานจะแตกต่างกัน
gung - Reinstate Monica

10

@ gung ได้อธิบายทฤษฎีอย่างชัดเจนแล้ว นี่เป็นตัวอย่างที่ใช้งานได้จริงเพื่ออธิบาย:

set.seed(1)
pred1 <- factor(c("bad", "med", "high"), levels=c("bad", "med", "high"))
df1 <- data.frame(y=20*abs(runif(6)),
                  x=rnorm(6),
                  q=sample(pred1, 6, replace=TRUE)
                  )
l1 <- lm(y ~ x, data=df1)
### add variable q    
l2 <- lm(y ~ x + q, data=df1)
### look at dummy variables generated in creating model
model.matrix(l2)

สิ่งนี้แสดงให้เราเห็นว่าระดับการอ้างอิง (ทั้งหมด 0bad

  (Intercept)          x qmed qhigh
1           1  1.5952808    1     0
2           1  0.3295078    0     1
3           1 -0.8204684    0     1
4           1  0.4874291    0     0
5           1  0.7383247    1     0
6           1  0.5757814    0     0

ทีนี้ถ้าเราเขียนรหัสตัวแปรจำลองด้วยตัวเองแล้วลองปรับให้เข้ากับแบบจำลองโดยใช้ทั้งหมด:

df1 <- within(df1, {
       qbad <- ifelse(q=="bad", 1, 0)
       qmed <- ifelse(q=="med", 1, 0)
       qhigh <- ifelse(q=="high", 1, 0)
       })    
lm(y ~ x + qbad + qmed + qhigh, data=df1, singular.ok=FALSE)

เราได้รับข้อผิดพลาดที่คาดไว้: singular fit encountered


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