2012-10-11 29 views
6

तो, मेरे डेटा सेट में 15 चर शामिल हैं, उनमें से एक (लिंग) में केवल 2 स्तर हैं। मैं इसे एक डमी चर के रूप में उपयोग करना चाहता हूं, लेकिन स्तर 1 और 2 हैं। मैं यह कैसे कर सकता हूं? मैं स्तर 0 और 1 रखना चाहता हूं, लेकिन मुझे नहीं पता कि आर में इसका प्रबंधन कैसे करें!मैं आर में डमी चर कैसे बना सकता हूं?

+1

इस सवाल का मैं यहाँ से पूछा की तरह लगता है: http://stackoverflow.com/questions/11970611/convert-a-vector-into -लोगिकल-मैट्रिक्स – Chase

+3

यदि आप इसे एक कारक में बदल देते हैं और इसे मॉडल मॉडल में डालते हैं तो आपके लिए गंदे काम का ख्याल रखता है। –

+0

@TylerRinker एलएम और एओवी के लिए यह मामला है, और शायद दूसरों के लिए, लेकिन हमेशा नहीं। मैं डेज़ी का उपयोग कर रहा हूं और यह स्वचालित रूप से ऐसा नहीं करता है: डेज़ी में त्रुटि (ट्रेन.एक्स, मीट्रिक = "गॉवर", टाइप = सूची (symm = 1: symm_bin_len)): कम से कम एक बाइनरी चर 2 स्तर से अधिक है । – JStrahl

उत्तर

20

आर के मॉडलिंग टूल के साथ फ़ॉर्मूला इंटरफ़ेस के साथ आपको डमी चर बनाने की आवश्यकता नहीं है, अंतर्निहित कोड जो सूत्र को संभालता है और व्याख्या करता है, यह आपके लिए करेगा। यदि आप किसी अन्य कारण के लिए डमी चर चाहते हैं तो कई विकल्प हैं। सबसे आसान (IMHO) उपयोग करने के लिए है model.matrix():

set.seed(1) 
dat <- data.frame(sex = sample(c("male","female"), 10, replace = TRUE)) 

model.matrix(~ sex - 1, data = dat) 

जो देता है:

> dummy <- model.matrix(~ sex - 1, data = dat) 
> dummy 
    sexfemale sexmale 
1   0  1 
2   0  1 
3   1  0 
4   1  0 
5   0  1 
6   1  0 
7   1  0 
8   1  0 
9   1  0 
10   0  1 
attr(,"assign") 
[1] 1 1 
attr(,"contrasts") 
attr(,"contrasts")$sex 
[1] "contr.treatment" 

> dummy[,1] 
1 2 3 4 5 6 7 8 9 10 
0 0 1 1 0 1 1 1 1 0 

आपको अंकीय डमी चर के रूप में dummy के दोनों स्तंभ का उपयोग कर सकते हैं; आप जिस भी कॉलम को 1-आधारित स्तर बनना चाहते हैं उसे चुनें। dummy[,1] मादा वर्ग और dummy[,2] पुरुष वर्ग का प्रतिनिधित्व करने के रूप में 1 चुनता है। एक कारक के रूप

कास्ट यह आप चाहते हैं अगर यह एक स्पष्ट उद्देश्य के रूप में व्याख्या की जा करने के लिए:

> factor(dummy[, 1]) 
1 2 3 4 5 6 7 8 9 10 
0 0 1 1 0 1 1 1 1 0 
Levels: 0 1 

लेकिन उस कारक की वस्तु को हराने है; 0 फिर से क्या है?

9

Ty इस

set.seed(001) # generating some data 
sex <- factor(sample(1:2, 10, replace=TRUE)) # this is what you have 
[1] 1 1 2 2 1 2 2 2 2 1 
Levels: 1 2 

sex<-factor(ifelse(as.numeric(sex)==2, 1,0)) # this is what you want 
sex 
[1] 0 0 1 1 0 1 1 1 1 0 
Levels: 0 1 

आप लेबल 0 = पुरुष और 1 होना चाहते हैं = महिला, फिर ...

sex<-factor(ifelse(as.numeric(sex)==2, 1,0), labels=c('M', 'F')) 
sex # this is what you want 
[1] M M F F M F F F F M 
Levels: M F 

वास्तव में आप में एक डमी चर बनाने के लिए की जरूरत नहीं है एक मॉडल lm का उपयोग कर अनुमान लगाने के लिए आदेश, चलो इस उदाहरण देखें:

set.seed(001) # Generating some data 
N <- 100 
x <- rnorm(N, 50, 20) 
y <- 20 + 3.5*x + rnorm(N) 
sex <- factor(sample(1:2, N, replace=TRUE)) 

# Estimating the linear model 
lm(y ~ x + sex) # using the first category as the baseline (this means sex==1) 

Call: 
    lm(formula = y ~ x + sex) 

Coefficients: 
(Intercept)   x   sex2 
    19.97815  3.49994  -0.02719  


# renaming the categories and labelling them 
sex<-factor(ifelse(as.numeric(sex)==2, 1,0), labels=c('M', 'F')) 
lm(y ~ x + sex) # the same results, baseline is 'Male' 

Call: 
lm(formula = y ~ x + sex) 

Coefficients: 
(Intercept)   x   sexF 
    19.97815  3.49994  -0.02719 

आप आर सौदों देख सकते हैं डमी बहुत अच्छी तरह से, आप उन्हें फॉर्मूला में factor चर के रूप में पास करते हैं और आर आपके लिए बाकी कर देगा।

जिस तरह से सी (2,1) से सी (0,1) में श्रेणियों को बदलने की आवश्यकता नहीं है, परिणाम वही होंगे जैसा आप ऊपर दिए गए उदाहरण में देख सकते हैं।

1

जैसा कि उपरोक्त कई लोगों द्वारा सुझाया गया है, इसे कारक में बदल दें।

तुम सच में डमी कोड को लिंग चर चाहते हैं, पर विचार यह

set.seed(100) 
gender = rbinom(100,1,0.5)+1 
gender_dummy = gender-1 
संबंधित मुद्दे