1 Introducción

El concepto de aleatorización fue introducido en 1926 por Ronald A. Fisher en su publicación “Métodos estadísticos para investigadores.”

Un buen diseño de ensayos clínicos debe emplear un método de aleatorización de pacientes que garantice la validez y la confiabilidad de los resultados de la investigación. La aleatorización consiste en la asignación no predecible de los pacientes del ensayo clínico a una de las alternativas de los tratamientos bajo estudio. Nos permite que todos los individuos que cumplen con los criterios de selección tengan la misma probabilidad de ser incluidos en cualquier brazo del estudio y, así lograr grupos semejantes y equilibrados en las variables generales como edad, sexo, peso, talla, etc. Es decir, ayuda a minimizar los sesgos de confusión en la conformación de los grupos de estudio.

La aleatorización es importante para controlar la variabilidad y aumentar la precisión de las estimaciones de efecto. Existen diferentes métodos de aleatorización en ensayos clínicos, que se utilizan para asegurar la distribución equilibrada de las características de los participantes en los grupos de tratamiento y control [1].

Uno de los métodos más comunes es la aleatorización simple (o completa), que asigna al azar a los participantes a uno de los grupos de estudio, éste método es fundamental para reducir el sesgo de selección, aumentar el poder estadístico y proporcionar una base sólida para la inferencia estadística. El método simple se considera fácil de entender e implementar, sin embargo, puede generar grupos no balanceados, es decir, grupos de pacientes que difieren entre tratamientos en variables como: género, edad, etc.

Otro método, es la aleatorización por estratos (estratificada), que asegura una distribución equilibrada de los participantes por factores como la edad, género o comorbilidades. El método consiste en construir estratos o bloques de pacientes que sean lo más semejantes posibles en dichos factores y, después asignar los tratamientos dentro de cada uno de los bloques.

Ventajas

  • Eficiencia dentro de los bloques
  • Minimiza la predicción de asignación al tratamiento

Desventajas

  • Se requiere la información del paciente con anticipación para formar los bloques
  • Se vuelve complejo cuando aumenta el número factores
  • Dificulta el cegamiento de tratamientos

2 Método de aleatorización simple

2.1 Igual tamaño de brazos

Se desea probar la efectividad y seguridad de un tratamiento para dolor de espalda; para ello se cuenta con 100 pacientes que padecen dicha dolencia y se aleatorizan entre dos grupos: tratamiento 1 (T1) y tratamiento 2 (T2), en donde en este caso se asigna el mismo número de pacientes para cada grupo.

Se requiere contar con las paqueterías {randomizr}, {here} y {writexl}, esto se puede realizar usando el bloque siguiente:

# Instalación
list.of.packages <- c("randomizr", "here","writexl")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
# Cargar librerías
library(randomizr)
library(here)
library(writexl)

NOTA: Se fija el valor semilla de R en 123 para producir los mismos resultados en los ejemplos.

# Crear un vector de ID´s de los sujetos
sujetos_ids <- 1:100

# Definir semilla (para obtener la misma aleatorización)
set.seed(123)

# Aleatorización de sujetos en dos brazos
asigna_tratamiento <- complete_ra(N = 100, num_arms = 2)

# Tabla de los sujetos y tratamientos 
aleato_datos <- data.frame(IDs_de_pacientes = sujetos_ids,
                              Tratamiento = asigna_tratamiento)

# Visualización de los 6 primeros sujetos y tratamientos
head(aleato_datos)
##   IDs_de_pacientes Tratamiento
## 1                1          T2
## 2                2          T2
## 3                3          T1
## 4                4          T2
## 5                5          T1
## 6                6          T1
# Tabla de sujetos por tratamientos
table(aleato_datos$Tratamiento)
## 
## T1 T2 
## 50 50

La función clave en el código de arriba es: complete_ra del paquete {randomizr}, que genera una asignación aleatoria simple, lo que significa que cada sujeto tiene la misma probabilidad de ser asignado a cualquier grupo de tratamiento.

Sus argumentos son:

  • N: número de sujetos
  • m: número de sujetos en el tratamiento
  • prob: probabilidad de asignación para el tratamiento
  • num_arms: número de brazos

2.2 Distinto tamaño de brazos

Ahora se requieren 40 pacientes en el grupo de tratamiento 2 y 60 pacientes en el tratamiento 1.

set.seed(123) 

# Aleatorización de sujetos
tratamiento_grupos_2 <- complete_ra(N = 100, num_arms = 2, m=40)

# Tabla de los sujetos y tratamientos
datos_aleatorizados2 <- data.frame(IDs_de_pacientes = sujetos_ids,
                              Tratamiento = tratamiento_grupos_2)

# Visualización de los 6 primeros sujetos y tratamientos
head(datos_aleatorizados2)
##   IDs_de_pacientes Tratamiento
## 1                1          T1
## 2                2          T2
## 3                3          T1
## 4                4          T1
## 5                5          T2
## 6                6          T1

El argumento “m,” indica la cantidad de sujetos en el tratamiento 2.

# Tabla de sujetos por tratamientos
table(datos_aleatorizados2$Tratamiento)
## 
## T1 T2 
## 60 40

2.3 Tamaño de brazos por probabilidad

Se puede usar el argumento “prob” para especificar la probabilidad de asignación al tratamiento 2. Por ejemplo, prob = 0.7 asignaría el 70% de los sujetos al brazo 2 y, el 30% de los sujetos al brazo 1.

set.seed(123)

tratamiento_grupos_3 <- complete_ra(N = 100, num_arms = 2, prob=0.7)

datos_aleatorizados3 <- data.frame(IDs_de_pacientes = sujetos_ids,
                              Tratamiento = tratamiento_grupos_3)

head(datos_aleatorizados3)
##   IDs_de_pacientes Tratamiento
## 1                1          T2
## 2                2          T2
## 3                3          T1
## 4                4          T2
## 5                5          T2
## 6                6          T2
table(datos_aleatorizados3$Tratamiento)
## 
## T1 T2 
## 30 70

2.4 Aleatorización en tres brazos

Este método es similar a la asignación entre dos grupos, sin embargo ahora se indica el número de brazos igual a 3.

set.seed(123)

tratamiento_grupos_4 <- complete_ra(N = 100, num_arms = 3)

datos_aleatorizados4 <- data.frame(IDs_de_pacientes = sujetos_ids,
                              Tratamiento = tratamiento_grupos_4)

head(datos_aleatorizados4)
##   IDs_de_pacientes Tratamiento
## 1                1          T3
## 2                2          T2
## 3                3          T1
## 4                4          T3
## 5                5          T2
## 6                6          T2
table(datos_aleatorizados4$Tratamiento)
## 
## T1 T2 T3 
## 33 34 33

3 Método de aleatorización por estratos

3.1 Estratificación con dos factores

Para la aleatorización por estratos, es necesario contar previamente con la información de los pacientes, de modo que se conozcan las características de interés que ayudarán a formar los estratos, a continuación se crea una tabla de datos que incluye la edad, el genero y la enfermedad de 100 pacientes.

Codificación de factores

Edad:

  • 0-17 años: 0
  • 18-40 años: 1
  • 41-65 años: 2
  • 66+ años: 3

Género:

  • Femenino: 0
  • Masculino: 1
# Conformación de la base de datos de los pacientes

datos <- data.frame(
  ID = seq(1,100,1),
  Edad = rep(c(0, 1, 2, 3), each = 25),
  Genero = rep(c(1, 0), 50),
  Enfermedad = sample(c("Cáncer", "Diabetes", "Hipertensión"), 100, replace = TRUE),
  Tratamiento = rep(NA, 100)
)

A continuación, con la función split se estratifica por edad y género.

estratificacion <- split(datos, list(datos$Edad, datos$Genero))
# Asignación de tratamientos a los pacientes

for (i in 1:length(estratificacion)) {
  estratificacion[[i]]$Tratamiento <- sample(c("tratamiento 1", "tratamiento 2"), nrow(estratificacion[[i]]), replace = TRUE)
}

# Tabla de aleatorizados
datos_estratificados <- do.call(rbind, estratificacion)

head(datos_estratificados)
##        ID Edad Genero   Enfermedad   Tratamiento
## 0.0.2   2    0      0 Hipertensión tratamiento 1
## 0.0.4   4    0      0 Hipertensión tratamiento 1
## 0.0.6   6    0      0 Hipertensión tratamiento 1
## 0.0.8   8    0      0 Hipertensión tratamiento 2
## 0.0.10 10    0      0 Hipertensión tratamiento 2
## 0.0.12 12    0      0 Hipertensión tratamiento 2
# Validación de balance de características de pacientes entre los tratamientos
table(datos_estratificados$Tratamiento, datos_estratificados$Edad, datos_estratificados$Genero)
## , ,  = 0
## 
##                
##                 0 1 2 3
##   tratamiento 1 8 6 6 7
##   tratamiento 2 4 7 6 6
## 
## , ,  = 1
## 
##                
##                 0 1 2 3
##   tratamiento 1 9 9 8 7
##   tratamiento 2 4 3 5 5

3.2 Estratificación con tres factores

Ahora, se consideran tres características de interés: edad, género y enfermedad.

estratificacion2 <- split(datos, list(datos$Edad, datos$Genero, datos$Enfermedad))


for (i in 1:length(estratificacion2)) {
  estratificacion2[[i]]$Tratamiento <- sample(c("tratamiento 1", "tratamiento 2"), nrow(estratificacion2[[i]]), replace = TRUE)
}

datos_estratificados2 <- do.call(rbind, estratificacion2)

head(datos_estratificados2)
##               ID Edad Genero Enfermedad   Tratamiento
## 1.0.Cáncer.36 36    1      0     Cáncer tratamiento 2
## 1.0.Cáncer.40 40    1      0     Cáncer tratamiento 2
## 2.0.Cáncer.56 56    2      0     Cáncer tratamiento 2
## 2.0.Cáncer.60 60    2      0     Cáncer tratamiento 2
## 2.0.Cáncer.66 66    2      0     Cáncer tratamiento 2
## 2.0.Cáncer.68 68    2      0     Cáncer tratamiento 2

4 Exportación de resultados

Usando la función write_xlsx del paquete {writexl} se exportan las tablas a Microsoft Excel con ayuda de la función here. A manera de ejemplo se presenta la exportación para la tabla de aleatorización simple caso igual tamaño de brazos.

write_xlsx(aleato_datos,here("Exportaciones", "AleatorizacionSimple_IgualTamaño.xlsx"))

here ayuda con la tarea de especificar la ruta en donde se guardará el archivo Excel, se debe indicar el nombre del sub-folder y el nombre que se desea asignar al archivo creado [2].

Referencias

1. Schwager S. R is for randomization: Complex randomization of patients in clinical trials. Cornell University; 2022.
2. Malshe A. R project and here package. 2020.