Mój zestaw danych składa się z 15 zmiennych, jedna z nich (płeć) ma tylko 2 poziomy. Chcę użyć go jako sztucznej zmiennej, ale poziomy to 1 i 2. Jak to zrobić? Chcę mieć poziomy 0 i 1, ale nie wiem jak to zarządzać w R!Jak utworzyć obojętną zmienną w R?
Odpowiedz
W przypadku większości narzędzi do modelowania R za pomocą interfejsu formuły nie ma potrzeby tworzenia fałszywych zmiennych, kod źródłowy, który obsługuje i interpretuje formułę, zrobi to za Ciebie. Jeśli chcesz mieć zmienną dummy z jakiegoś innego powodu, istnieje kilka opcji. Najprostszym (IMHO) jest użycie model.matrix()
:
set.seed(1)
dat <- data.frame(sex = sample(c("male","female"), 10, replace = TRUE))
model.matrix(~ sex - 1, data = dat)
co daje:
> 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
można użyć kolumny dummy
postaci numerycznej zmiennej manekina; wybierz kolumnę, która ma być poziomem bazowym 1
. dummy[,1]
wybiera 1
jako przedstawiciela klasy kobiet i dummy[,2]
klasy męskiej.
Obsada to jako czynnik, jeśli ma to być interpretowane jako kategorycznego obiektu:
> 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
Ale to jest pokonanie przedmiot czynnika; co to jest 0
ponownie?
Ty to
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
Jeśli chcesz etykiety być 0 = 1 = Mężczyzna i Kobieta, potem ...
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
Właściwie nie trzeba utworzyć zmienną manekina w aby oszacować model używając lm
, zobaczmy ten przykład:
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
Jak widać promocje R z manekinami całkiem dobrze, po prostu przekazujesz je do formuły jako zmienną factor
, a R zrobi dla ciebie resztę.
Nawiasem mówiąc, nie ma potrzeby zmiany kategorii z c (2,1) na c (0,1), wyniki będą takie same jak w powyższym przykładzie.
Zgodnie z sugestiami wielu z powyższych, należy go zmienić na współczynnik.
Jeśli naprawdę chcesz do kodu manekina zmiennej płci, należy rozważyć ten
set.seed(100)
gender = rbinom(100,1,0.5)+1
gender_dummy = gender-1
- 1. Jak utworzyć warunkowego manekina w R?
- 2. Jak skonstruować tę zmienną binarną w R?
- 3. Jak utworzyć zmienną globalną w prologu
- 4. Jak mogę przekazać zmienną R do sqldf?
- 5. Jak programowo utworzyć funkcję R?
- 6. Jak utworzyć zmienną statyczną wątek bezpieczny
- 7. R-generuje "zmienną brakujących wartości"
- 8. Jak utworzyć plik tar.gz w R?
- 9. Jak utworzyć kopię ramki danych w R
- 10. Jak najlepiej utworzyć funkcję Timer w R
- 11. Jak utworzyć listę matrycy w R
- 12. Jak utworzyć wykres klastra w R?
- 13. Jak utworzyć macierz list w R?
- 14. Jak utworzyć podsekcję w R markdown
- 15. Script usiłował utworzyć zmienną globalną
- 16. Czy można utworzyć zmienną globalną w Opa?
- 17. Jak utworzyć nową zmienną środowiskową w systemie UNIX ....?
- 18. Jak utworzyć zmienną liczbę wyświetleń tekstu w Androidzie
- 19. Jak utworzyć brakujące wartości w tabeli w R?
- 20. R dplyr - kategoryzuj zmienną numeryczną z mutatem
- 21. Jak utworzyć nowe środowisko R z C?
- 22. Jak utworzyć timeseries R za dane godzinowe
- 23. Jak utworzyć wykres "inkblot" z R?
- 24. Czy w MATLAB można utworzyć funkcję, która niczego nie zwraca?
- 25. usunąć zmienną owinięty w zależności od modelu wzorze w R
- 26. Jak dekompilować zmienną zmienną w Javie?
- 27. Dlaczego warto utworzyć zmienną o wartości to
- 28. Oracle PL/SQL - Jak utworzyć prostą zmienną tablicową?
- 29. Jak utworzyć zmienną globalną za pomocą Play Framework 2.0
- 30. Jak mogę utworzyć procesor adnotacji, który przetwarza zmienną lokalną?
Wygląda na to pytanie poprosiłem tutaj: http://stackoverflow.com/questions/11970611/convert-a-vector-into -logiczna-matryca – Chase
Jeśli zmienisz ją na współczynnik i umieścisz w modelu R, zajmie się ona brudną pracą dla ciebie. –
@ TylerRinker Dla lm i aov tak jest i być może dla innych, ale nie zawsze. Używam daisy i nie robi tego automatycznie: Błąd w daisy (train.X, metric = "gower", type = list (symm = 1: symm_bin_len)): co najmniej jedna zmienna binarna ma więcej niż 2 poziomy . – JStrahl