Saltar al contenido principal

16.7: Diferentes formas de especificar contrastes

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

En la sección anterior, te mostré un método para convertir un factor en una colección de contrastes. En el método que te mostré, especificamos un conjunto de variables binarias, en las que definimos una tabla como esta:

knitr::kable(tibble::tribble(
~V1,              ~V2,              ~V3,

"\"placebo\"",              "0",              "0",
"\"anxifree\"",              "1",              "0",
"\"joyzepam\"",              "0",              "1"
), col.names = c("drug", "druganxifree", "drugjoyzepam"))
droga druganxifree drogajoyzepam
“placebo” 0 0
“ansioso” 1 0
“joyzepam” 0 1

Cada fila de la tabla corresponde a uno de los niveles de factores, y cada columna corresponde a uno de los contrastes. Esta tabla, que siempre tiene una fila más que columnas, tiene un nombre especial: se llama matriz de contraste. Sin embargo, hay muchas formas diferentes de especificar una matriz de contraste. En esta sección discuto algunas de las matrices de contraste estándar que usan los estadísticos, y cómo puedes usarlas en R. Si estás planeando leer la sección sobre ANOVA desequilibrada más adelante (Sección 16.10) vale la pena leer esta sección detenidamente. Si no, puedes salirte con la suya, porque la elección de los contrastes no importa mucho para diseños equilibrados.

Contrastes de tratamiento

En el tipo particular de contrastes que he descrito anteriormente, un nivel del factor es especial, y actúa como una especie de categoría “basal” (es decir, placebo en nuestro ejemplo), contra la cual se definen los otros dos. El nombre para este tipo de contraste es contrastes de tratamiento. El nombre refleja el hecho de que estos contrastes son bastante naturales y sensatos cuando una de las categorías en tu factor realmente es especial porque en realidad sí representa una línea base. Eso tiene sentido en nuestro ejemplo de ensayo clínico: la condición placebo corresponde a la situación en la que no le das a la gente ningún medicamento real, y así es especial. Las otras dos condiciones se definen en relación con el placebo: en un caso se reemplaza el placebo por Anxifree, y en el otro caso lo reemplaza por Joyzepam.

R viene con una variedad de funciones que pueden generar diferentes tipos de matrices de contraste. Por ejemplo, la tabla que se muestra arriba es una matriz de contrastes de tratamiento para un factor que tiene 3 niveles. Pero supongamos que quiero una matriz de contrastes de tratamiento para un factor con 5 niveles? La función contr.treatment () hará lo siguiente:

contr.treatment( n=5 )
##   2 3 4 5
## 1 0 0 0 0
## 2 1 0 0 0
## 3 0 1 0 0
## 4 0 0 1 0
## 5 0 0 0 1

Observe que, por defecto, el primer nivel del factor siempre se trata como la categoría de línea base (es decir, es la que tiene todos los ceros, y no tiene un contraste explícito asociado a ella). En la Sección 16.6.3 mencioné que se puede utilizar la función relevel () para cambiar qué categoría es el primer nivel del factor. 243 También hay una función especial en R llamada contr.sas () que genera una matriz de contraste de tratamiento en la que la última categoría se trata como la línea base:

contr.SAS( n=5 )
##   1 2 3 4
## 1 1 0 0 0
## 2 0 1 0 0
## 3 0 0 1 0
## 4 0 0 0 1
## 5 0 0 0 0

Sin embargo, en realidad puede seleccionar cualquier categoría que desee como línea base dentro de la función contr.treatment (), especificando el argumento base en esa función. Consulta la documentación de ayuda para más detalles.

Contrastes de Helmert

Los contrastes de tratamiento son útiles para muchas situaciones, y son los predeterminados en R. Sin embargo, tienen más sentido en la situación en la que realmente hay una categoría basal, y se quiere evaluar a todos los demás grupos en relación con esa. En otras situaciones, sin embargo, no existe tal categoría basal, y puede tener más sentido comparar cada grupo con la media de los otros grupos. Aquí es donde los contrastes de Helmert, generados por la función contr.helmert (), pueden ser útiles. La idea detrás de los contrastes de Helmert es comparar cada grupo con la media de los “anteriores”. Es decir, el primer contraste representa la diferencia entre el grupo 2 y el grupo 1, el segundo contraste representa la diferencia entre el grupo 3 y la media de los grupos 1 y 2, y así sucesivamente. Esto se traduce en una matriz de contraste que se ve así:

 contr.helmert( n=5 )
##   [,1] [,2] [,3] [,4]
## 1   -1   -1   -1   -1
## 2    1   -1   -1   -1
## 3    0    2   -1   -1
## 4    0    0    3   -1
## 5    0    0    0    4

Una cosa útil de los contrastes de Helmert es que cada contraste suma a cero (es decir, todas las columnas suman a cero). Esto tiene la consecuencia de que, cuando interpretamos el ANOVA como una regresión, el término de intercepción corresponde a la gran media μ..) si estamos usando contrastes de Helmert. Compare esto con los contrastes de tratamiento, en los que el término de intercepción corresponde a la media grupal para la categoría basal. Esta propiedad puede ser muy útil en algunas situaciones. No importa mucho si tienes un diseño equilibrado, lo que hemos estado asumiendo hasta ahora, pero resultará importante más adelante cuando consideremos diseños desequilibrados en la Sección 16.10. De hecho, la razón principal por la que incluso me he molestado en incluir esta sección sobre la especificación es que los contrastes se vuelven importantes si quieres entender el ANOVA desequilibrado.

cero contrastes

La tercera opción que debo mencionar brevemente son los contrastes de “suma a cero”, que se utilizan para construir comparaciones por pares entre grupos. Específicamente, cada contraste codifica la diferencia entre uno de los grupos y una categoría basal, que en este caso corresponde al último grupo:

contr.sum( n=5 )
##   [,1] [,2] [,3] [,4]
## 1    1    0    0    0
## 2    0    1    0    0
## 3    0    0    1    0
## 4    0    0    0    1
## 5   -1   -1   -1   -1

Al igual que Helmert contrasta, vemos que cada columna suma a cero, lo que significa que el término de intercepción corresponde a la gran media cuando se trata ANOVA como un modelo de regresión. Al interpretar estos contrastes, lo que hay que reconocer es que cada uno de estos contrastes es una comparación por parejas entre el grupo 5 y uno de los otros cuatro grupos. Específicamente, el contraste 1 corresponde a una comparación de “grupo 1 menos grupo 5”, el contraste 2 corresponde a una comparación de “grupo 2 menos grupo 5", y así sucesivamente.

Visualización y configuración de los contrastes predeterminados en R

Cada variable factor en R está asociada con una matriz de contraste. Tiene que serlo, ¡de lo contrario R no sería capaz de ejecutar las ANOVA correctamente! Si no especifica uno de manera explicativa, o R especificará implícitamente uno para usted. Esto es lo que quiero decir. Cuando creé los datos de clin.trial, no especificé ninguna matriz de contraste para ninguno de los factores. Esto se puede ver usando la función attr () para imprimir el atributo “contrastes” de los factores. Por ejemplo:

attr( clin.trial$drug, "contrasts" ) ## NULL La salida NULL aquí significa que R te está diciendo que el factor fármaco no tiene ningún atributo llamado “contrastes” para el que tenga algún dato. No hay ninguna matriz de contraste almacenada en ningún lugar explícitamente para este factor. No obstante, si ahora le pedimos a R que nos diga qué contrastes se configuran para este factor, nos da esto: contrasts( clin.trial$drug )
##          anxifree joyzepam
## placebo         0        0
## anxifree        1        0
## joyzepam        0        1

Estos son el mismo contraste de tratamiento que configuramos manualmente en la Sección 16.6. ¿Cómo sabía R establecer contrastes de tratamiento, a pesar de que en realidad nunca le dije nada sobre los contrastes que quería? La respuesta es que R tiene una lista oculta de “opciones” predeterminadas que busca para resolver situaciones como esta. Puede imprimir todas las opciones escribiendo options () en el símbolo del sistema, pero no es una lectura muy esclarecedora. Hay muchas opciones, y en estos momentos solo nos interesan los contrastes. En lugar de imprimir todas las opciones, podemos pedir solo una, así:

options( "contrasts" )
## $contrasts ## unordered ordered ## "contr.treatment" "contr.poly" Lo que esto nos está diciendo es que los contrastes por defecto para factores desordenados (es decir, variables de escala nominal) son contrastes de tratamiento, y el valor por defecto para factores ordenados (es decir, variables de escala de intervalo) son contrastes “polinómicos”. No discuto mucho los factores ordenados en este libro, y así no voy a entrar en lo que se tratan los contrastes polinómicos. Lo clave es que la función options () también te permite restablecer estos valores predeterminados (aunque solo para la sesión actual: volverán a la configuración original una vez que cierres R). Aquí está el comando:  options(contrasts = c("contr.helmert", "contr.poly")) Una vez que hayamos hecho esto, podremos volver a inspeccionar los ajustes de contraste:  options("contrasts")   ##$contrasts
## [1] "contr.helmert" "contr.poly"

Ahora vemos que los contrastes por defecto para los factores desordenados han cambiado. Entonces, si ahora le pido a R que me diga qué contrastes están asociados con el factor fármaco, da una respuesta diferente porque cambié el valor predeterminado:

contrasts( clin.trial$drug )  ## [,1] [,2] ## placebo -1 -1 ## anxifree 1 -1 ## joyzepam 0 2 Esos son los contrastes de Helmert. En general, si estás cambiando la configuración predeterminada para algo en R, es una buena idea restablecerlos a sus valores originales una vez que hayas terminado. Entonces hagámoslo: options(contrasts = c("contr.treatment", "contr.poly")) Establecer los contrastes para un solo factor En el apartado anterior, te mostré cómo alterar los contrastes por defecto. No obstante, supongamos que todo lo que realmente quieres hacer es cambiar los contrastes asociados a un solo factor, y dejar los valores por defecto como están. Para ello, lo que hay que hacer es asignar específicamente la matriz de contraste como un “atributo” del factor. Esto es fácil de hacer a través de la función contrastes (). Por ejemplo, supongamos que quería usar contrastes de suma a cero para el factor fármaco, pero mantener los contrastes de tratamiento por defecto para todo lo demás. Podría hacerlo así: contrasts( clin.trial$drug ) <- contr.sum(3)

Y si ahora inspecciono los contrastes, me sale lo siguiente

contrasts( clin.trial$drug) ## [,1] [,2] ## placebo 1 0 ## anxifree 0 1 ## joyzepam -1 -1 No obstante, los contrastes para todo lo demás seguirán siendo los impagos. Se puede comprobar que en realidad hemos realizado un cambio específico al factor mismo comprobando para ver si ahora tiene un atributo, usando el comando attr (clin.trial$drug, “contrastes”). Esto imprimirá la misma salida mostrada anteriormente, porque el contraste de hecho se ha unido al factor fármaco, y no se basa en los valores por defecto. Si quieres borrar el atributo y revertir los valores predeterminados, usa un comando como este:

contrasts( clin.trial$drug ) <- NULL Establecer los contrastes para un único análisis Una última forma de cambiar los contrastes. Es posible que te encuentres queriendo cambiar los contrastes solo para un análisis específico. Eso también está permitido, porque las funciones aov () y lm () tienen un argumento de contrastes que puedes usar. Para cambiar los contrastes para un análisis específico, primero configuramos una variable de lista que nombra 244 los tipos de contraste que desea usar para cada uno de los factores: my.contrasts <- list( drug = contr.helmert, therapy = contr.helmert ) A continuación, ajusta el modelo ANOVA de la manera habitual, pero esta vez especificaremos el argumento de los contrastes: mod <- aov( mood.gain ~ drug*therapy, clin.trial, contrasts = my.contrasts ) Si intentas un comando como summary (aov) no verás ninguna diferencia en la salida porque la elección de los contrastes no afecta el resultado cuando tienes un diseño equilibrado (esto no siempre será cierto más adelante). Sin embargo, si quieres comprobar que realmente ha funcionado, puedes inspeccionar el valor de mod$contrastes:

mod$contrasts  ##$drug
##          [,1] [,2]
## placebo    -1   -1
## anxifree    1   -1
## joyzepam    0    2
##
## \$therapy
##            [,1]
## no.therapy   -1
## CBT           1

Como puede ver, para los efectos de este ANOVA en particular, R ha utilizado contrastes de Helmert para ambas variables. Si hubiera omitido la parte del comando que especificaba el argumento de los contrastes, estarías viendo los contrastes de tratamiento aquí porque habría vuelto a cualquiera de los valores que la función contrastes () imprime para cada uno de los factores.

This page titled 16.7: Diferentes formas de especificar contrastes is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.