¿Qué son los contrastes en R?

Autor: | Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

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)
MaizeRiceWheat
Barley000
Maize100
Rice010
Wheat001

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

CebadaMaízArroz
1100
2010
3001
4000
In [136] : contrasts (faos$Item) <- ctr

In [137] : contrasts (faos$Item) 
CebadaMaízArroz
Barley100
Maize010
Rice001
Wheat000
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:

EstimateStd.Errort valuePR (> ltl)
(Intercept)-36075.3393523.514-10.238< 2e – 16 ***
year18.9511.77210.238< 2e – 16 ***
ItemCebada-1182.54979.054-14.958< 2e – 16 ***
ItemMaiz-271.05275.682-3.5810.000342 ***
ItemArroz-314.75880.215-3.9248.72e – 05
ElementFood-134.07956.314-2.3810.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)
AreaItemElementvariablevalueyearItemCebadaItemMaizItemArroz
<fct><fct><fct><fct><fct><fct><fct><fct><fct>
1AfganistanWheatFoodY196119281961000
2AfganistanRiceFoodY19611831961001
3AfganistanBarleyFoodY1961761961100
4AfganistanBarleyFoodY19612371961100
5AfganistanMaizeFoodY19612101961010
6AfganistanMaizeFoodY19614031961010
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.67082040.5-0.2236068
-0.2236068-0.50.6708204
-0.2236068-0.5-0.6708204
-0.67082040.50.2236068
In [143] : contrasts (fao$Item) <- ctr

In [144] : contrasts (fao$Item)
.L.Q.C
Barley-0.67082040.5-0.2236068
Maize-0.2236068-0.50.6708204
Rice0.2236068-0.5-0.6708204
Wheat0.67082040.50.2236068

Podemos repetir el mismo proceso. Al final, lo que se consigue es crear nuevas columnas que producirán nuevos contrastes en R.

¿Quieres seguir aprendiendo?

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!

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado