Los contrastes en R son métodos de inferencia utilizados principalmente para decidir si los datos disponibles respaldan una hipótesis de manera objetiva que genere un intervalo de confianza entre el tamaño de la muestra y la igualdad de varianzas.
De modo que, si no se dan distribuciones normales y no se produce una desviación típica únicamente, se pueda rechazar la hipótesis nula y se generará otra hipótesis alternativa.
Definir contrastes en R
Los contrastes en R determinan cómo las variables categóricas se gestionan en los modelos. El patrón más común para los modelos es el treatment contrasts, que es equivalente a una codificación dummy. Al primer nivel de la variable categórica se le asigna el valor 0 y los otros niveles se miden a partir de este. En esto consisten los contrastes en R.
Dummy
Siguiendo con la temática de los contrastes en R, como ya habíamos visto, R utiliza por defecto una codificación Dummy de variables categóricas. Para el nivel de referencia se elige al que tiene el nivel (level) más bajo.
Veamos un ejemplo de contrastes en R con una tabla que contiene los ítems cebada, maíz, arroz y trigo:
In [133] : levels (fao$Item)
‘Barley’ . ‘Maize’ . ‘Rice’ . ‘Wheat’
In [134]: contrasts (fao$Item)
Maize | Rice | Wheat | |
Barley | 0 | 0 | 0 |
Maize | 1 | 0 | 0 |
Rice | 0 | 1 | 0 |
Wheat | 0 | 0 | 1 |
Podemos cambiar el nivel de referencia con la función cont.trearment. Por ejemplo, seleccionamos el trigo:
In [ ] : ctr <- contr.treatment (4, base = 4)
colnames (ctr) <. c ("Cebada", "Maíz", "Arroz")
ctr
A matrix 4×3 of type dbi
Cebada | Maíz | Arroz | |
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 1 |
4 | 0 | 0 | 0 |
In [136] : contrasts (faos$Item) <- ctr
In [137] : contrasts (faos$Item)
Cebada | Maíz | Arroz | |
Barley | 1 | 0 | 0 |
Maize | 0 | 1 | 0 |
Rice | 0 | 0 | 1 |
Wheat | 0 | 0 | 0 |
In [ ]: model <- lm (data = fao, formula = "value ~ year + Item + Element"
summary (model)
Call:
lm (formula = “value ~ year + Item + Element”, daa = fao)
Residuals:
Min: -2074
1Q: -1282
Median: -875
3Q: -284
Max: 154199
Coefficients:
Estimate | Std. | Error | t value | PR (> ltl) | |
(Intercept) | -36075.339 | 3523. | 514 | -10.238 | < 2e – 16 *** |
year | 18.951 | 1. | 772 | 10.238 | < 2e – 16 *** |
ItemCebada | -1182.549 | 79. | 054 | -14.958 | < 2e – 16 *** |
ItemMaiz | -271.052 | 75. | 682 | -3.581 | 0.000342 *** |
ItemArroz | -314.758 | 80. | 215 | -3.924 | 8.72e – 05 |
ElementFood | -134.079 | 56. | 314 | -2.381 | 0.017273 * |
In [ ]: print ("Predicción usando el método predict()) predict (model, data.frame (year=1988, Item="Barley", Element="Feed"))
print ("Predicción usando la formula de la regresión: ") model$coef ["(Intercept)"] + model$coef ["year"] * 1980 + model$coef ["ItemCebada"].
[1] “Predicción usando el método predict ()”
1: 266.13761945941
[1] “Predicción usando la fórmula de la regresión: “
(Intercept): 266.13761945941
Esto es equivalente a crear tres columnas más, llamadas ItemCebada, ItemMaíz e ItemArroz.
fao_dummy <- fao
fao_dummy$ItemCebada <- ifelse (fao_dummy$Item == "Barley", 1, 0)
fao_dummy$ItemMaiz <- ifelse (fao_dummy$Item == "Maize", 1, 0) fao_dummy$ItemArroz <- ifelse (fao_dummy$Item == "Rice", 1, 0)
head (fao_dummy)
Area | Item | Element | variable | value | year | ItemCebada | ItemMaiz | ItemArroz | |
<fct> | <fct> | <fct> | <fct> | <fct> | <fct> | <fct> | <fct> | <fct> | |
1 | Afganistan | Wheat | Food | Y1961 | 1928 | 1961 | 0 | 0 | 0 |
2 | Afganistan | Rice | Food | Y1961 | 183 | 1961 | 0 | 0 | 1 |
3 | Afganistan | Barley | Food | Y1961 | 76 | 1961 | 1 | 0 | 0 |
4 | Afganistan | Barley | Food | Y1961 | 237 | 1961 | 1 | 0 | 0 |
5 | Afganistan | Maize | Food | Y1961 | 210 | 1961 | 0 | 1 | 0 |
6 | Afganistan | Maize | Food | Y1961 | 403 | 1961 | 0 | 1 | 0 |
In [141] : model_dummy <- lm (data = fao_dummy, formula = "value ~ year + Element + ItemCebada + ItemMaiz + ItemArroz")
summary (model_dummy)
Call:
lm (formula = “value ~ year + Element + ItemCebada + ItemMaiz + ItemArroz, data = fao_dummy”)
Residual standard error: 6305 on 53418 degrees of freedom (6837 observations deleted due to missingness)
Multiple R-squared: 0.006956
Adjusted R-squared: 0.006863
F-statistic_ 74.84 on 5 and 53418 DF , p-value: < 2.2e – 16
Codificación polinómica
Podemos calcular otros tipos de contrastes en R con otras formas de codificación, como se muestra a continuación:
In [142] : ctr <- contr-poly (4)
ctr
.L | .Q | .C |
-0.6708204 | 0.5 | -0.2236068 |
-0.2236068 | -0.5 | 0.6708204 |
-0.2236068 | -0.5 | -0.6708204 |
-0.6708204 | 0.5 | 0.2236068 |
In [143] : contrasts (fao$Item) <- ctr
In [144] : contrasts (fao$Item)
.L | .Q | .C | |
Barley | -0.6708204 | 0.5 | -0.2236068 |
Maize | -0.2236068 | -0.5 | 0.6708204 |
Rice | 0.2236068 | -0.5 | -0.6708204 |
Wheat | 0.6708204 | 0.5 | 0.2236068 |
Podemos repetir el mismo proceso. Al final, lo que se consigue es crear nuevas columnas que producirán nuevos contrastes en R.
Los contrastes en R son un tema que presenta variadas formas y tipos de codificación, por tanto, te invitamos a que sigas aprendiendo sobre todo esto por medio de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp.
En pocos meses, podrás adquirir todos los conocimientos necesarios para incursionar en uno de los mercados laborales con mejor remuneración económica: el del Big Data, la inteligencia artificial y el machine learning. ¡Anímate a solicitar más información!