2012-10-11 10 views
6

Also besteht mein Datensatz aus 15 Variablen, eine davon (Sex) hat nur 2 Ebenen. Ich möchte es als eine Dummy-Variable verwenden, aber die Ebenen sind 1 und 2. Wie mache ich das? Ich möchte Level 0 und 1 haben, aber ich weiß nicht, wie ich das in R schaffen soll!Wie mache ich eine Dummy-Variable in R?

+1

Klingt wie diese Frage, die ich hier gefragt: http://stackoverflow.com/questions/11970611/convert-a-vector-into -logical-matrix – Chase

+3

Wenn du es in einen Faktor verwandelst und es in ein Modell eingibst, kümmert sich R für dich um die Drecksarbeit. –

+0

@TylerRinker Für lm und aov ist das der Fall, und vielleicht für andere, aber nicht immer. Ich benutze Daisy und es tut dies nicht automatisch: Fehler in Daisy (Zug.X, Metric = "Gower", Typ = Liste (Symm = 1: Symm_bin_len)): mindestens eine Binärvariable hat mehr als 2 Ebenen . – JStrahl

Antwort

20

Bei den meisten Modellierungswerkzeugen von R mit einer Formelschnittstelle müssen Sie keine Dummy-Variablen erstellen. Der zugrunde liegende Code, der die Formel verarbeitet und interpretiert, wird dies für Sie tun. Wenn Sie eine Dummy-Variable aus einem anderen Grund möchten, gibt es mehrere Optionen. Die einfachste (IMHO) ist model.matrix() zu verwenden:

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

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

die gibt:

> 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 

Sie entweder Spalte von dummy als numerischen Dummy-Variable verwenden können; Wählen Sie die Spalte aus, die Sie als 1-basierte Ebene verwenden möchten. dummy[,1] wählt 1 als Vertreter der weiblichen Klasse und dummy[,2] die männliche Klasse.

Guss dies als Faktor, wenn Sie es wollen, als kategorisches Objekt interpretiert werden:

> 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 

Aber das das Objekt des Faktors besiegen; Was ist 0 wieder?

9

Ty diesen

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 

Wenn Sie Etiketten wollen 0 = männlich und 1 = weiblich sein, dann ...

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 

Eigentlich brauchen Sie nicht über ein Dummy-Variable zu schaffen, in um ein Modell mit lm abschätzen zu können, lassen Sie uns dieses Beispiel sehen:

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 

Wie Sie R Angeboten mit den Dummies ziemlich gut, übergeben Sie sie einfach in die Formel als factor Variable und R wird den Rest für Sie tun.

Übrigens ist es nicht notwendig, die Kategorien von c (2,1) in c (0,1) zu ändern, die Ergebnisse sind die gleichen wie im obigen Beispiel.

1

Wie von vielen oben vorgeschlagen, drehen Sie es in Faktor.

Wenn Sie wirklich das Geschlecht Variable Blindkode wollen, betrachten Sie dieses

set.seed(100) 
gender = rbinom(100,1,0.5)+1 
gender_dummy = gender-1 
Verwandte Themen