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?
Antwort
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?
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.
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
- 1. Wie mache ich Iterationen in R?
- 2. Wie mache ich eine Knopfanimation?
- 3. Wie mache ich eine Zeitsequenz?
- 4. Wie mache ich eine Schleife in Assembler?
- 5. Wie mache ich eine Rohrschleife in Zsh?
- 6. Wie mache ich eine Ansicht in ios
- 7. Wie mache ich eine Breitenbindung in CSS?
- 8. Wie mache ich eine Navbar in PHP
- 9. Wie mache ich eine Kreissache in CSS?
- 10. Wie mache ich eine Teilübereinstimmung in Elasticsearch?
- 11. ggplot2 gibt mir den Blues in R in Streudiagrammen, wie mache ich eine spektrale Farbpalette?
- 12. Wie mache ich die Vereinigung von n Mengen mit R?
- 13. Wie mache ich eine einzige Bildschaltfläche?
- 14. Wie mache ich eine ausführbare Datei in eine Desktop-Anwendung
- 15. Wie mache ich eine Taste eine Schleife in Java laufen
- 16. Wie mache ich eine skinfähige Anwendung?
- 17. Wie mache ich eine JPQL-Unteranfrage?
- 18. Wie mache ich eine Arraylist public
- 19. Wie mache ich eine ListPreference mit Checkbox
- 20. Wie mache ich eine Schattenbox mit Farbverlauf?
- 21. Wie mache ich eine komplexe Liste zu einem Datenrahmen in R?
- 22. Wie mache ich eine ausführbare Datei von R Project, das in RStudio entwickelt wurde?
- 23. Wie mache ich eine saubere asynchrone Schleife?
- 24. Wie mache ich eine Variable local
- 25. Wie mache ich eine aspxdocumentviewer Richtung rtl?
- 26. Wie mache ich eine href zu Port?
- 27. Wie mache ich eine SQL-Suchabfrage leistungsfähiger?
- 28. Wie mache ich eine einfache Zeitreihe?
- 29. RxJava: Wie mache ich eine Observable Observable?
- 30. Wie mache ich eine Kompilierung compileSdkVersion?
Klingt wie diese Frage, die ich hier gefragt: http://stackoverflow.com/questions/11970611/convert-a-vector-into -logical-matrix – Chase
Wenn du es in einen Faktor verwandelst und es in ein Modell eingibst, kümmert sich R für dich um die Drecksarbeit. –
@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