¿Qué son los contrastes en R?

| Última modificación: 8 de julio de 2024 | Tiempo de Lectura: 3 minutos
Premios Blog KeepCoding 2025

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

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.

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!

Noticias recientes del mundo tech

¡CONVOCATORIA ABIERTA!

Big Data & Data Science

Full Stack Bootcamp

Clases en Directo | Acceso a +600 empresas | 98% de empleabilidad

Descárgate también el informe de tendencias en el mercado laboral 2026.

Fórmate con planes adaptados a tus objetivos y logra resultados en tiempo récord.
KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.