मैं अपने डेटा के केवल सबसेट पर lm () चलाने की कोशिश कर रहा हूं, और एक समस्या में चल रहा हूं।
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
lm( y ~ ., dt) # Use all x: Works
lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected)
ऊपर काम नहीं करता है क्योंकि डेटासेट में अब केवल पुरुष हैं, और इसलिए हम मॉडल में x3, लिंग चर को शामिल नहीं कर सकते हैं। परंतु...
lm( y ~ . -x3, dt[x3 == 'men']) # Exclude x3, limit to men: STILL doesn't work
lm( y ~ x1 + x2, dt[x3 == 'men']) # Exclude x3, with different notation: works great
यह सूत्र में "माइनस साइन" अंकन के साथ एक मुद्दा है? कृपया सलाह दें। नोट: बेशक मैं इसे एक अलग तरीके से कर सकता हूं; उदाहरण के लिए, मैं चर को lm () में डालने से पहले बाहर कर सकता हूं। लेकिन मैं इस सामान पर एक कक्षा पढ़ा रहा हूं, और मैं छात्रों को भ्रमित नहीं करना चाहता, पहले से ही उन्हें बताया कि वे सूत्र में ऋण चिह्न का उपयोग करके चर को बाहर कर सकते हैं।
.
साथ एक सरलीकृत सूत्र प्राप्त करने के लिए, terms(y ~ . -x3, data=dt, simplify=TRUE)
लेकिन अजीब तरह से यह अभी भी x3
चर विशेषता में बरकरार है जो यात्राएं करता हैlm
neg.out=
विकल्प संबंधित हो सकता है। एस मदद फ़ाइलों के लिए terms
, जहां neg.out=
से लागू किया गया है: "-" चिन्ह के साथ प्रवेश करने वाले शब्दों के उपचार को नियंत्रित करने वाला झंडा। यदि सही है, तो शर्तों को रद्द करने और अन्यथा अनदेखा करने के लिए जाँच की जाएगी। यदि FALSE, नकारात्मक शब्दों को बरकरार रखा जाएगा (नकारात्मक क्रम के साथ)।
lm
कॉल model.matrix
करता है। बहुत शुरुआत में, lm
निम्नलिखित अभिव्यक्ति का संकलन और मूल्यांकन करता है mf <- stats::model.frame( y ~ . -x3, dt[x3=="men"], drop.unused.levels=TRUE )
:। यह x3
एकल-स्तरीय कारक बन जाता है। model.matrix()
उसके बाद mf
मूल डेटा नहीं बुलाया जाता है , जिसके परिणामस्वरूप हम देख रहे हैं त्रुटि।
model.matrix(y ~ . - x3, data = dt[x3 == "men"])
औरmodel.matrix(y ~ x1 + x2, data = dt[x3 == "men"])
काम ( आंतरिक रूप सेlm
कॉलmodel.matrix
)। दोनों मॉडल मैट्रिस के बीच एकमात्र अंतर एक"contrasts"
विशेषता है (जिसमें अभी भी समाहित हैx3
) और जिसे बाद मेंlm
रूटीन के भीतर उठाया जाता है, जिससे आप देख रहे त्रुटि का कारण बन सकते हैं। तो मेरी भावना यह है कि इस मुद्दे कोmodel.matrix
डिज़ाइन मैट्रिक्स को कैसे और कैसे संग्रहीत किया जाता है, जब इसे हटा दिया जाता है।