generar - regresion con variables dummy en r
¿Cómo hago una variable ficticia en R? (3)
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. El más fácil (en mi humilde opinión) es usar 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 usar cualquiera de las columnas del dummy
como una variable ficticia numérica; elija la columna que desee que sea el nivel 1
. dummy[,1]
elige 1
como representando la clase femenina y el dummy[,2]
la clase masculina.
Eche esto como un factor si quiere que se interprete como un objeto categórico:
> 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 al objeto de factor; ¿Qué es 0
nuevo?
Entonces, 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!
Ty esto
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 = Hombre y 1 = Mujer, 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 necesita crear una variable ficticia para estimar un modelo usando 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 puede ver, R trata bastante bien con los maniquíes, simplemente los pasa a la fórmula como variable de factor
y R hará el resto por usted.
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.
Como lo sugirieron muchos más arriba, conviértalo en factor.
Si realmente quieres un código ficticio de la variable de género, considera esto
set.seed(100)
gender = rbinom(100,1,0.5)+1
gender_dummy = gender-1