73

यदि मैं एक रिग्रेशन में बाइनरी स्पष्टीकरण चर का उपयोग करता हूं तो संदर्भ के रूप में एक निश्चित स्तर का उपयोग करने के लिए मैं आर को कैसे बता सकता हूं?आर को एक रेग्रेशन में संदर्भ के रूप में निर्दिष्ट कारक स्तर का उपयोग करने के लिए कैसे मजबूर करें?

यह डिफ़ॉल्ट रूप से कुछ स्तर का उपयोग कर रहा है।

lm(x ~ y + as.factor(b)) 

b {0, 1, 2, 3, 4} के साथ। आइए मान लें कि मैं शून्य के बजाय 3 का उपयोग करना चाहता हूं जिसका प्रयोग आर

+7

आपको मॉडल सूत्र/फिटिंग के बाहर डेटा प्रोसेसिंग चरण करना चाहिए। 'बी' से कारक बनाते समय आप 'कारक (बी, स्तर = सी (3,1,2,4,5)) का उपयोग करके स्तरों के क्रम को निर्दिष्ट कर सकते हैं। यद्यपि 'lm()' कॉल के बाहर डेटा प्रोसेसिंग चरण में ऐसा करें। नीचे मेरा उत्तर 'रिलीज़()' फ़ंक्शन का उपयोग करता है ताकि आप एक कारक बना सकें और फिर संदर्भ स्तर को चारों ओर समायोजित करने के लिए बदल दें। –

+1

मैंने आपका प्रश्न दोहराया।आप वास्तव में संदर्भ स्तर को बदलने के बाद, एक बाहर नहीं छोड़ रहे हैं। मेरे प्रश्न को दोबारा दर्ज करने के लिए –

+0

thx। दरअसल, रिलीज() वह था जिसे मैं ढूंढ रहा था। विस्तृत उत्तर और उदाहरण के लिए Thx हालांकि। मुझे यकीन नहीं है कि रैखिक-प्रतिगमन टैग थोड़ा भ्रामक है क्योंकि यह डमी स्पष्टीकरणों का उपयोग करके सभी प्रकार के प्रतिगमन पर लागू होता है ... –

उत्तर

105

relevel() फ़ंक्शन देखें। यहाँ एक उदाहरण है:

set.seed(123) 
x <- rnorm(100) 
DF <- data.frame(x = x, 
       y = 4 + (1.5*x) + rnorm(100, sd = 2), 
       b = gl(5, 20)) 
head(DF) 
str(DF) 

m1 <- lm(y ~ x + b, data = DF) 
summary(m1) 

अब relevel() समारोह के उपयोग के द्वारा DF में कारक b बदल:

DF <- within(DF, b <- relevel(b, ref = 3)) 
m2 <- lm(y ~ x + b, data = DF) 
summary(m2) 

मॉडल अलग संदर्भ के स्तर का अनुमान है।

> coef(m1) 
(Intercept)   x   b2   b3   b4   b5 
    3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219 
> coef(m2) 
(Intercept)   x   b1   b2   b4   b5 
3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759 
+2

मूल चर को पूर्ववत करने के लिए, बस 'भीतर' का उपयोग न करें, लेकिन 'df $ bR = रिलीज (डीएफ $ बी, रेफरी = 3) '। – BurninLeo

24

रिलीज़() कमांड आपके प्रश्न के लिए एक लघुरूप तरीका है। यह क्या करता है कारक को फिर से व्यवस्थित करता है ताकि जो भी रेफरी स्तर हो, वह पहले हो। इसलिए, आपके कारक स्तरों को पुन: व्यवस्थित करने पर भी वही प्रभाव होगा लेकिन आपको अधिक नियंत्रण मिल जाएगा। शायद आप स्तर 3,4,0,1,2 चाहते थे। उस मामले में ...

bFactor <- factor(b, levels = c(3,4,0,1,2)) 

मैं इस विधि पसंद करते हैं क्योंकि यह आसान है मुझे मेरे कोड में देखने के लिए न केवल क्या संदर्भ था, लेकिन अन्य मूल्यों की स्थिति के साथ-साथ (बजाय को देखने के लिए की तुलना में उसके लिए परिणाम)।

नोट: इसे एक आदेशित कारक न बनाएं। एक निर्दिष्ट आदेश और एक आदेशित कारक के साथ एक कारक एक ही बात नहीं है। एलएम() यह सोचने लग सकता है कि आप बहुपद विरोधाभास चाहते हैं यदि आप ऐसा करते हैं।

+2

बहुपद विरोधाभास, बहुपद प्रतिगमन नहीं। – hadley

+0

क्या एक ही समय में संदर्भ स्तर को सेट करने का कोई तरीका है जिसे आप कारक को परिभाषित करने के बजाए कारक को परिभाषित करते हैं? –

28

अन्य ने रिलीज कमांड का उल्लेख किया है जो कि यदि आप अपने डेटा पर सभी विश्लेषणों के लिए आधार स्तर बदलना चाहते हैं (या डेटा बदलने के साथ तैयार हैं) तो सबसे अच्छा समाधान है।

यदि आप डेटा को बदलना नहीं चाहते हैं (यह एक बार परिवर्तन है, लेकिन भविष्य में आप फिर से डिफ़ॉल्ट व्यवहार चाहते हैं), तो आप सेट करने के लिए सी (नोट अपरकेस) फ़ंक्शन के संयोजन का उपयोग कर सकते हैं विरोधाभास और contr.treatments बेस तर्क के साथ काम करते हैं कि आप किस स्तर को बेसलाइन बनना चाहते हैं।

lm(Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris) 
11

आप मैन्युअल रूप से एक contrasts विशेषता है, जो प्रतिगमन कार्यों द्वारा सम्मानित किया जा रहा है के साथ स्तंभ टैग कर सकते हैं:

contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol), 
    base=which(levels(df$factorcol) == 'RefLevel')) 
3

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन मैं था उदाहरण के लिए एक समान मुद्दा और पाया कि:

lm(x ~ y + relevel(b, ref = "3")) 

वही करता है जो आपने पूछा था।

+0

यह एक बड़ी मदद थी! केवल समाधान जिसमें एलएम() कमांड के भीतर ऐसा करने का एक तरीका शामिल था जो वास्तव में मुझे चाहिए था। धन्यवाद! – seeellayewhy