Cálculo de frecuencias y proporciones

Datos de ejemplo

Vamos a utilizar el conjunto de datos famuss.csv. Uno de los objetivos de este estudio fue examinar la asociación entre las características demográficas, fisiológicas y genéticas y la fuerza muscular. Se midió la fuerza en los brazos dominantes y no dominantes antes y después del entrenamiento de resistencia. El gen de interés es el ACTN3, el «gen del deporte».

Cargar los datos
# Cargar datos en un objeto llamado famuss
famuss <- read.csv("DATA/famuss.csv") # Asegúrate de que la ruta al archivo sea correcta
Tipos de variables
# Tipos de variables en famuss
str(famuss)
## 'data.frame':    595 obs. of  9 variables:
##  $ ndrm.ch    : num  40 25 40 125 40 75 100 57.1 33.3 20 ...
##  $ drm.ch     : num  40 0 0 0 20 0 0 -14.3 0 0 ...
##  $ sex        : chr  "Female" "Male" "Female" "Female" ...
##  $ age        : int  27 36 24 40 32 24 30 28 27 30 ...
##  $ race       : chr  "Caucasian" "Caucasian" "Caucasian" "Caucasian" ...
##  $ height     : num  65 71.7 65 68 61 62.2 65 68 68.2 62.2 ...
##  $ weight     : num  199 189 134 171 118 120 134 162 189 120 ...
##  $ actn3.r577x: chr  "CC" "CT" "CT" "CT" ...
##  $ bmi        : num  33.1 25.8 22.3 26 22.3 ...

Frecuencias y Proporciones

Las frecuencias y proporciones son medidas descriptivas que nos permiten resumir y entender la distribución de una variable categórica. La frecuencia es el número de veces que ocurre cada categoría, mientras que la proporción es la frecuencia dividida por el total de observaciones.

Frecuencias
# Frecuencias
table(famuss$race)
## 
## African Am      Asian  Caucasian   Hispanic      Other 
##         27         55        467         23         23
table(famuss$sex)
## 
## Female   Male 
##    353    242
table(famuss$actn3.r577x)
## 
##  CC  CT  TT 
## 173 261 161
Proporciones
# Proporciones
prop.table(table(famuss$race))
## 
## African Am      Asian  Caucasian   Hispanic      Other 
## 0.04537815 0.09243697 0.78487395 0.03865546 0.03865546
prop.table(table(famuss$sex))
## 
##    Female      Male 
## 0.5932773 0.4067227
prop.table(table(famuss$actn3.r577x))
## 
##        CC        CT        TT 
## 0.2907563 0.4386555 0.2705882
Tabla elegante con gt
library(gt)
# Crear tabla de proporciones con dos decimales
tabla_proporciones <- prop.table(table(famuss$race)) %>%
  as.data.frame() %>%
  gt() %>%
  fmt_number(
    columns = c(Freq),
    decimals = 3
  ) %>%
  tab_header(
    title = "Tabla 1. Proporciones de la variable race"
  ) %>%
  cols_label(
    Var1 = "Etnicidad",
    Freq = "Proporción"
  )
tabla_proporciones
Tabla 1. Proporciones de la variable race
Etnicidad Proporción
African Am 0.045
Asian 0.092
Caucasian 0.785
Hispanic 0.039
Other 0.039

EJERCICIO: Crea tabla de proporciones para la variable actn3.r577x en famuss, utilizando el paquete gt para darles un formato atractivo.

Gráficos de barras

Los gráficos de barras son una herramienta visual útil para representar la distribución de una variable categórica. Cada barra representa una categoría, y la altura de la barra corresponde a la frecuencia o proporción de esa categoría.

Gráfico de barras de frecuencia para actn3.r577x
library(ggplot2)
# Gráfico de barras de la variable actn3.r577x con ggplot2
ggplot(famuss, aes(x = actn3.r577x)) +
  geom_bar(fill = "steelblue") +
  labs(x = "Genotipo ACTN3", y = "Frecuencia")

Figura 1. Gráfico de barras de la frecuencia de la variable actn3.r577x.

Gráfico de barras de proporciones para actn3.r577x
# Gráfico de barras de la variable actn3.r577x con ggplot2
ggplot(famuss, aes(x = actn3.r577x)) +
  geom_bar(aes(y = (after_stat(count))/sum(after_stat(count))), fill = "steelblue") +
  scale_y_continuous() +
  labs(x = "Genotipo ACTN3", y = "Proporción")

Figura 2. Gráfico de barras de la proporción de la variable actn3.r577x

EJERCICIO: Crea un gráfico de barras de proporciones para la variable race en famuss, utilizando el paquete ggplot2. Usa otro color para las barras.

Gráfico de barras horizontales ordenadas para race

Cuando las etiquetas de las categorías son largas, es útil utilizar un gráfico de barras horizontales para mejorar la legibilidad. Además, ordenar las barras de mayor a menor frecuencia puede facilitar la interpretación visual.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(forcats)
counts <- famuss %>%
  count(race, drop = FALSE) %>%     # drop = FALSE keeps unused factor levels
  arrange(desc(n)) %>%
  mutate(race = fct_reorder(race, n, .desc = FALSE))

ggplot(counts, aes(x = race, y = n)) +
  geom_col(fill = "#1F78B4") +
  coord_flip() +
  labs(x = NULL, y = "Frecuencia") +
  theme_minimal()

Figura 3. Gráfico de barras horizontales ordenadas de la variable race en famuss.

EJERCICIO: Crea un gráfico de barras horizontales ordenadas para la variable actn3.r577x en famuss, utilizando el paquete ggplot2. Usa otro color para las barras.

Gráfico de barras apiladas para actn3.r577x y sex

Los gráficos de barras apiladas permiten comparar la distribución de una variable categórica dentro de las categorías de otra variable categórica. En este caso, podemos comparar la distribución del genotipo ACTN3 (actn3.r577x) entre hombres y mujeres (sex).

library(ggplot2)

ggplot(famuss, aes(x = actn3.r577x, fill = sex)) +
  geom_bar() +
  labs(x = "Genotipo ACTN3 R577X",
       y = "Frecuencia",
       fill = "Sexo") +
  theme_minimal()

Figura 4. Gráfico de barras apiladas de la variable actn3.r577x por sex en famuss.

EJERCICIO: Crea un gráfico de barras apiladas para la variable race por sex en famuss, utilizando el paquete ggplot2.

Gráfico de barras separadas (dodged) para actn3.r577x y sex

Otra forma de comparar la distribución de una variable categórica dentro de las categorías de otra variable categórica es utilizar un gráfico de barras separadas (dodged). En este caso, podemos comparar la distribución del genotipo ACTN3 (actn3.r577x) entre hombres y mujeres (sex).

library(ggplot2)

ggplot(famuss, aes(x = actn3.r577x, fill = sex)) +
  geom_bar(position = position_dodge(width = 0.6)) +
  labs(x = "Genotipo ACTN3 R577X", y = "Frecuencia", fill = "Sexo") +
  theme_minimal()

Figura 5. Gráfico de barras separadas (dodged) de la variable actn3.r577x por sex en famuss.

EJERCICIO: Crea un gráfico de barras separadas (dodged) para la variable race por sex en famuss, utilizando el paquete ggplot2.

Gráfico de barras de proporciones para actn3.r577x por sex
library(ggplot2)
library(scales)
ggplot(famuss, aes(x = actn3.r577x, fill = sex)) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = percent) +
  labs(x = "Genotipo ACTN3 R577X",
       y = "Proporción",
       fill = "Sexo") +
  theme_minimal()

Figura 6. Gráfico de barras de proporciones de la variable sex por actn3.r577x en famuss.

Podemos crear un gráfico de barras que muestre las proporciones de cada categoría de actn3.r577x dentro de cada categoría de sex. Esto nos permitirá ver cómo se distribuyen los genotipos ACTN3 entre hombres y mujeres.

library(ggplot2)
library(scales)
ggplot(famuss, aes(x = sex, fill = actn3.r577x)) +
  geom_bar(position = "fill") +
  scale_y_continuous() +
  labs(x = "Sexo",
       y = "Proporción",
       fill = "Sexo") +
  theme_minimal()

Figura 7. Gráfico de barras de proporciones de la variable sex por actn3.r577x enfamuss`.

EJERCICIO: Crea un gráfico de barras de proporciones para la variable race por sex en famuss, utilizando el paquete ggplot2.

Tabla de contingencia

Una tabla de contingencia es una herramienta que nos permite examinar la relación entre dos variables categóricas. En una tabla de contingencia, las filas representan las categorías de una variable y las columnas representan las categorías de la otra variable. Cada celda en la tabla contiene el conteo o frecuencia de observaciones que pertenecen a la combinación específica de categorías.

Tabla de contingencia de actn3.r577x por `race``
library(dplyr)
library(tidyr)
library(gt)

tabla_actn3_race <- famuss %>%
  count(actn3.r577x, race, name = "n") %>%
  pivot_wider(names_from = race, values_from = n, values_fill = 0)

gt(tabla_actn3_race) %>%
  cols_label(
    actn3.r577x = "Genotipo"
  ) %>%
  tab_header(
    title = "Tabla de contingencia: Genotipo de ACTN3 R577X vs Race",
    subtitle = "Frecuencias"
  )
Tabla de contingencia: Genotipo de ACTN3 R577X vs Race
Frecuencias
Genotipo African Am Asian Caucasian Hispanic Other
CC 16 21 125 4 7
CT 6 18 216 10 11
TT 5 16 126 9 5

EJERCICIO: Crea una tabla de contingencia para las variables sex y race en famuss, utilizando el paquete gt para darles un formato atractivo.

Gráfico de mosaico

El gráfico de mosaico es una representación visual de una tabla de contingencia que muestra la relación entre dos variables categóricas. En un gráfico de mosaico, el área de cada celda es proporcional a la frecuencia o proporción de observaciones en esa combinación específica de categorías.

library(ggplot2)
library(ggmosaic)
library(dplyr)

# Asegurar que los factores estén (opcionalmente) ordenados por frecuencia
datos_plot <- famuss %>%
  mutate(
    actn3.r577x = forcats::fct_infreq(actn3.r577x),
    race = forcats::fct_infreq(race)
  )

ggplot(data = datos_plot) +
  geom_mosaic(aes(x = product(actn3.r577x), fill = race), colour = "white", alpha = 0.9) +
  scale_fill_brewer(palette = "Set2") +
  labs(
    x = "Genotipo (ACTN3 R577X)",
    y = "Proporción dentro de Etnicidad",
    fill = "Etnicidad"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    panel.grid = element_blank(),
    legend.position = "right"
  )

Figura 8. Gráfico de mosaico de la tabla de contingencia entre las variables actn3.r577x y race en famuss.

EJERCICIO: ¿Cuál genotipo es predominante en cada grupo étnico?