Por lo tanto, mi conjunto de datos consta de 15 variables, una de ellas (sexo) tiene solo 2 niveles. Quiero usarlo como una variable ficticia, pero los niveles son 1 y 2. ¿Cómo hago esto? Quiero tener los niveles 0 y 1, pero no sé cómo administrar esto en R!¿Cómo puedo hacer una variable ficticia en R?
Respuesta
Con la mayoría de las herramientas de modelado de R con una interfaz de fórmula, no necesita crear variables ficticias, el código subyacente que maneja e interpreta la fórmula lo hará por usted. Si desea una variable ficticia por alguna otra razón, entonces hay varias opciones. La forma más fácil (en mi humilde opinión) es utilizar model.matrix()
:
set.seed(1)
dat <- data.frame(sex = sample(c("male","female"), 10, replace = TRUE))
model.matrix(~ sex - 1, data = dat)
lo que da:
> 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
Puede utilizar cualquiera de las columnas de dummy
como una variable binaria numérica; elija la columna que desee que sea el nivel 1
. dummy[,1]
elige 1
como representando la clase femenina y dummy[,2]
la clase masculina.
moldeada esto como un factor si se quiere que sea interpretado como un objeto contundente:
> 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
Pero eso es derrotar el objeto del factor; ¿Qué es 0
otra vez?
Ty este
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
Si desea que las etiquetas sean 0 = 1 = masculina y femenina, entonces ...
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
En realidad no es necesario para crear una variable ficticia en para estimar un modelo utilizando lm
, veamos este ejemplo:
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
Como se puede ver ofertas R con los maniquíes bastante bien, simplemente pásalos a la fórmula como variable factor
y R hará el resto por ti.
Por cierto, no hay necesidad de cambiar las categorías de c (2,1) a c (0,1), los resultados serán los mismos que se pueden ver en el ejemplo anterior.
Según lo sugerido por muchos más arriba, conviértalo en factor.
Si realmente desea código ficticio la variable de género, considere esto
set.seed(100)
gender = rbinom(100,1,0.5)+1
gender_dummy = gender-1
- 1. Combinar múltiples variables categóricas en una variable ficticia
- 2. desempaquetado de Tuple: variable ficticia vs índice
- 3. Cómo hacer introspección en R
- 4. R. cómo hacer una lista de listas en R?
- 5. ¿Qué puedo hacer con una variable enum?
- 6. Declarando una variable Const en R
- 7. MySQL select que devuelve una columna ficticia?
- 8. ¿Puedo hacer referencia a una variable usando una cadena?
- 9. ¿Cómo puedo hacer que R lea mis variables ambientales?
- 10. ¿Cómo puedo pasar la variable R a sqldf?
- 11. ¿Cómo hacer afirmaciones en R?
- 12. Intercalando una variable numérica en R
- 13. Cómo eliminar "0." líder en una variable R numérica
- 14. Seleccione una columna ficticia con un valor ficticio en SQL?
- 15. En R, ¿cómo creo variables de factores agrupados de una variable continua, con saltos personalizados?
- 16. Cómo hacer una lista de vectores enteros en R
- 17. ¿Cómo puedo volcar una variable en JSP?
- 18. ¿Cómo puedo definir una variable en XAML?
- 19. Crear una variable categórica en R basada en el rango
- 20. ¿Qué puedo hacer con una variable estática protegida/privada?
- 21. ¿Qué ... = ... hacer en R?
- 22. ¿Puedo hacer eco de una variable con comillas simples?
- 23. ¿Puedo hacer una variable final después de haber sido declarada?
- 24. ¿Cómo puedo establecer una variable en una página _Layout?
- 25. ¿Cómo puedo incrementar una variable Smarty?
- 26. ¿Cómo puedo generar una variable en una prueba de rspec?
- 27. ¿Cómo puedo hacer que R trace localmente en una conexión ssh remota?
- 28. ¿Cómo puedo hacer una lista de todos los pares únicos de puntos de datos en R?
- 29. cómo hacer referencia a una variable dinámicamente en javascript
- 30. ¿Puedo hacer una constante a partir de una variable env en tiempo de compilación en csharp?
suena así pregunta que hice aquí: http://stackoverflow.com/questions/11970611/convert-a-vector-into -logical-matrix – Chase
Si lo convierte en un factor y lo pone en un modelo, R se encargará del trabajo sucio para usted. –
@TylerRinker Para lm y aov este es el caso, y tal vez para otros, pero no siempre. Estoy usando daisy y no lo hago automáticamente: Error en daisy (train.X, metric = "gower", type = list (symm = 1: symm_bin_len)): al menos una variable binaria tiene más de 2 niveles . – JStrahl