1 Resumen

En este trabajo se plantea el desarrollo hecho para la presentación del análisis de tablas de contingencia y medidas de asociación para 2 o más variables categóricas mediante técnicas descriptivas y de visualización, en el contexto de un curso de estadística descriptiva de primer año de la Licenciatura en Estadística, en la Facultad de Ciencias Económicas y de Administración, Universidad de la República, Uruguay.

Para eso se presentan ejemplos para tablas a 2 vías, con la elaboración de perfiles filas y columnas, con su correspondiente visualización mediante gráficos de mosaicos.

Para el estudio de la asociación, se plantea cómo elaborar el coeficiente Chi cuadrado, el coeficiente de contingencia y los residuos estandarizados. Para la discusión de la magnitud del Chi cuadrado para una tabla a 2 vías, se propone el estudio de este mediante simulación, permutando las filas de la tabla de datos.

2 Introducción al tema

Como otros cursos de estadística descriptiva convencionales, se presenta la estadística como disciplina, considerando la diferencia entre estadística descriptiva e inferencial, mostrando ejemplos de problemas de la vida real para resolver con diferentes disciplinas. La estructura de este curso es en varios temas como:

  • Introducción a la descripción de datos

  • Introducción al lenguaje R

  • Exploración bivariada

  • Exploración multivariada

  • Medidas de concentración y desigualdad

  • Indicadores y tasas Números índices

Con respecto a la exploración bivariada, dentro del curso se imparten los conceptos necesarios para abordar todos los posibles escenarios de la exploración bivariada: dos variables cuantitativas, una variable cuantitativa y otra categórica y dos variables categóricas. Para este último escenario, se consideran las tablas de contingencia y medidas de asociación complementadas con gráficos para este tipo de variables. En particular, para el tema “Análisis de tablas de contingencia y medidas de asociación para 2 o más variables categóricas”, que es el corazón de este trabajo, se hace un énfasis en elementos de visualización mediante gráficos de mosaicos para tablas a 2 vías, con la elaboración de perfiles filas y columnas.

Sin embargo, una duda recurrente para el estudio de la asociación al elaborar el estadístico \(\chi^{2}\) , y otras medidas de asociación, como el coeficiente de contingencia y los residuos estandarizados, es cuándo es posible considerar que, en caso de existir, la asociación es grande, cuando aún no tiene los conceptos de inferencia, que le permiten la toma de decisiones en condiciones de incertidumbre. Para la discusión de la magnitud del estadístico \(\chi^{2}\) para una tabla a 2 vías, se propone el estudio de este mediante simulación, permutando las filas de la tabla de datos. A su vez, todo el trabajo se implementa en el sistema R (12) y el editor IDE Rstudio (11) , ya que los diferentes objetos considerados, en este caso las tablas de contingencia , no dejan de ser matrices especiales que, como tales, heredan en su lógica de trabajo, las dimensiones de estas, surgiendo de este modo objetos de tipo table ( tablas de 2 vías) o el array que se usa para tablas a más de 2 vías.

Para poder mostrar los diferentes conceptos manejados, se usan un par de ejemplos que ya vienen en el sistema R , para ir en forma gradualista, considerando cada vez conceptos más elaborados.

Dado que este trabajo corresponde a la presentación del tema de Tablas de contingencia y medidas de asociación, en una clase lectiva teórico-práctica de 2 horas, se hace en el formato de archivo Rmd (14) (lenguaje de Markdown para el uso de código R que mezcla texto , ecuaciones y gráficos), que permite generar un reporte estático en látex o un reporte interactivo en formato html.

Los datos de Koch y Edwards (1988) proceden de un ensayo clínico doble ciego que investigaba un nuevo tratamiento para la artritis reumatoide.

3 Carga librerias

library(vcd)
## Cargando paquete requerido: grid
library(vcdExtra)
## Cargando paquete requerido: gnm
## Registered S3 methods overwritten by 'vcdExtra':
##   method      from
##   pairs.table vcd 
##   print.Kappa vcd
## 
## Adjuntando el paquete: 'vcdExtra'
## The following objects are masked from 'package:vcd':
## 
##     pairs_diagonal_mosaic, woolf_test

4 Caso práctico (1) : Ensayo clínico para tratamiento de Artritis

Un dataframe con 84 observaciones y 5 variables.

  • ID Identificador del paciente.

  • Tratamiento Factor que indica el tratamiento (Placebo, Tratado).

  • Sexo Factor que indica el sexo (Femenino, Masculino).

  • Edad Edad del paciente.

  • Mejora Factor ordinal que indica el resultado del tratamiento (Ninguna, Algo, Marcada).

Para ese juego de datos que es un data frame se construye una primera tabla de contingencia mediante 2 opciones

data("Arthritis")

art <- xtabs(~Treatment + Improved, data = Arthritis)
tabla<-table(Arthritis$Treatment,Arthritis$Improved)
art
##          Improved
## Treatment None Some Marked
##   Placebo   29    7      7
##   Treated   13    7     21
tabla==art
##          
##           None Some Marked
##   Placebo TRUE TRUE   TRUE
##   Treated TRUE TRUE   TRUE
class(tabla)
## [1] "table"
class(art)
## [1] "xtabs" "table"
addmargins(art)
##          Improved
## Treatment None Some Marked Sum
##   Placebo   29    7      7  43
##   Treated   13    7     21  41
##   Sum       42   14     28  84
round(prop.table(art)*100,1)
##          Improved
## Treatment None Some Marked
##   Placebo 34.5  8.3    8.3
##   Treated 15.5  8.3   25.0
round(prop.table(art,1)*100,1)
##          Improved
## Treatment None Some Marked
##   Placebo 67.4 16.3   16.3
##   Treated 31.7 17.1   51.2
round(prop.table(art,2)*100,1)
##          Improved
## Treatment None Some Marked
##   Placebo   69   50     25
##   Treated   31   50     75
plot(art)

barplot(art)

mosaic(art,gp = shading_max, split_vertical = TRUE, main="Mejoría según el tipo de tratamiento")

mosaic(art, gp = shading_Friendly, 
       split_vertical = TRUE, 
       main="Arthritis: gp = shading_Friendly")

assocplot(art)

mosaicplot(art)

assoc(t(art))

En este caso, la figura muestra celdas que tienen un tamaño que respeta el conteo de las celdas, de modo que el área de ellas es proporcional, jugando con las alturas y largos de los rectángulos, respetando cada celda en el conteo global. Otra forma es no solo jugar con los conteos, sino además mostrar si las frecuencias de cada celda están lejos de la situación de independencia. a través de lo que se denomina Extended Mosaic Plots, (3,5,10). Un diagrama de mosaico es una visualización proporcional al área de una tabla de frecuencias esperadas. Se compone de mosaicos (que corresponden a las celdas) creadas mediante divisiones verticales y horizontales recursivas de un cuadrado. El área de cada mosaico es proporcional a la celda correspondiente, dadas las dimensiones de las divisiones anteriores

Puede verse en esta figura la estructura de la tabla y también ver cómo es la asociación a partir del color de cada una, mostrando cuáles tienen frecuencia por debajo o por encima de lo esperado, en este caso en color rojo y en color negro.

4.1 Y al final hay o no hay asociación entre ambas variables?

Existe una alternativa que muestra claramente la estructura de la tabla y considera a su vez el aporte en términos de residuos de cada celda a la situación de independencia, Para eso se les presenta cómo es el estadístico Chi cuadrado \[\chi_{0}^{2}=\sum\limits_{i=1}^{k}\sum\limits_{j=1}^{m}\frac{(o_{ij}-e_{ij})^2}{e_{ij}}\]

\[ \phi=\frac{\chi_{0}^{2}}{n};\phi_{cramer}=\sqrt{\frac{\chi_{0}^{2}}{min(f-1;c-1)}} \]

chi_test <- chisq.test(art)
chi_test$residuals
##          Improved
## Treatment        None        Some      Marked
##   Placebo  1.61749160 -0.06225728 -1.93699199
##   Treated -1.65647289  0.06375767  1.98367320
# Extract components
chi_sq <- chi_test$statistic
n <- sum(art)
min_dim <- min(dim(art)) - 1
# Calculate Cramer's V
cramers_v <- sqrt(chi_sq / (n * min_dim))
cramers_v
## X-squared 
## 0.3942295
summary(assocstats(art))
## 
## Call: xtabs(formula = ~Treatment + Improved, data = Arthritis)
## Number of cases in table: 84 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 13.055, df = 2, p-value = 0.001463
##                     X^2 df  P(> X^2)
## Likelihood Ratio 13.530  2 0.0011536
## Pearson          13.055  2 0.0014626
## 
## Phi-Coefficient   : NA 
## Contingency Coeff.: 0.367 
## Cramer's V        : 0.394
assocstats(art)
##                     X^2 df  P(> X^2)
## Likelihood Ratio 13.530  2 0.0011536
## Pearson          13.055  2 0.0014626
## 
## Phi-Coefficient   : NA 
## Contingency Coeff.: 0.367 
## Cramer's V        : 0.394
round(prop.table(art,1)*100,1)
##          Improved
## Treatment None Some Marked
##   Placebo 67.4 16.3   16.3
##   Treated 31.7 17.1   51.2
round(prop.table(art,2)*100,1)
##          Improved
## Treatment None Some Marked
##   Placebo   69   50     25
##   Treated   31   50     75
summary(assocstats(art))
## 
## Call: xtabs(formula = ~Treatment + Improved, data = Arthritis)
## Number of cases in table: 84 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 13.055, df = 2, p-value = 0.001463
##                     X^2 df  P(> X^2)
## Likelihood Ratio 13.530  2 0.0011536
## Pearson          13.055  2 0.0014626
## 
## Phi-Coefficient   : NA 
## Contingency Coeff.: 0.367 
## Cramer's V        : 0.394

5 Caso práctico (2): Color del pelo y los ojos

Distribución del color del cabello y de los ojos, y del sexo, en 592 estudiantes de estadística.

Formato Matriz tridimensional resultante de la tabulación cruzada de 592 observaciones sobre 3 variables. Las variables y sus niveles son los siguientes:

  1. N.º Nombre Niveles

  2. Cabello Negro, Castaño, Rojo, Rubio

  3. Ojos Marrón, Azul, Avellana, Verde

  4. Sexo Masculino, Femenino

Detalles La tabla Cabello × Ojos proviene de una encuesta realizada a estudiantes de la Universidad de Delaware, publicada por Snee (1974). La división por sexo fue añadida por Friendly (1992) con fines didácticos.

Este conjunto de datos es útil para ilustrar diversas técnicas de análisis de tablas de contingencia, como

  • la prueba chi-cuadrado estándar o,

  • de forma más general, el modelado log-lineal

  • métodos gráficos como

    • diagramas de mosaico

    • diagramas de tamiz (sieve)

    • diagramas de asociación.

Fuente http://www.datavis.ca/sas/vcd/catdata/haireye.sas

HairEyeColor
## , , Sex = Male
## 
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    32   11    10     3
##   Brown    53   50    25    15
##   Red      10   10     7     7
##   Blond     3   30     5     8
## 
## , , Sex = Female
## 
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    36    9     5     2
##   Brown    66   34    29    14
##   Red      16    7     7     7
##   Blond     4   64     5     8
class(HairEyeColor)
## [1] "table"
dim(HairEyeColor)
## [1] 4 4 2
HairEyeColor[,,1]
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    32   11    10     3
##   Brown    53   50    25    15
##   Red      10   10     7     7
##   Blond     3   30     5     8
HairEyeColor[,,2]
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    36    9     5     2
##   Brown    66   34    29    14
##   Red      16    7     7     7
##   Blond     4   64     5     8
HairEyeColor.df<-expand.dft(HairEyeColor)

En este segundo ejemplo puede mostrar como seopera con esa matriz de 3 vias por ejemplo para la hombres seria

structable(HairEyeColor)  
##              Eye Brown Blue Hazel Green
## Hair  Sex                              
## Black Male          32   11    10     3
##       Female        36    9     5     2
## Brown Male          53   50    25    15
##       Female        66   34    29    14
## Red   Male          10   10     7     7
##       Female        16    7     7     7
## Blond Male           3   30     5     8
##       Female         4   64     5     8
ftable(HairEyeColor)
##             Sex Male Female
## Hair  Eye                  
## Black Brown       32     36
##       Blue        11      9
##       Hazel       10      5
##       Green        3      2
## Brown Brown       53     66
##       Blue        50     34
##       Hazel       25     29
##       Green       15     14
## Red   Brown       10     16
##       Blue        10      7
##       Hazel        7      7
##       Green        7      7
## Blond Brown        3      4
##       Blue        30     64
##       Hazel        5      5
##       Green        8      8
structable(HairEyeColor[,,1])  
##       Eye Brown Blue Hazel Green
## Hair                            
## Black        32   11    10     3
## Brown        53   50    25    15
## Red          10   10     7     7
## Blond         3   30     5     8
addmargins(structable(HairEyeColor[,,1]))
##        Eye
## Hair    Brown Blue Hazel Green Sum
##   Black    32   11    10     3  56
##   Brown    53   50    25    15 143
##   Red      10   10     7     7  34
##   Blond     3   30     5     8  46
##   Sum      98  101    47    33 279
round(prop.table(as.matrix(structable(HairEyeColor[,,1])),1)*100,1)
##        Eye
## Hair    Brown Blue Hazel Green
##   Black  57.1 19.6  17.9   5.4
##   Brown  37.1 35.0  17.5  10.5
##   Red    29.4 29.4  20.6  20.6
##   Blond   6.5 65.2  10.9  17.4
round(prop.table(as.matrix(structable(HairEyeColor[,,1])),2)*100,1)
##        Eye
## Hair    Brown Blue Hazel Green
##   Black  32.7 10.9  21.3   9.1
##   Brown  54.1 49.5  53.2  45.5
##   Red    10.2  9.9  14.9  21.2
##   Blond   3.1 29.7  10.6  24.2
mosaicplot(t(HairEyeColor[,,1]))

assocplot(t(HairEyeColor[,,1]))

assoc(t(HairEyeColor[,,1]))

chi<-chisq.test(HairEyeColor[,,1])
## Warning in chisq.test(HairEyeColor[, , 1]): Chi-squared approximation may be
## incorrect
chi$statistic
## X-squared 
##  41.28029
chi$observed
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    32   11    10     3
##   Brown    53   50    25    15
##   Red      10   10     7     7
##   Blond     3   30     5     8
round(chi$expected)
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    20   20     9     7
##   Brown    50   52    24    17
##   Red      12   12     6     4
##   Blond    16   17     8     5
assocstats(HairEyeColor[,,1])
##                     X^2 df   P(> X^2)
## Likelihood Ratio 44.445  9 1.1684e-06
## Pearson          41.280  9 4.4473e-06
## 
## Phi-Coefficient   : NA 
## Contingency Coeff.: 0.359 
## Cramer's V        : 0.222

Puede verse que en este caso el valor del coeficiente de Pearson es de 41.28 , que es un valor que para los estudiantes no se sabe si es grande o chico, ya que ese reporte muestra valores que no son interpretables por ellas al no tener conceptos de inferencia.

5.1 Viendo como puede variar el coeficiente Chi2

Si se consideran solo hombres se propone ver como puede variar el coeficiente Chi. Para eso es necesario pasar de una tabla de 2 vias a un dataframe

library(ggplot2)
HairEyeColor.df.m<-subset(HairEyeColor.df,HairEyeColor.df$Sex=="Male")
ggplot(HairEyeColor.df.m,aes(x = Hair, fill = Eye)) +
  geom_bar(position = "fill") +
  scale_fill_brewer(type = "qual") +
  theme(axis.text.x = element_text(
    angle = 45,
    vjust = .5
  )) +
  ggplot2::labs(
    x = "Color de Pelo",
    y = "Proporcion"
  )

Extraemos una muestra especial, suponiendo que no hay asociación entre el color del poelo y los ojos por lo cual, no parece tan inadecuado que los colores del pelo se combinen con cualquier color de ojos

Para eso alcanza con respetar los conteos de color de ojos y de pelo, lo que se logra permutando las filas de la tabla y asignando a cada respuesta de color de pelo, el color de ojos.

Como?

set.seed(1234)
muestra1<-sample(nrow(HairEyeColor.df.m),size = nrow(HairEyeColor.df.m),replace = FALSE)
head(HairEyeColor.df.m[muestra1,2],25)
##  [1] "Blue"  "Blue"  "Blue"  "Brown" "Blue"  "Hazel" "Brown" "Brown" "Green"
## [10] "Blue"  "Brown" "Brown" "Blue"  "Brown" "Hazel" "Blue"  "Brown" "Blue" 
## [19] "Brown" "Blue"  "Blue"  "Blue"  "Brown" "Blue"  "Hazel"
table(HairEyeColor.df.m$Eye,HairEyeColor.df.m[muestra1,2])
##        
##         Blue Brown Green Hazel
##   Blue    40    31    11    19
##   Brown   38    36     7    17
##   Green    9    11     6     7
##   Hazel   14    20     9     4
HairEyeColor.df.m$Eye.p<-HairEyeColor.df.m[muestra1,2]

5.2 Ahora que se permutaron las filas se arman otras parejas de color de pelo y ojos

tabla.orig<-table(HairEyeColor.df.m[,c(1,2)])
tabla.permutada<-table(HairEyeColor.df.m$Hair,HairEyeColor.df.m$Eye.p)

addmargins(tabla.orig)
##        Eye
## Hair    Blue Brown Green Hazel Sum
##   Black   11    32     3    10  56
##   Blond   30     3     8     5  46
##   Brown   50    53    15    25 143
##   Red     10    10     7     7  34
##   Sum    101    98    33    47 279
addmargins(tabla.permutada)
##        
##         Blue Brown Green Hazel Sum
##   Black   22    21     4     9  56
##   Blond   17    18     6     5  46
##   Brown   54    44    19    26 143
##   Red      8    15     4     7  34
##   Sum    101    98    33    47 279
(chi.orig<-chisq.test(tabla.orig))
## Warning in chisq.test(tabla.orig): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tabla.orig
## X-squared = 41.28, df = 9, p-value = 4.447e-06
(chi.perm<-chisq.test(tabla.permutada))
## Warning in chisq.test(tabla.permutada): Chi-squared approximation may be
## incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tabla.permutada
## X-squared = 6.3975, df = 9, p-value = 0.6996

5.3 Y si cambiamos de muestra?

 muestra2<-sample(nrow(HairEyeColor.df.m),size = nrow(HairEyeColor.df.m),replace = FALSE)
addmargins(table(HairEyeColor.df.m$Hair,HairEyeColor.df.m[muestra2,2]))
##        
##         Blue Brown Green Hazel Sum
##   Black   21    18     6    11  56
##   Blond   17    16     6     7  46
##   Brown   50    50    18    25 143
##   Red     13    14     3     4  34
##   Sum    101    98    33    47 279
chisq.test(table(HairEyeColor.df.m$Hair,HairEyeColor.df.m[muestra2,2]))
## Warning in chisq.test(table(HairEyeColor.df.m$Hair, HairEyeColor.df.m[muestra2,
## : Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(HairEyeColor.df.m$Hair, HairEyeColor.df.m[muestra2, 2])
## X-squared = 1.9648, df = 9, p-value = 0.992

5.4 Hagámoslo para muchas muestras

library(infer)
chi.observado<- HairEyeColor.df.m |>
  specify(Hair ~ Eye) |>
  hypothesize(null = "independence") |>
  calculate(stat = "Chisq")
chi.observado
set.seed(1234)
null_dist_sim <- HairEyeColor.df.m |>
  specify(Hair ~ Eye) |>
  hypothesize(null = "independence") |>
  generate(reps = 1000, type = "permute") |>
  calculate(stat = "Chisq")

summary(null_dist_sim$stat)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.108   5.782   8.468   9.017  11.411  28.416
hist(null_dist_sim$stat,breaks = 15,probability = TRUE,cex.main=0.9,main="Distribución del Estadistico Chi simulado",xlab = "Chi simulado",ylab="Densidad",xlim=c(0,as.numeric(chi.observado$stat)+1) )
abline(v=as.numeric(chi.observado$stat),col="red",lwd=2)
lines(density(null_dist_sim$stat,from = 0,to=max(null_dist_sim$stat)),col="blue")

head(sort(as.numeric(null_dist_sim$stat),decreasing = TRUE),100)
##   [1] 28.41620 27.71005 26.22605 24.97520 22.66270 22.53201 21.62742 21.51040
##   [9] 21.48840 21.36011 20.65310 20.63695 20.43623 20.18225 20.14488 20.08033
##  [17] 20.00408 19.89192 19.76933 19.54138 19.53678 19.50662 19.50551 19.46494
##  [25] 19.30934 18.92051 18.90716 18.70882 18.70821 18.64449 18.61363 18.54183
##  [33] 18.45238 18.39548 18.25534 18.25091 18.19140 18.15225 18.11311 17.97573
##  [41] 17.75586 17.63949 17.45397 17.33217 17.28263 17.17176 17.15973 17.11055
##  [49] 17.05334 17.04909 16.93457 16.84682 16.78967 16.64506 16.59908 16.48759
##  [57] 16.45524 16.39705 16.35653 16.32742 16.30702 16.26920 16.21206 16.14671
##  [65] 16.08416 16.04692 16.01397 15.98885 15.90712 15.89836 15.86722 15.73017
##  [73] 15.68770 15.68480 15.68001 15.63711 15.61487 15.45538 15.38673 15.37804
##  [81] 15.30578 15.29351 15.23970 15.22697 15.18443 15.16946 15.12992 15.10499
##  [89] 15.08742 15.06608 15.05569 15.00489 15.00026 14.95059 14.90001 14.85710
##  [97] 14.79458 14.76207 14.71398 14.68278
plot(ecdf(null_dist_sim$stat),cex.main=0.9,main=" Distribución acumulada del Estadistico Chi simulado",xlab="Chi simulado")
abline(h=0.95,col="red")
abline(v=quantile(null_dist_sim$stat,0.95),col="red")

Vemos entonces que, al cambiar de muestra, cambia drásticamente el valor del chi cuadrado y, por lo tanto, la distancia a la situación de independencia.

Por lo tanto, ¿cuál es la muestra “buena”?

Hagámoslo para muchas muestras. Para eso se utiliza la librería infer(2) que si bien está pensada para ser usada en un contexto inferencial, se va a aprovechar la potencia de algunas de sus funciones para poder hacer el proceso de permutación y el cálculo del coeficiente a lo largo de todas las muestras.

5.5 Con un gráfico mas lindo

null_dist_sim |>
  visualize(bins = 15) +
  shade_p_value(chi.observado,
    direction = "greater"
  )

En la figura puede verse que, habiendo obtenido 1000 valores diferentes , bajo el supuesto de que el color del pelo no se asocia con el color del cabello, el rango de variación está entre 1 y 28, que tiene valores apenas diferentes de 0, pero otros más grandes. Sin embargo, el valor que aparece en rojo, que es de 41.28, corresponde al chi cuadrado calculado sobre la tabla original. De ese modo, para los datos de hombre y el color del cabello y ojos parece ser que el valor observado tiene que ser grande, respecto a los que seencontraría, si realmente fue atinado pensar en que el color del cabello y el de los ojos no están asociados.

Es muy grande la distancia entre lo observado y lo esperado por lo cual parece que \(\chi_{o}^2\) es grande !!!!!!

6 Conclusiones?

Luego de presentado lo que es una tabla de contingencia y cuáles son las formas de evaluar la asociación entre variables, se pudo, con las herramientas que se manejan en el curso de estadística descriptiva, aprender a ver la estructura de las tablas mediante diferentes conceptos de visualización.

Además, a la hora de considerar un valor de una medida como el chi-cuadrado, no tiene un valor máximo interpretable, como sí lo había para el caso de 2 variables continuas, donde a través del coeficiente de correlación lineal se podía evaluar si la asociación era grande o chica y, además, se sabía el sentido de la asociación.

En este caso, mediante el uso de los perfiles filas y columnas y los gráficos de mosaicos, se puede ver el sentido de la asociación. Para discernir sobre la intensidad de la asociación, para decidir la magnitud de la misma mediante un ejemplo con permutaciones, pueden evaluarlo, ya que no disponen de los elementos provenientes de la estadística inferencial.

Y lo importante es que todo esto lo puede desarrollar a través del uso del sistema R manejando conceptos básicos de matrices y de algunas funciones de visualización.

7 Bibliografia

https://fcea.udelar.edu.uy/depto-met-cuant-ensenanza/licenciatura-en-estadistica.html

  1. Allaire J, Xie Y, Dervieux C, McPherson J, Luraschi J, Ushey K, Atkins A, Wickham H, Cheng J, Chang W, Iannone R (2026). rmarkdown: Dynamic Documents for R. R package version 2.31, https://github.com/rstudio/rmarkdown.

  2. Couch et al., (2021). infer: An R package for tidyverse-friendly statistical inference. Journal of Open Source Software, 6(65), 3661, https://doi.org/10.21105/joss.03661

  3. Emerson, J. W. (1998), Mosaic displays in S-PLUS: A general implementation and a case study. Statistical Computing and Graphics Newsletter (ASA), 9, 1, 17–23.

  4. M. Friendly (2000), Visualizing Categorical Data. SAS Institute, Cary, NC. . Friendly, M. (1994), Mosaic displays for multi-way contingency tables. Journal of the American Statistical Association, 89, 190–200. .

  5. Friendly M (1992). “Mosaic Displays for Loglinear Models.” In Proceedings of the Statistical Graphics Section, 61–68. American Statistical Association. http://www.datavis.ca/papers/asa92.html.

  6. Friendly M (1992). “Graphical Methods for Categorical Data.” In Proceedings of the Seventeenth Annual SAS User’s Group International Conference, 1367–1373. http://datavis.ca/papers/sugi/sugi17.pdf.

  7. Friendly M (2000). Visualizing Categorical Data, series SAS series in statistical applications. SAS Institute. ISBN 9781580256605.

  8. G. Koch & S. Edwards (1988), Clinical efficiency trials with categorical data. In K. E. Peace (ed.), Biopharmaceutical Statistics for Drug Development, 403–451. Marcel Dekker, New York. Meyer D,

  9. Zeileis A, Hornik K (2006). “The Strucplot Framework: Visualizing Multi-Way Contingency Tables with vcd.” Journal of Statistical Software, 17(3), 1-48. doi:10.18637/jss.v017.i03 https://doi.org/10.18637/jss.v017.i03.

  10. Posit team (2025). RStudio: Integrated Development Environment for R.Posit Software, PBC, Boston, MA. URL http://www.posit.co/.

  11. R Core Team (2026). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. doi:10.32614/R.manuals https://doi.org/10.32614/R.manuals. https://www.R-project.org/.

  12. Snee RD (1974). “Graphical Display of Two-way Contingency Tables.” The American Statistician, 28(1), 9–12. doi:10.1080/00031305.1974.10479053.

  13. Xie Y, Allaire J, Grolemund G (2018). R Markdown: The Definitive Guide. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 9781138359338. https://yihui.org/rmarkdown/.