Estas variables se suelen representar a partir de variables
ficticias o binarias, que toman valores 1 o 0, siendo el valor de 1 el que
corresponde al grupo indicado en el nombre de la variable. Pero dado que una
variable puede representar más de una condición, existe además una infinidad de
variables cualitativas multinomiales.
Caso 1. Usar una variable
dummy (diferencial de intercepto)
R permite introducir información cualitativa en los modelos de
regresión solo con agregarla en el argumento de fórmula de la función lm como
cualquier otra variable. En tal sentido, verifique el siguiente ejemplo donde
se incorpora una variable binaria (service) que asume el valor de 1 en el caso
de que la persona pertenezca al sector servicios y 0 en caso contrario.
library(wooldridge)
result1
<- lm(wage~educ+exper+I(exper^2)+tenure+services, data=wage1)
summary(result1)
Residuals:
Min 1Q Median 3Q
Max
-7.1447
-1.8437 -0.5241 1.1607 14.1117
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.2294757 0.7179771
-4.498 8.47e-06 ***
educ
0.5503021 0.0503965 10.919 < 2e-16 ***
exper
0.2051971 0.0358067 5.731 1.70e-08 ***
I(exper^2) -0.0041614
0.0007783 -5.347 1.34e-07 ***
tenure
0.1568125 0.0211155 7.426 4.60e-13 ***
services
-1.0904689 0.4362476 -2.500 0.0127 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual
standard error: 2.99 on 520 degrees of freedom
Multiple
R-squared: 0.3506, Adjusted
R-squared: 0.3444
F-statistic:
56.16 on 5 and 520 DF, p-value: < 2.2e-16
La interpretación del coeficiente (-1.0904689) asociado a esta
variable se realiza tomando esperanza condicional de la variable dependiente, y
luego estableciendo diferencias entre estas esperanzas. Por lo que, este
coeficiente se interpreta como un diferencial de intercepto, o la diferencia
entre los salarios promedios condicionales de las personas en el sector
servicio, respecto al grupo de referencia que en este caso corresponde a todas
las personas que trabajan fuera de del sector servicios.
Puntualmente, se verifica un coeficiente estadísticamente
significativo, que indica que existe evidencia de que estos promedios
condicionales son estadísticamente diferente, siendo el salario promedio del
sector servicios de 1.0904 dólares inferior respecto a los trabajadores de los
sectores no servicio (grupo de referencia).
Por último, al ser un diferencial de intersectos, se tiene dos
modelos, en función del sector de la economía:
Servicio: b_0 + b_1 X + u
No servicio: (b_0 + b_servises) + b_1 X + u
b_servises es una diferencia lineal del salario entre
personas del sector servicio y no, manteniendo contante, el resto de variables
del modelo.
Caso 1a. Usar una variable
dummy (diferencial de intercepto) en el modelo log-nivel
En R, solo debemos anidar la variable y en la función log para
obtener una semi-elasticidad. En este caso, el coeficiente asociado a la
variable dummy indica una diferencia salarial porcentual entre ambos grupos. Es
decir, las personas del sector servicio ganan en promedio 23.95% menos que los
trabajadores de otros sectores, controlando por las variables del modelo y
manteniendo constante los factores externos.
result1a
<- lm(log(wage)~educ+exper+I(exper^2)+tenure+services, data=wage1)
summary(result1a)
Call:
lm(formula = log(wage) ~ educ + exper + I(exper^2) + tenure +
services, data = wage1)
Residuals:
Min 1Q Median
3Q Max
-1.75606 -0.28168 -0.04136 0.27468 1.26057
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.2401542 0.1011671 2.374 0.017967
*
educ 0.0839936 0.0071012
11.828 < 2e-16 ***
exper 0.0328739 0.0050454
6.516 1.71e-10 ***
I(exper^2) -0.0006517 0.0001097 -5.942 5.16e-09 ***
tenure 0.0198183 0.0029753
6.661 6.94e-11 ***
services -0.2394655 0.0614698 -3.896 0.000111
***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.4213 on 520 degrees of freedom
Multiple R-squared: 0.3776, Adjusted
R-squared: 0.3716
F-statistic: 63.1 on 5 and 520 DF, p-value: < 2.2e-16
Caso 2. Varias variables
dummy
En el ejemplo anterior consideramos una variable que asumía dos
valores (1 y 0, según perteneciera o no al sector servicios), sin embargo,
muchas variables cualitativas incorporan más de dos categorías, por lo que
pueden asumir más de dos valores. Para introducir este tipo de variables
tenemos varias opciones, una de ellas es crear una variable binaria para cada
categoría. Por ejemplo, considere una variable x que indique sectores de la
economía: a, b y c. En tal caso se crearían tres variables binarias, una para
cada sector, y se utilizarían dos de estas en el modelo de regresión, de la
misma manera que se verificó en el caso 1 (una menos al total de categorías
creadas). En el caso de varias variables dummy, la interpretación sigue el hilo
anterior, pero con la precaución de que al tener varios grupos representados
(digamos g grupos) en estas variables, debemos agregar g-1 grupos a nuestro
modelo, o estimarlo sin constante, para evitar la trampa de la variable binaria
asociada a la multicolinealidad.
Para ilustrar un ejemplo en donde se creen las variables, vamos a
crear tres variables binarias asociadas al nivel educativo. Una forma sencilla
de recodificar variables en R se obtiene la función recode del paquete car:
library(car)
# para recode
educR<-recode(wage1$educ,"0:5='Elementar';6:12='Media';else='High'")
educR<-factor(educR)
D1<-model.matrix(~educR-1)
D1<-data.frame(educR,D1)
Una vez creadas las variables, la combinamos con la base de dato
anterior:
wage1_d
<- cbind(wage1,D1)
Ahora estimamos el modelo de regresión, de forma tal que de estas
tres variables (g=3), solo ingresamos 2 categorías (g-1). Ahora tenemos varias
variables dummy con el objetivo de representar información ordinal, su
interpretación continúa siendo análoga a la usada en el caso 1, los
coeficientes asociados a las variables educRMedia y educRHigh indican
diferencias en entre el promedio condicional del salario en los grupos
indicados por las variables, respecto al grupo de referencia o categoría
omitida. Como se verifica, el nivel educativo medio no presenta (en promedio)
diferencias salariales significativa respecto al grupo de referencia, contrario
al nivel máximo, que si muestra diferencias significativas.
result2
<- lm(wage~educRMedia+educRHigh+exper+I(exper^2)+tenure+services,
data=wage1_d )
summary(result2)
Call:
lm(formula = wage ~ educRMedia + educRHigh + exper + I(exper^2) +
tenure + services, data = wage1_d)
Residuals:
Min 1Q Median 3Q
Max
-8.1728
-1.8342 -0.4623 1.2335 14.8286
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
1.4193509 1.1892332 1.194 0.23322
educRMedia
1.3399581 1.1491717 1.166 0.24414
educRHigh
3.6804020 1.1696739 3.147 0.00175 **
exper 0.2334177 0.0373467 6.250
8.57e-10 ***
I(exper^2) -0.0051251 0.0008066 -6.354 4.60e-10 ***
tenure 0.1534251 0.0221193 6.936
1.20e-11 ***
services -1.1412360 0.4566512 -2.499 0.01276
*
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual
standard error: 3.117 on 519 degrees of freedom
Multiple
R-squared: 0.2959, Adjusted
R-squared: 0.2878
F-statistic:
36.36 on 6 and 519 DF, p-value: < 2.2e-16
Una alternativa al procedimiento anterior, que evita tener que
crear una dummy para cada categoría, se obtiene indicándole a R que la variable
recodificada (educR) es un factor (en caso de no haberla convertido antes, en
este caso, como la habíamos convertido en una factor con anterioridad, pudiésemos
introducirla directamente en la ecuación y R la reconocería automáticamente),
note que en este caso, R omite por default una de las categorías para evitar el
problema de multicolinealidad perfecta en el modelo.
# alternativa
de estimación
result2a
<- lm(wage~factor(educR)+exper+I(exper^2)+tenure+services,
data=wage1_d )
summary(result2a)
Residuals:
Min 1Q Median 3Q
Max
-8.1728
-1.8342 -0.4623 1.2335 14.8286
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
1.4193509 1.1892332 1.194
0.23322
factor(educR)High
3.6804020 1.1696739 3.147 0.00175 **
factor(educR)Media 1.3399581 1.1491717 1.166
0.24414
exper
0.2334177 0.0373467
6.250 8.57e-10 ***
I(exper^2) -0.0051251 0.0008066
-6.354 4.60e-10 ***
tenure 0.1534251
0.0221193 6.936 1.20e-11 ***
services -1.1412360
0.4566512 -2.499 0.01276 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual
standard error: 3.117 on 519 degrees of freedom
Multiple
R-squared: 0.2959, Adjusted
R-squared: 0.2878
F-statistic:
36.36 on 6 and 519 DF, p-value: < 2.2e-16
Aquí hago un paréntesis para mostrar cómo crear una dummy para
cada categoría en los casos en donde deseamos combinar un grupo de variables.
Por ejemplo, sectores de la economía según condición de formalidad. Donde se necesitarían
crear dos dummys para cada sector, según sean formales o informales, de forma
tal, que, de tener 12 sectores, necesitaríamos 24 variables, y en caso de
combinar categorías adicionales, aumentaría la cantidad de variables.
sector<-c("a","b","c","a","b","c","a","b","c")
mujer<-c(1,1,1,0,0,0,1,0,1)
categorias<-factor(paste(sector,mujer,sep=""))
dummysNew
<- model.matrix(~categorias-1)
Podemos crear una función propia que resuma esta tarea, para evitar tener que repetir los códigos.
Para evitar tener que repetir este procedimiento siempre, podemos
crear una función propia que nos ayude a crear variable dummy para todas las categorías,
independientemente al número de variables especificadas.
creadummy_cateroria <- function(...) {
categorias
<- factor(paste(..., sep=""))
#Imprimir un mensaje y un resultado al usar la función
print("Categorías creadas")
print(table(categorias))
# Crear una dummy por categoría
dummysNew
<- model.matrix(~categorias-1)
return(dummysNew)
}
User-written Functions (tomado de Quick-R)
myfunction
<- function(arg1, arg2, ... ){
statements
return(object)
}
statements
return(object)
}
Usar la función
creada
sector<-c("a","b","c","a","b","c","a","b","c")
mujer<-c(1,1,1,0,0,0,1,0,1)
sangre<-c("a+","a-","o-")
creadummy<-creadummy_cateroria(sector,mujer,sangre)
creadummy
Caso 3: Interacciones entre
dos variables binarias
Las formas funcionales de los modelos nos permiten especificar que
el efecto de una determinada variable depende del nivel de otra, al ingresar en
nuestro modelo interacciones entre variables. En el caso de variables binarias,
al ingresarla en el modelo de regresión permite obtener una prima entre grupos.
Por ejemplo, considere deseamos verificar si el efecto de trabajar en el sector
servicio es el mismo para hombres que para mujeres (repitiendo el modelo del
caso 2), para esto, incluimos una interacción entre servicios y female
Note que ahora el efecto derivado de estar en el sector servicio,
depende de si la persona es mujer o no. En decir, a partir de las siguientes
esperanzas condicionales, los coeficientes nos muestran promedios salariales
para grupos específicos. Ahora, pese a que al parecer las mujeres de la muestra
ganan menos que lo hombres, a lo interno del sector servicios estas verifican
mejores salarios respecto, al comparar las siguientes esperanzas condicionales.
result3
<- lm(wage~educ+exper+I(exper^2)+tenure+services+female+I(services*female),
data=wage1)
summary(result3)
Call:
lm(formula = wage ~ educ + exper + I(exper^2) + tenure + services +
female + I(services * female), data = wage1)
Residuals:
Min 1Q Median 3Q Max
-7.037
-1.680 -0.443 1.148 13.505
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
-2.0059036 0.7126790 -2.815
0.00507 **
educ
0.5286622 0.0486863 10.859 < 2e-16 ***
exper
0.2038801 0.0344153 5.924 5.73e-09 ***
I(exper^2) -0.0040753
0.0007481 -5.448 7.91e-08 ***
tenure 0.1303410
0.0206478 6.313 5.90e-10 ***
services -1.1910660
0.6857128 -1.737 0.08299 .
female
-1.7983762
0.2710137 -6.636 8.15e-11 ***
I(services * female) 0.5687815 0.8693211 0.654
0.51322
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual
standard error: 2.871 on 518 degrees of freedom
Multiple
R-squared: 0.4037, Adjusted
R-squared: 0.3956
F-statistic:
50.1 on 7 and 518 DF, p-value: < 2.2e-16
Note, que, al tomar esperanzas condicionales, los coeficientes
asociados a las variables binarias y sus interacciones muestran información
sobre los salarios promedios por grupos:
1) mujer en sector servicio:
b_0+b_services+b_female+b_(services*female);
2) mujer fuera del sector servicio: b_0+b_female;
3) hombre en sector servicio: b_0+b_services;
4) hombre fuera del sector servicio: b_0.
Finalmente, debe quedar claro que pudo obtenerse este resultado
generando una variable con cuatro grupos:
1) mujer en sector servicio;
2) mujer fuera del sector servicio;
3) hombre en sector servicio;
4) hombre fuera del sector servicio,
y comparar los resultados entre grupos.
Caso 4: Interacciones entre
1 dummy y una variable cualitativa (Diferencial de pendiente)
Consideremos ahora que el efecto de un año adicional de educación
depende de si la persona es mujer o no. Para esto utilizamos una
interacción entre ambas variables [I(educ*female)].
result4
<-
lm(wage~educ+I(educ*female)+exper+I(exper^2)+tenure+services+female+I(services*female),
data=wage1)
summary(result4)
Call:
lm(formula = wage ~ educ + I(educ * female) + exper + I(exper^2) +
tenure + services + female + I(services * female), data =
wage1)
Residuals:
Min 1Q Median 3Q
Max
-7.0552
-1.6491 -0.4107 1.1146 13.9782
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
-2.6979640 0.8511412 -3.170
0.00162 **
educ
0.5827240 0.0607731 9.589 < 2e-16 ***
I(educ * female) -0.1399881 0.0943800
-1.483 0.13862
exper
0.2023252
0.0343915 5.883 7.24e-09 ***
I(exper^2) -0.0040311
0.0007478 -5.390 1.07e-07 ***
tenure 0.1315638
0.0206404 6.374 4.08e-10 ***
services -1.2136838
0.6850896 -1.772 0.07706 .
female
-0.0325891
1.2208829 -0.027 0.97871
I(services
* female) 0.4850802 0.8701477 0.557 0.57745
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual
standard error: 2.868 on 517 degrees of freedom
Multiple
R-squared: 0.4062, Adjusted
R-squared: 0.397
F-statistic:
44.21 on 8 and 517 DF, p-value: < 2.2e-16
Verifique que el coeficiente asociado a la interacción es un
diferencial de pendiente respecto al efecto de la educación sobre el salario,
en función del sexo de las personas. En el caso de los hombres, el efecto es
b_educ, mientras que en el caso de las mujeres es b_educ+I(educ * female). Como
este segundo coeficiente es negativo, estaría apuntando que el efecto asociado
a las mujeres (de tener un año adicional de educación) es menor al de los
hombres (considere que en este ejemplo el coeficiente es no significativo, lo
que indica que no parece existir en el modelo evidencia de que el efecto de la
educación dependa del sexo de las personas).
En el caso anterior, dado que las pendientes son iguales, se está
afirmando que los hombres ganan un salario superior al de las mujeres, en una
magnitud fija, independientemente al nivel educativo. En caso de un coeficiente
significativo, indicaría que las diferencias salariales entre hombres y mujeres
dependería del nivel de estudio.
Caso 5. Se crean dummy por cada categoría
de variables de forma agrupada
categorias<-factor(paste(wage1_d$educR,wage1_d$services,sep=""))
table(categorias)
Elementar0
Elementar1 High0 High1
Media0 Media1
5 3 195 17 273 33
# puedo
crear una dummy por categoría (solo por mostrar)
dummysNew
<- model.matrix(~categorias-1)
wage1_d<-cbind(wage1_d,categorias)
result5
<- lm(wage~factor(categorias),
data=wage1_d)
summary(result5)
Call:
lm(formula = wage ~ factor(categorias), data
= wage1_d)
Residuals:
Min
1Q Median 3Q Max
-5.365
-2.077 -1.016 1.215 17.445
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.23200 1.54892
2.087 0.03741 *
factor(categorias)Elementar1 0.09467
2.52938 0.037 0.97016
factor(categorias)High0 4.30318 1.56865
2.743 0.00629 **
factor(categorias)High1 2.52565 1.76204
1.433 0.15235
factor(categorias)Media0 1.84518
1.56304 1.181 0.23834
factor(categorias)Media1 0.46194
1.66213 0.278 0.78118
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’
1
Residual
standard error: 3.463 on 520 degrees of freedom
Multiple
R-squared: 0.1288, Adjusted R-squared: 0.1205
F-statistic:
15.38 on 5 and 520 DF, p-value:
4.055e-14