1. Librerías

library(readxl)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(naniar)
library(janitor)
## 
## Adjuntando el paquete: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(tableone)
library(epitools)
library(knitr)
library(naniar)
library(psych)
## 
## Adjuntando el paquete: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(tableone)
library(gtsummary)
library(dplyr)

2. Importación

datos <- read_excel("ar_remite_solo_multicéntrico_R.xlsx")
dim(datos)
## [1] 100  35
names(datos)
##  [1] "site"                            "id_paciente"                    
##  [3] "sexo"                            "fecha_nac"                      
##  [5] "edad"                            "hta"                            
##  [7] "dbt"                             "dlp"                            
##  [9] "tbq"                             "extbq"                          
## [11] "fecha_diagnóstico"               "lar_título_inicial"             
## [13] "ccp_título_inicial"              "vsg_inicial"                    
## [15] "pcr_inicial"                     "dre"                            
## [17] "nad_inicial"                     "nat_inicial"                    
## [19] "DMARD_inicial_fecha"             "DMARD_inicial_tipo"             
## [21] "DMARD_inicial_cual"              "DMARD_inicial_dosis"            
## [23] "PDN_inicial_fecha"               "PDN_inicial_dosis"              
## [25] "intensificacion_tto"             "combinacion_DMARDs"             
## [27] "cantidad_lineas_tto"             "recibio_bDMARD"                 
## [29] "recibio_tsDMARD"                 "fecha_fin_ultimo_DMARD"         
## [31] "fecha_inicio_remision_sostenida" "recaída"                        
## [33] "fecha_recaída"                   "fecha_última_visita"            
## [35] "motivo_fin_DMARD"

3. Estructura de la base

str(datos)
## tibble [100 × 35] (S3: tbl_df/tbl/data.frame)
##  $ site                           : chr [1:100] "HIQ" "HIQ" "HIQ" "HIQ" ...
##  $ id_paciente                    : chr [1:100] "CASO0001" "CASO0002" "CASO0003" "CASO0004" ...
##  $ sexo                           : num [1:100] 1 1 1 0 0 0 0 1 0 0 ...
##  $ fecha_nac                      : POSIXct[1:100], format: "1971-05-20" "1977-08-21" ...
##  $ edad                           : num [1:100] 47 38 36 56 25 62 59 45 62 36 ...
##  $ hta                            : num [1:100] 0 0 0 0 0 0 0 0 1 0 ...
##  $ dbt                            : num [1:100] 0 0 0 0 0 0 0 0 0 0 ...
##  $ dlp                            : num [1:100] 1 0 0 1 0 0 0 0 0 0 ...
##  $ tbq                            : num [1:100] 0 0 0 0 0 0 0 0 0 0 ...
##  $ extbq                          : num [1:100] 1 0 0 0 0 0 0 0 1 0 ...
##  $ fecha_diagnóstico              : POSIXct[1:100], format: "2019-01-08" "2016-06-01" ...
##  $ lar_título_inicial             : num [1:100] 1024 60 500 98 14 ...
##  $ ccp_título_inicial             : num [1:100] 534 196 1 113 86 15 329 200 62 5 ...
##  $ vsg_inicial                    : num [1:100] 42 110 12 37 44 10 67 10 50 49 ...
##  $ pcr_inicial                    : num [1:100] 96 9 1 5.3 9 7.7 76.8 1.8 4 6 ...
##  $ dre                            : num [1:100] 0 0 0 0 0 0 0 0 0 NA ...
##  $ nad_inicial                    : num [1:100] 11 10 5 3 10 3 9 12 13 10 ...
##  $ nat_inicial                    : num [1:100] 9 10 5 7 10 8 8 12 13 10 ...
##  $ DMARD_inicial_fecha            : POSIXct[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ DMARD_inicial_tipo             : chr [1:100] "csDMARD" "csDMARD" "csDMARD" "csDMARD" ...
##  $ DMARD_inicial_cual             : chr [1:100] "MTX" "MTX" "MTX" "MTX" ...
##  $ DMARD_inicial_dosis            : num [1:100] 25 25 25 15 25 25 15 15 25 25 ...
##  $ PDN_inicial_fecha              : POSIXct[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ PDN_inicial_dosis              : num [1:100] 20 8 8 8 8 8 8 8 8 8 ...
##  $ intensificacion_tto            : num [1:100] 1 1 1 1 1 0 1 0 1 1 ...
##  $ combinacion_DMARDs             : num [1:100] 1 1 1 1 1 0 1 0 1 1 ...
##  $ cantidad_lineas_tto            : num [1:100] 2 2 3 3 2 1 5 1 3 2 ...
##  $ recibio_bDMARD                 : num [1:100] 0 0 1 1 0 0 1 0 0 0 ...
##  $ recibio_tsDMARD                : num [1:100] 0 0 0 0 0 0 0 0 1 0 ...
##  $ fecha_fin_ultimo_DMARD         : POSIXct[1:100], format: "2022-11-15" "2022-05-28" ...
##  $ fecha_inicio_remision_sostenida: POSIXct[1:100], format: "2023-11-15" "2023-05-28" ...
##  $ recaída                        : num [1:100] 0 0 0 0 1 0 1 0 0 0 ...
##  $ fecha_recaída                  : POSIXct[1:100], format: NA NA ...
##  $ fecha_última_visita            : POSIXct[1:100], format: "2024-05-09" "2024-06-08" ...
##  $ motivo_fin_DMARD               : chr [1:100] "decisión paciente" "decisión paciente" "decisión paciente" "decisión paciente" ...
datos_limpios <- datos
datos_limpios <- datos_limpios %>%
  mutate(
    grupo = ifelse(grepl("^CASO", id_paciente), "Caso", "Control"),
    grupo = factor(grupo, levels = c("Control", "Caso")),

    sexo = factor(sexo,
                  levels = c(0, 1),
                  labels = c("Femenino", "Masculino")),

    hta = factor(hta, levels = c(0, 1), labels = c("No", "Si")),
    dbt = factor(dbt, levels = c(0, 1), labels = c("No", "Si")),
    dlp = factor(dlp, levels = c(0, 1), labels = c("No", "Si")),
    tbq = factor(tbq, levels = c(0, 1), labels = c("No", "Si")),
    extbq = factor(extbq, levels = c(0, 1), labels = c("No", "Si")),

    dre = factor(dre, levels = c(0, 1), labels = c("No", "Si")),

    intensificacion_tto = factor(intensificacion_tto,
                                 levels = c(0, 1),
                                 labels = c("No", "Si")),

    combinacion_DMARDs = factor(combinacion_DMARDs,
                                levels = c(0, 1),
                                labels = c("No", "Si")),

    recibio_bDMARD = factor(recibio_bDMARD,
                            levels = c(0, 1),
                            labels = c("No", "Si")),

    recibio_tsDMARD = factor(recibio_tsDMARD,
                             levels = c(0, 1),
                             labels = c("No", "Si")),

    recaída = factor(recaída,
                     levels = c(0, 1),
                     labels = c("No", "Si")),

    DMARD_inicial_tipo = factor(DMARD_inicial_tipo),
    DMARD_inicial_cual = factor(DMARD_inicial_cual),
    motivo_fin_DMARD = factor(motivo_fin_DMARD)
  )

str(datos_limpios)
## tibble [100 × 36] (S3: tbl_df/tbl/data.frame)
##  $ site                           : chr [1:100] "HIQ" "HIQ" "HIQ" "HIQ" ...
##  $ id_paciente                    : chr [1:100] "CASO0001" "CASO0002" "CASO0003" "CASO0004" ...
##  $ sexo                           : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 1 1 1 1 2 1 1 ...
##  $ fecha_nac                      : POSIXct[1:100], format: "1971-05-20" "1977-08-21" ...
##  $ edad                           : num [1:100] 47 38 36 56 25 62 59 45 62 36 ...
##  $ hta                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 2 1 ...
##  $ dbt                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ dlp                            : Factor w/ 2 levels "No","Si": 2 1 1 2 1 1 1 1 1 1 ...
##  $ tbq                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ extbq                          : Factor w/ 2 levels "No","Si": 2 1 1 1 1 1 1 1 2 1 ...
##  $ fecha_diagnóstico              : POSIXct[1:100], format: "2019-01-08" "2016-06-01" ...
##  $ lar_título_inicial             : num [1:100] 1024 60 500 98 14 ...
##  $ ccp_título_inicial             : num [1:100] 534 196 1 113 86 15 329 200 62 5 ...
##  $ vsg_inicial                    : num [1:100] 42 110 12 37 44 10 67 10 50 49 ...
##  $ pcr_inicial                    : num [1:100] 96 9 1 5.3 9 7.7 76.8 1.8 4 6 ...
##  $ dre                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 NA ...
##  $ nad_inicial                    : num [1:100] 11 10 5 3 10 3 9 12 13 10 ...
##  $ nat_inicial                    : num [1:100] 9 10 5 7 10 8 8 12 13 10 ...
##  $ DMARD_inicial_fecha            : POSIXct[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ DMARD_inicial_tipo             : Factor w/ 1 level "csDMARD": 1 1 1 1 1 1 1 1 1 1 ...
##  $ DMARD_inicial_cual             : Factor w/ 3 levels "HCQ","LEF","MTX": 3 3 3 3 3 3 3 3 3 3 ...
##  $ DMARD_inicial_dosis            : num [1:100] 25 25 25 15 25 25 15 15 25 25 ...
##  $ PDN_inicial_fecha              : POSIXct[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ PDN_inicial_dosis              : num [1:100] 20 8 8 8 8 8 8 8 8 8 ...
##  $ intensificacion_tto            : Factor w/ 2 levels "No","Si": 2 2 2 2 2 1 2 1 2 2 ...
##  $ combinacion_DMARDs             : Factor w/ 2 levels "No","Si": 2 2 2 2 2 1 2 1 2 2 ...
##  $ cantidad_lineas_tto            : num [1:100] 2 2 3 3 2 1 5 1 3 2 ...
##  $ recibio_bDMARD                 : Factor w/ 2 levels "No","Si": 1 1 2 2 1 1 2 1 1 1 ...
##  $ recibio_tsDMARD                : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 2 1 ...
##  $ fecha_fin_ultimo_DMARD         : POSIXct[1:100], format: "2022-11-15" "2022-05-28" ...
##  $ fecha_inicio_remision_sostenida: POSIXct[1:100], format: "2023-11-15" "2023-05-28" ...
##  $ recaída                        : Factor w/ 2 levels "No","Si": 1 1 1 1 2 1 2 1 1 1 ...
##  $ fecha_recaída                  : POSIXct[1:100], format: NA NA ...
##  $ fecha_última_visita            : POSIXct[1:100], format: "2024-05-09" "2024-06-08" ...
##  $ motivo_fin_DMARD               : Factor w/ 7 levels "Decisión co1partida paciente-1édico",..: 3 3 3 3 5 5 6 5 5 5 ...
##  $ grupo                          : Factor w/ 2 levels "Control","Caso": 2 2 2 2 2 2 2 2 2 2 ...
datos_limpios <- datos_limpios %>%
  mutate(
    across(
      contains("fecha"),
      as.Date
    )
  )

str(datos_limpios)
## tibble [100 × 36] (S3: tbl_df/tbl/data.frame)
##  $ site                           : chr [1:100] "HIQ" "HIQ" "HIQ" "HIQ" ...
##  $ id_paciente                    : chr [1:100] "CASO0001" "CASO0002" "CASO0003" "CASO0004" ...
##  $ sexo                           : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 1 1 1 1 2 1 1 ...
##  $ fecha_nac                      : Date[1:100], format: "1971-05-20" "1977-08-21" ...
##  $ edad                           : num [1:100] 47 38 36 56 25 62 59 45 62 36 ...
##  $ hta                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 2 1 ...
##  $ dbt                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ dlp                            : Factor w/ 2 levels "No","Si": 2 1 1 2 1 1 1 1 1 1 ...
##  $ tbq                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ extbq                          : Factor w/ 2 levels "No","Si": 2 1 1 1 1 1 1 1 2 1 ...
##  $ fecha_diagnóstico              : Date[1:100], format: "2019-01-08" "2016-06-01" ...
##  $ lar_título_inicial             : num [1:100] 1024 60 500 98 14 ...
##  $ ccp_título_inicial             : num [1:100] 534 196 1 113 86 15 329 200 62 5 ...
##  $ vsg_inicial                    : num [1:100] 42 110 12 37 44 10 67 10 50 49 ...
##  $ pcr_inicial                    : num [1:100] 96 9 1 5.3 9 7.7 76.8 1.8 4 6 ...
##  $ dre                            : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 NA ...
##  $ nad_inicial                    : num [1:100] 11 10 5 3 10 3 9 12 13 10 ...
##  $ nat_inicial                    : num [1:100] 9 10 5 7 10 8 8 12 13 10 ...
##  $ DMARD_inicial_fecha            : Date[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ DMARD_inicial_tipo             : Factor w/ 1 level "csDMARD": 1 1 1 1 1 1 1 1 1 1 ...
##  $ DMARD_inicial_cual             : Factor w/ 3 levels "HCQ","LEF","MTX": 3 3 3 3 3 3 3 3 3 3 ...
##  $ DMARD_inicial_dosis            : num [1:100] 25 25 25 15 25 25 15 15 25 25 ...
##  $ PDN_inicial_fecha              : Date[1:100], format: "2019-01-14" "2016-06-01" ...
##  $ PDN_inicial_dosis              : num [1:100] 20 8 8 8 8 8 8 8 8 8 ...
##  $ intensificacion_tto            : Factor w/ 2 levels "No","Si": 2 2 2 2 2 1 2 1 2 2 ...
##  $ combinacion_DMARDs             : Factor w/ 2 levels "No","Si": 2 2 2 2 2 1 2 1 2 2 ...
##  $ cantidad_lineas_tto            : num [1:100] 2 2 3 3 2 1 5 1 3 2 ...
##  $ recibio_bDMARD                 : Factor w/ 2 levels "No","Si": 1 1 2 2 1 1 2 1 1 1 ...
##  $ recibio_tsDMARD                : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 2 1 ...
##  $ fecha_fin_ultimo_DMARD         : Date[1:100], format: "2022-11-15" "2022-05-28" ...
##  $ fecha_inicio_remision_sostenida: Date[1:100], format: "2023-11-15" "2023-05-28" ...
##  $ recaída                        : Factor w/ 2 levels "No","Si": 1 1 1 1 2 1 2 1 1 1 ...
##  $ fecha_recaída                  : Date[1:100], format: NA NA ...
##  $ fecha_última_visita            : Date[1:100], format: "2024-05-09" "2024-06-08" ...
##  $ motivo_fin_DMARD               : Factor w/ 7 levels "Decisión co1partida paciente-1édico",..: 3 3 3 3 5 5 6 5 5 5 ...
##  $ grupo                          : Factor w/ 2 levels "Control","Caso": 2 2 2 2 2 2 2 2 2 2 ...

4. Evaluación de grupos y duplicados

4.1 Distribución casos/controles

table(datos_limpios$grupo)
## 
## Control    Caso 
##      75      25

Interpretación: La base quedó conformada por 100 pacientes, distribuidos en 25 casos y 75 controles, manteniendo la relación de 1:3 prevista en el diseño del estudio.

4.2 Duplicados

sum(duplicated(datos_limpios$id_paciente))
## [1] 0

Interpretación: No se identificaron identificadores de pacientes duplicados, por lo que cada registro corresponde a un individuo único y no existen observaciones repetidas que puedan sesgar los análisis posteriores.

4.3 Distribución por centro

table(datos_limpios$site)
## 
## HIBA HILP  HIQ HSJD IREP 
##    8   12   40   36    4
table(datos_limpios$site,
      datos_limpios$grupo)
##       
##        Control Caso
##   HIBA       6    2
##   HILP       9    3
##   HIQ       30   10
##   HSJD      27    9
##   IREP       3    1

Interpretación: La cohorte multicéntrica quedó integrada por 100 pacientes provenientes de cinco centros. El Hospital Zonal General de Agudos Dr. Isidoro Iriarte de Quilmes (HIQ) aportó 40 pacientes (10 casos y 30 controles), el Hospital San Juan de Dios de La Plata (HSJD) 36 pacientes (9 casos y 27 controles), el Hospital Italiano de Buenos Aires (HIBA) 8 pacientes (2 casos y 6 controles), el Hospital Italiano de La Plata (HILP) 12 pacientes (3 casos y 9 controles) y el IREP 4 pacientes (1 caso y 3 controles). En todos los centros se mantuvo la relación 1:3 entre casos y controles establecida en el diseño del estudio.

5. Exploración de datos faltantes

5.1 Conteo de NA

colSums(is.na(datos_limpios))
##                            site                     id_paciente 
##                               0                               0 
##                            sexo                       fecha_nac 
##                               0                               1 
##                            edad                             hta 
##                               0                               0 
##                             dbt                             dlp 
##                               0                               0 
##                             tbq                           extbq 
##                               0                               0 
##               fecha_diagnóstico              lar_título_inicial 
##                               0                               0 
##              ccp_título_inicial                     vsg_inicial 
##                               0                               1 
##                     pcr_inicial                             dre 
##                              11                               2 
##                     nad_inicial                     nat_inicial 
##                               1                               1 
##             DMARD_inicial_fecha              DMARD_inicial_tipo 
##                               1                               0 
##              DMARD_inicial_cual             DMARD_inicial_dosis 
##                               0                               0 
##               PDN_inicial_fecha               PDN_inicial_dosis 
##                              11                               0 
##             intensificacion_tto              combinacion_DMARDs 
##                               0                               0 
##             cantidad_lineas_tto                  recibio_bDMARD 
##                               0                               0 
##                 recibio_tsDMARD          fecha_fin_ultimo_DMARD 
##                               0                              75 
## fecha_inicio_remision_sostenida                         recaída 
##                              75                              75 
##                   fecha_recaída             fecha_última_visita 
##                              97                              75 
##                motivo_fin_DMARD                           grupo 
##                              75                               0

Interpretación: Las variables correspondientes a la evolución de los casos (fecha de finalización del último DMARD, fecha de inicio de la remisión sostenida, motivo de suspensión del DMARD, recaída y fecha de última visita) presentan valores ausentes en los controles por definición del diseño del estudio, por lo que corresponden a valores estructuralmente ausentes y no a datos faltantes. Asimismo, la fecha de recaída sólo se encuentra disponible en los pacientes que presentaron dicho evento. En las variables basales, la completitud fue elevada. Los escasos valores ausentes observados correspondieron principalmente a PCR basal y fecha de inicio de prednisona, con ausencias aisladas en fecha de nacimiento, VSG, daño radiológico estructural, NAD, NAT y fecha de inicio del DMARD. No se identificó un patrón que sugiriera pérdidas sistemáticas de información.

colSums(is.na(
  datos_limpios %>%
    select(
      edad,
      fecha_nac,
      lar_título_inicial,
      ccp_título_inicial,
      vsg_inicial,
      pcr_inicial,
      dre,
      nat_inicial,
      DMARD_inicial_fecha,
      DMARD_inicial_cual,
      PDN_inicial_fecha,
      combinacion_DMARDs
    )
))
##                edad           fecha_nac  lar_título_inicial  ccp_título_inicial 
##                   0                   1                   0                   0 
##         vsg_inicial         pcr_inicial                 dre         nat_inicial 
##                   1                  11                   2                   1 
## DMARD_inicial_fecha  DMARD_inicial_cual   PDN_inicial_fecha  combinacion_DMARDs 
##                   1                   0                  11                   0

Interpretación: Entre las variables basales se observó una elevada completitud de los datos. La PCR basal presentó 11 valores ausentes, mientras que VSG, DRE, fecha de nacimiento, NAD y NAT presentaron únicamente uno o dos valores ausentes. La fecha de inicio de prednisona presentó 11 valores ausentes, que en su mayoría correspondieron a pacientes que no recibieron corticoterapia al inicio del tratamiento; adicionalmente, se observó un único dato faltante para la fecha de inicio del DMARD. En conjunto, la magnitud de los datos faltantes fue baja y no se observó un patrón evidente que sugiriera pérdidas sistemáticas de información en las variables basales.

5.2 Identificar quiénes son los pacientes con NA reales:

datos_limpios %>%
  filter(is.na(pcr_inicial)) %>%
  select(
    id_paciente,
    grupo,
    edad,
    fecha_diagnóstico,
    lar_título_inicial,
    ccp_título_inicial,
    vsg_inicial,
    pcr_inicial
  ) %>%
  knitr::kable()
id_paciente grupo edad fecha_diagnóstico lar_título_inicial ccp_título_inicial vsg_inicial pcr_inicial
CASO0012 Caso 58 2010-11-20 430 236 38 NA
CTRL0001 Control 42 2019-12-14 60 36 53 NA
CTRL0007 Control 37 2014-10-28 0 114 12 NA
CTRL0026 Control 67 2017-05-23 500 196 NA NA
CTRL0028 Control 52 2018-11-22 500 200 95 NA
CTRL0031 Control 66 2010-08-19 0 107 55 NA
CTRL0033 Control 61 2011-08-17 65 145 32 NA
CTRL0034 Control 55 2010-01-03 170 182 40 NA
CTRL0035 Control 57 2010-03-08 70 275 18 NA
CTRL0036 Control 58 2013-07-11 60 200 44 NA
CTRL0065 Control 35 2023-07-27 137 500 30 NA
datos_limpios %>%
  filter(is.na(dre)) %>%
  select(
    id_paciente,
    grupo,
    lar_título_inicial,
    ccp_título_inicial,
    dre
  ) %>%
  knitr::kable()
id_paciente grupo lar_título_inicial ccp_título_inicial dre
CASO0010 Caso 92 5.0 NA
CASO0022 Caso 95 195.6 NA

Interpretación: Se identificaron 11 pacientes con PCR basal faltante y 2 pacientes con daño radiológico estructural basal no documentado. Los pacientes con daño radiológico estructural no documentado presentaban látex AR y/o anti-CCP positivos, por lo que cumplían el criterio de seropositividad establecido para el estudio. Tras la revisión manual de las historias clínicas, los valores ausentes fueron conservados como NA para los análisis posteriores.

5.3 Patrón gráfico de datos faltantes (vismiss):

vis_miss(datos_limpios)

Interpretación: Las variables relacionadas con la suspensión de DMARDs, el inicio de la remisión sostenida, la recaída y el seguimiento posterior fueron registradas exclusivamente en los casos. Por lo tanto, los valores ausentes observados en los controles para estas variables corresponden a ausencias estructurales por diseño y no a datos faltantes.

La exploración visual mostró una baja frecuencia de valores faltantes en las variables basales, sin evidenciar una concentración marcada de datos ausentes en pacientes específicos. Los valores faltantes basales identificados previamente fueron conservados como NA para los análisis correspondientes.

datos_auditoria <- datos_limpios %>%
  select(
    -fecha_fin_ultimo_DMARD,
    -fecha_inicio_remision_sostenida,
    -motivo_fin_DMARD,
    -recaída,
    -fecha_recaída,
    -fecha_última_visita
  )

vis_miss(datos_auditoria)

Interpretación: Tras excluir las variables registradas exclusivamente en los casos, la proporción global de datos faltantes fue del 1,0%. No se observó un patrón evidente de concentración o agrupamiento de valores faltantes en pacientes específicos, lo que refleja una elevada completitud de la base para el análisis estadístico.

En conjunto, la base presentó un alto grado de completitud. Los escasos valores faltantes correspondieron principalmente a variables basales y no mostraron un patrón visual sugestivo de pérdidas sistemáticas de información.

6. Características basales de la población

6.1 Distribución de los grupos

table(datos_limpios$grupo)
## 
## Control    Caso 
##      75      25
prop.table(table(datos_limpios$grupo))*100
## 
## Control    Caso 
##      75      25

Interpretación: Se incluyeron 100 pacientes con artritis reumatoidea seropositiva. Veinticinco pacientes (25%) cumplieron los criterios de remisión sostenida libre de DMARDs (casos), mientras que 75 pacientes (75%) conformaron el grupo control, manteniéndose la relación 1:3 entre casos y controles prevista en el diseño del estudio.

6.2 Sexo

table(datos_limpios$sexo)
## 
##  Femenino Masculino 
##        82        18
prop.table(table(datos_limpios$sexo))*100
## 
##  Femenino Masculino 
##        82        18

Interpretación: La población estuvo compuesta predominantemente por mujeres (82%), en concordancia con la epidemiología conocida de la artritis reumatoidea.

6.3 Evaluación de la distribución de variables continuas

vars_continuas <- datos_limpios %>%
  select(
    edad,
    lar_título_inicial,
    ccp_título_inicial,
    vsg_inicial,
    pcr_inicial
  )
summary(vars_continuas)
##       edad       lar_título_inicial ccp_título_inicial  vsg_inicial    
##  Min.   :16.00   Min.   :   0.0     Min.   :   0.00    Min.   :  6.00  
##  1st Qu.:43.75   1st Qu.:  24.1     1st Qu.:  37.85    1st Qu.: 25.40  
##  Median :50.50   Median :  60.0     Median : 113.50    Median : 38.90  
##  Mean   :50.86   Mean   : 133.3     Mean   : 195.07    Mean   : 39.64  
##  3rd Qu.:61.00   3rd Qu.: 116.1     3rd Qu.: 196.00    3rd Qu.: 48.90  
##  Max.   :81.00   Max.   :2000.0     Max.   :1200.00    Max.   :110.00  
##                                                        NA's   :1       
##   pcr_inicial  
##  Min.   : 1.0  
##  1st Qu.: 3.9  
##  Median : 8.0  
##  Mean   :11.9  
##  3rd Qu.:14.2  
##  Max.   :96.0  
##  NA's   :11
describe(vars_continuas)
##                    vars   n   mean     sd median trimmed    mad min  max range
## edad                  1 100  50.86  12.50   50.5   51.39  12.60  16   81    65
## lar_título_inicial    2 100 133.26 261.09   60.0   73.27  63.90   0 2000  2000
## ccp_título_inicial    3 100 195.07 272.44  113.5  127.12 122.31   0 1200  1200
## vsg_inicial           4  99  39.64  22.32   38.9   37.50  17.20   6  110   104
## pcr_inicial           5  89  11.90  14.90    8.0    8.95   7.12   1   96    95
##                     skew kurtosis    se
## edad               -0.33    -0.18  1.25
## lar_título_inicial  4.60    26.11 26.11
## ccp_título_inicial  2.44     5.24 27.24
## vsg_inicial         0.85     0.76  2.24
## pcr_inicial         3.37    13.70  1.58

6.3.1 Edad

par(mfrow = c(1,2))
hist(datos_limpios$edad,
     main = "Edad",
     xlab = "Años")
qqnorm(datos_limpios$edad,
       main = "QQ-plot Edad")
qqline(datos_limpios$edad)

options(scipen = 999, digits = 3, encoding = 'UTF-8')
shapiro.test(datos_limpios$edad)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos_limpios$edad
## W = 1, p-value = 0.4

6.3.2 Título de Látex AR

par(mfrow = c(1,2))
hist(datos_limpios$lar_título_inicial,
     main = "Látex AR",
     xlab = "Título")
qqnorm(datos_limpios$lar_título_inicial,
       main = "QQ-plot Látex AR")
qqline(datos_limpios$lar_título_inicial)

shapiro.test(datos_limpios$lar_título_inicial)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos_limpios$lar_título_inicial
## W = 0.5, p-value <0.0000000000000002

6.3.3 Título de Anti-CCP

par(mfrow = c(1,2))
hist(datos_limpios$ccp_título_inicial,
     main = "Anti-CCP",
     xlab = "Título")
qqnorm(datos_limpios$ccp_título_inicial,
       main = "QQ-plot Anti-CCP")
qqline(datos_limpios$ccp_título_inicial)

shapiro.test(datos_limpios$ccp_título_inicial)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos_limpios$ccp_título_inicial
## W = 0.6, p-value = 0.00000000000002

6.3.4 VSG basal

par(mfrow = c(1,2))
hist(na.omit(datos_limpios$vsg_inicial),
     main = "VSG basal",
     xlab = "mm/h")
qqnorm(na.omit(datos_limpios$vsg_inicial),
       main = "QQ-plot VSG")
qqline(na.omit(datos_limpios$vsg_inicial))

shapiro.test(na.omit(datos_limpios$vsg_inicial))
## 
##  Shapiro-Wilk normality test
## 
## data:  na.omit(datos_limpios$vsg_inicial)
## W = 0.9, p-value = 0.0001

6.3.5 PCR basal

par(mfrow = c(1,2))
hist(na.omit(datos_limpios$pcr_inicial),
     main = "PCR basal",
     xlab = "mg/L")
qqnorm(na.omit(datos_limpios$pcr_inicial),
       main = "QQ-plot PCR")
qqline(na.omit(datos_limpios$pcr_inicial))

shapiro.test(na.omit(datos_limpios$pcr_inicial))
## 
##  Shapiro-Wilk normality test
## 
## data:  na.omit(datos_limpios$pcr_inicial)
## W = 0.6, p-value = 0.00000000000008

Interpretación: La inspección gráfica mediante histogramas y gráficos Q-Q, junto con la prueba de Shapiro-Wilk, mostró que la mayoría de las variables continuas no siguieron una distribución normal. Los títulos de factor reumatoideo (Látex AR), anti-CCP y la PCR basal presentaron una marcada asimetría positiva, con presencia de valores extremos, mientras que la VSG mostró una asimetría positiva menos pronunciada. La edad fue la única variable con una distribución aproximadamente normal. En consecuencia, las variables continuas se resumirán mediante mediana y rango intercuartílico (RIQ) y se utilizarán pruebas no paramétricas para las comparaciones entre grupos.

6.3.6 BoxPlot de las variables continuas

boxplot(datos_limpios$edad)

boxplot(datos_limpios$lar_título_inicial)

boxplot(datos_limpios$ccp_título_inicial)

boxplot(datos_limpios$vsg_inicial)

boxplot(datos_limpios$pcr_inicial)

Interpretación: Los diagramas de caja mostraron valores extremos principalmente en los títulos de factor reumatoideo (Látex AR) y anti-CCP y, en menor medida, en la VSG y la PCR basal. La edad presentó una distribución homogénea, con un único valor extremo inferior. La revisión individual de los registros confirmó que los valores extremos correspondían a resultados clínicos y de laboratorio plausibles, por lo que no se consideró apropiado excluirlos ni modificarlos.

7. Características basales según grupo

Objetivo: Evaluar comparabilidad basal entre casos y controles.

La evaluación exploratoria de las variables continuas mediante histogramas, gráficos Q-Q y prueba de Shapiro-Wilk evidenció desviaciones de la normalidad para la mayoría de las variables analizadas. En consecuencia, las variables continuas se describieron como mediana (RIC) y las comparaciones entre grupos se realizaron mediante la prueba de Wilcoxon-Mann-Whitney. Las variables categóricas se presentan como frecuencia absoluta y porcentaje, utilizando prueba exacta de Fisher para las comparaciones entre grupos cuando correspondió.

datos_limpios <- datos_limpios %>%
  mutate(
    grupo = factor(grupo, levels = c("Caso", "Control")),
    
    dosis_mtx_inicial = ifelse(
      DMARD_inicial_cual == "MTX",
      DMARD_inicial_dosis,
      NA
    ),
    
    dosis_mtx_inicial = as.numeric(dosis_mtx_inicial),
    PDN_inicial_dosis = as.numeric(PDN_inicial_dosis),
    
    demora_dmard_meses = as.numeric(
      difftime(
        DMARD_inicial_fecha,
        fecha_diagnóstico,
        units = "days"
      )
    ) / 30.44
  )

tabla1 <- datos_limpios %>%
  select(
    grupo,
    sexo,
    edad,
    hta,
    dbt,
    dlp,
    tbq,
    lar_título_inicial,
    ccp_título_inicial,
    vsg_inicial,
    pcr_inicial,
    dre,
    nad_inicial,
    nat_inicial,
    DMARD_inicial_tipo,
    DMARD_inicial_cual,
    demora_dmard_meses,
    dosis_mtx_inicial,
    PDN_inicial_dosis
  ) %>%
  tbl_summary(
    by = grupo,

    type = list(
      demora_dmard_meses ~ "continuous",
      dosis_mtx_inicial ~ "continuous",
      PDN_inicial_dosis ~ "continuous"
    ),

    statistic = list(
      all_continuous() ~ "{median} ({p25} - {p75})",
      all_categorical() ~ "{n} ({p}%)"
    ),

    missing = "no",

    label = list(
      sexo ~ "Sexo",
      edad ~ "Edad",
      hta ~ "HTA",
      dbt ~ "DBT",
      dlp ~ "DLP",
      tbq ~ "Tabaquismo actual",
      lar_título_inicial ~ "Látex AR basal",
      ccp_título_inicial ~ "Anti-CCP basal",
      vsg_inicial ~ "VSG basal",
      pcr_inicial ~ "PCR basal",
      dre ~ "Daño radiológico estructural",
      nad_inicial ~ "NAD basal",
      nat_inicial ~ "NAT basal",
      DMARD_inicial_tipo ~ "Tipo de DMARD inicial",
      DMARD_inicial_cual ~ "DMARD inicial",
      demora_dmard_meses ~ "Demora diagnóstico–inicio de DMARD (meses)",
      dosis_mtx_inicial ~ "Dosis inicial de MTX (mg/semana)",
      PDN_inicial_dosis ~ "Dosis inicial de prednisona (mg/día)"
    )
  ) %>%
  add_p()

tabla1
Characteristic Caso
N = 25
1
Control
N = 75
1
p-value2
Sexo

0.14
    Femenino 18 (72%) 64 (85%)
    Masculino 7 (28%) 11 (15%)
Edad 49 (38 - 62) 51 (44 - 61) 0.5
HTA

0.4
    No 15 (60%) 52 (69%)
    Si 10 (40%) 23 (31%)
DBT

0.7
    No 21 (84%) 66 (88%)
    Si 4 (16%) 9 (12%)
DLP

0.2
    No 22 (88%) 58 (77%)
    Si 3 (12%) 17 (23%)
Tabaquismo actual

>0.9
    No 22 (88%) 64 (85%)
    Si 3 (12%) 11 (15%)
Látex AR basal 81 (46 - 150) 60 (15 - 115) 0.071
Anti-CCP basal 113 (18 - 196) 114 (38 - 196) 0.6
VSG basal 40 (25 - 49) 38 (26 - 49) >0.9
PCR basal 9 (6 - 15) 8 (3 - 14) 0.4
Daño radiológico estructural

0.7
    No 15 (65%) 52 (69%)
    Si 8 (35%) 23 (31%)
NAD basal 10.0 (3.5 - 11.0) 9.0 (6.0 - 13.0) 0.4
NAT basal 8 (6 - 9) 7 (4 - 10) 0.8
Tipo de DMARD inicial


    csDMARD 25 (100%) 75 (100%)
DMARD inicial

0.4
    HCQ 0 (0%) 1 (1.3%)
    LEF 2 (8.0%) 2 (2.7%)
    MTX 23 (92%) 72 (96%)
Demora diagnóstico–inicio de DMARD (meses) 0.46 (0.00 - 0.89) 0.39 (0.00 - 1.02) 0.6
Dosis inicial de MTX (mg/semana) 15.0 (15.0 - 25.0) 15.0 (15.0 - 25.0) 0.4
Dosis inicial de prednisona (mg/día) 8.0 (7.5 - 10.0) 8.0 (7.5 - 10.0) 0.7
1 n (%); Median (Q1 - Q3)
2 Fisher’s exact test; Wilcoxon rank sum test; Pearson’s Chi-squared test; NA

Interpretación: En la comparación de las características basales entre los pacientes que alcanzaron remisión sostenida libre de DMARDs (casos) y los controles, no se observaron diferencias estadísticamente significativas en las variables demográficas, comorbilidades, títulos basales de factor reumatoideo y anti-CCP, reactantes de fase aguda, recuentos articulares, daño radiológico estructural ni características del tratamiento inicial. El título basal de factor reumatoideo fue numéricamente mayor en los casos [81 (RIC 46–150) vs. 60 (RIC 15–115)], aunque la diferencia no alcanzó significación estadística (p = 0,071). La demora entre el diagnóstico y el inicio del primer DMARD también fue similar entre los grupos [0,46 (RIC 0,00–0,89) vs. 0,39 (RIC 0,00–1,02) meses; p = 0,6].

Duración de la AR hasta la suspensión del último DMARD en los casos

Tiempo desde el diagnóstico de AR hasta la suspensión del último DMARD, en años.

datos_casos_duracion <- datos_limpios %>%
  filter(grupo == "Caso") %>%
  mutate(
    duracion_ar_hasta_fin_dmard_anios =
      as.numeric(fecha_fin_ultimo_DMARD - fecha_diagnóstico) / 365.25
  )
datos_casos_duracion %>%
  select(
    id_paciente,
    fecha_diagnóstico,
    fecha_fin_ultimo_DMARD,
    duracion_ar_hasta_fin_dmard_anios
  )
## # A tibble: 25 × 4
##    id_paciente fecha_diagnóstico fecha_fin_ultimo_DMARD duracion_ar_hasta_fin_…¹
##    <chr>       <date>            <date>                                    <dbl>
##  1 CASO0001    2019-01-08        2022-11-15                                 3.85
##  2 CASO0002    2016-06-01        2022-05-28                                 5.99
##  3 CASO0003    2017-11-29        2021-01-19                                 3.14
##  4 CASO0004    2021-10-07        2024-04-02                                 2.49
##  5 CASO0005    2018-10-25        2023-11-19                                 5.07
##  6 CASO0006    2021-12-12        2024-02-15                                 2.18
##  7 CASO0007    2010-03-17        2023-05-02                                13.1 
##  8 CASO0008    2020-01-15        2024-12-17                                 4.92
##  9 CASO0009    2019-10-10        2025-02-16                                 5.36
## 10 CASO0010    2019-10-22        2025-01-30                                 5.28
## # ℹ 15 more rows
## # ℹ abbreviated name: ¹​duracion_ar_hasta_fin_dmard_anios
summary(datos_casos_duracion$duracion_ar_hasta_fin_dmard_anios)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.18    4.59    5.09    6.02    5.75   14.52

Interpretación: Entre los pacientes que alcanzaron remisión sostenida libre de DMARDs, la mediana de duración de la AR desde el diagnóstico hasta la suspensión del último DMARD fue de 5,09 años (RIC 4,59–5,75), con un rango de 2,18 a 14,52 años.

datos_casos_duracion <- datos_casos_duracion %>%
  mutate(
    duracion_ar_2anios = factor(
      ifelse(
        duracion_ar_hasta_fin_dmard_anios <= 2,
        "≤2 años",
        ">2 años"
      ),
      levels = c("≤2 años", ">2 años")
    )
  )

table(datos_casos_duracion$duracion_ar_2anios)
## 
## ≤2 años >2 años 
##       0      25

Interpretación: Ninguno de los pacientes que alcanzó remisión sostenida libre de DMARDs suspendió el último DMARD dentro de los primeros 2 años desde el diagnóstico de AR. La totalidad de los casos presentó una duración de la enfermedad >2 años al momento de la suspensión del tratamiento.

FR y anti-CCP por cuartiles

datos_limpios <- datos_limpios %>%
  mutate(
    fr_cuartil = ntile(lar_título_inicial, 4),
    ccp_cuartil = ntile(ccp_título_inicial, 4),
    
    fr_cuartil = factor(
      fr_cuartil,
      levels = 1:4,
      labels = c("Q1", "Q2", "Q3", "Q4")
    ),
    
    ccp_cuartil = factor(
      ccp_cuartil,
      levels = 1:4,
      labels = c("Q1", "Q2", "Q3", "Q4")
    )
  )

tabla_serologia_cuartiles <- datos_limpios %>%
  select(
    grupo,
    fr_cuartil,
    ccp_cuartil
  ) %>%
  tbl_summary(
    by = grupo,
    
    statistic = all_categorical() ~ "{n} ({p}%)",
    
    missing = "no",
    
    label = list(
      fr_cuartil ~ "Factor reumatoide por cuartiles",
      ccp_cuartil ~ "Anti-CCP por cuartiles"
    )
  ) %>%
  add_p(
    test = all_categorical() ~ "fisher.test"
  )

tabla_serologia_cuartiles
Characteristic Caso
N = 25
1
Control
N = 75
1
p-value2
Factor reumatoide por cuartiles

0.4
    Q1 3 (12%) 22 (29%)
    Q2 8 (32%) 17 (23%)
    Q3 7 (28%) 18 (24%)
    Q4 7 (28%) 18 (24%)
Anti-CCP por cuartiles

>0.9
    Q1 7 (28%) 18 (24%)
    Q2 6 (24%) 19 (25%)
    Q3 7 (28%) 18 (24%)
    Q4 5 (20%) 20 (27%)
1 n (%)
2 Fisher’s exact test

Interpretación: No se observaron diferencias estadísticamente significativas en la distribución por cuartiles de los títulos basales de factor reumatoideo (p = 0,4) ni de anti-CCP (p > 0,9) entre casos y controles. Para el factor reumatoideo se observó descriptivamente una menor proporción de casos en el primer cuartil, sin evidencia estadística de asociación. La distribución de anti-CCP fue similar entre ambos grupos.

FR: Q4 vs Q1-Q3

datos_limpios <- datos_limpios %>%
  mutate(
    fr_q4 = factor(
      ifelse(fr_cuartil == "Q4", "Q4", "Q1-Q3"),
      levels = c("Q1-Q3", "Q4")
    )
  )

tabla_fr_q4 <- datos_limpios %>%
  select(
    grupo,
    fr_q4
  ) %>%
  tbl_summary(
    by = grupo,
    
    statistic = all_categorical() ~ "{n} ({p}%)",
    
    missing = "no",
    
    label = list(
      fr_q4 ~ "Factor reumatoide: cuartil superior"
    )
  ) %>%
  add_p(
    test = all_categorical() ~ "fisher.test"
  )

tabla_fr_q4
Characteristic Caso
N = 25
1
Control
N = 75
1
p-value2
Factor reumatoide: cuartil superior

0.8
    Q1-Q3 18 (72%) 57 (76%)
    Q4 7 (28%) 18 (24%)
1 n (%)
2 Fisher’s exact test

Interpretación: La proporción de pacientes con títulos basales de factor reumatoideo en el cuartil superior fue similar entre los casos y los controles (28% vs. 24%; p = 0,8). No se observó evidencia de asociación entre pertenecer al cuartil superior de factor reumatoideo y alcanzar remisión sostenida libre de DMARDs.

anti-CCP: Q4 vs Q1-Q3

datos_limpios <- datos_limpios %>%
  mutate(
    ccp_q4 = factor(
      ifelse(ccp_cuartil == "Q4", "Q4", "Q1-Q3"),
      levels = c("Q1-Q3", "Q4")
    )
  )
tabla_ccp_q4 <- datos_limpios %>%
  select(
    grupo,
    ccp_q4
  ) %>%
  tbl_summary(
    by = grupo,
    statistic = all_categorical() ~ "{n} ({p}%)",
    missing = "no",
    label = list(
      ccp_q4 ~ "Anti-CCP: cuartil superior"
    )
  ) %>%
  add_p(
    test = all_categorical() ~ "fisher.test"
  )

tabla_ccp_q4
Characteristic Caso
N = 25
1
Control
N = 75
1
p-value2
Anti-CCP: cuartil superior

0.6
    Q1-Q3 20 (80%) 55 (73%)
    Q4 5 (20%) 20 (27%)
1 n (%)
2 Fisher’s exact test

Interpretación: La proporción de pacientes con títulos basales de anti-CCP en el cuartil superior fue menor entre los casos que entre los controles (20% vs. 27%); sin embargo, esta diferencia no alcanzó significación estadística (p=0,6). Por lo tanto, no se observó evidencia de asociación entre pertenecer al cuartil superior de anti-CCP y alcanzar remisión sostenida libre de DMARDs.

FR y anti-CCP por decilos

Distribución de pacientes por decilo de FR

datos_limpios <- datos_limpios %>%
  mutate(
    fr_decil = ntile(lar_título_inicial, 10),
    ccp_decil = ntile(ccp_título_inicial, 10)
  )

table(datos_limpios$fr_decil, datos_limpios$grupo)
##     
##      Caso Control
##   1     0      10
##   2     2       8
##   3     2       8
##   4     2       8
##   5     5       5
##   6     1       9
##   7     5       5
##   8     1       9
##   9     4       6
##   10    3       7
prop.table(
  table(datos_limpios$fr_decil, datos_limpios$grupo),
  margin = 2
) * 100
##     
##       Caso Control
##   1   0.00   13.33
##   2   8.00   10.67
##   3   8.00   10.67
##   4   8.00   10.67
##   5  20.00    6.67
##   6   4.00   12.00
##   7  20.00    6.67
##   8   4.00   12.00
##   9  16.00    8.00
##   10 12.00    9.33
library(ggplot2)
library(dplyr)

datos_limpios %>%
  count(grupo, fr_decil) %>%
  group_by(grupo) %>%
  mutate(
    porcentaje = 100 * n / sum(n)
  ) %>%
  ggplot(
    aes(
      x = fr_decil,
      y = porcentaje,
      fill = grupo
    )
  ) +
  geom_col(
    position = position_dodge(width = 0.8),
    width = 0.7
  ) +
  labs(
    title = "Distribución de los títulos basales de factor reumatoide por decilos",
    x = "Decilo de factor reumatoide",
    y = "Pacientes (%)",
    fill = "Grupo"
  ) +
  theme_classic(base_size = 13)

Interpretación: La distribución de los títulos basales de factor reumatoide por decilos no mostró un gradiente evidente entre los pacientes que alcanzaron remisión sostenida libre de DMARDs y los controles. Los casos estuvieron ausentes en el primer decilo y presentaron proporciones mayores en algunos decilos intermedios y superiores, aunque con una distribución irregular y sin un patrón progresivo a medida que aumentaron los títulos. Estos hallazgos no sugieren una relación dosis-respuesta entre el título basal de factor reumatoide y la remisión sostenida libre de DMARDs. La variabilidad observada entre decilos debe interpretarse con cautela debido al reducido número de casos en cada categoría.

Distribución de pacientes por decilo de anti-CCP

tabla_ccp_decil <- table(
  datos_limpios$ccp_decil,
  datos_limpios$grupo
)

tabla_ccp_decil
##     
##      Caso Control
##   1     4       6
##   2     3       7
##   3     0      10
##   4     4       6
##   5     2       8
##   6     1       9
##   7     6       4
##   8     1       9
##   9     3       7
##   10    1       9
# Porcentajes dentro de cada grupo
prop.table(tabla_ccp_decil, margin = 2) * 100
##     
##       Caso Control
##   1  16.00    8.00
##   2  12.00    9.33
##   3   0.00   13.33
##   4  16.00    8.00
##   5   8.00   10.67
##   6   4.00   12.00
##   7  24.00    5.33
##   8   4.00   12.00
##   9  12.00    9.33
##   10  4.00   12.00
datos_limpios %>%
  count(ccp_decil, grupo) %>%
  group_by(grupo) %>%
  mutate(porcentaje = n / sum(n) * 100) %>%
  ggplot(aes(x = ccp_decil, y = porcentaje, fill = grupo)) +
  geom_col(position = "dodge") +
  labs(
    title = "Distribución de los títulos basales de anti-CCP por decilos",
    x = "Decilo de anti-CCP",
    y = "Pacientes (%)",
    fill = "Grupo"
  ) +
  theme_classic(base_size = 13)

Interpretación: La distribución de los títulos basales de anti-CCP por decilos mostró variaciones entre casos y controles, sin observarse un patrón progresivo a lo largo de los decilos. Los casos presentaron una mayor concentración en el séptimo decilo (24% vs. 5,3%), mientras que en otros decilos predominaron alternativamente casos o controles. En particular, no se observó una mayor proporción de casos en los decilos más altos (D8-D10). En conjunto, la exploración gráfica no evidencia un gradiente entre títulos crecientes de anti-CCP y la probabilidad de alcanzar remisión sostenida libre de DMARDs. La mayor representación de casos observada en D7 debe interpretarse con cautela dado el reducido número de pacientes por decilo.

Distribución de FR y anti-CCP por decilos: El análisis exploratorio por decilos de los títulos basales de factor reumatoide y anti-CCP no mostró un gradiente consistente entre la magnitud de la seropositividad y el desenlace. No se observó una concentración progresiva de los controles en los decilos superiores ni de los casos en los decilos inferiores. En conjunto, estos hallazgos no sugieren una relación dosis-respuesta evidente entre títulos basales más elevados de autoanticuerpos y persistencia de la enfermedad, ni entre títulos más bajos y remisión sostenida libre de DMARDs.

8. Trayectoria terapéutica

Objetivo: Describir y comparar la trayectoria terapéutica posterior al diagnóstico entre pacientes que alcanzaron remisión sostenida libre de DMARDs y aquellos que no alcanzaron este desenlace.

Las variables incluidas en este apartado corresponden a características de la trayectoria terapéutica y no a variables basales. Se comparó la frecuencia de intensificación terapéutica, uso combinado de DMARDs, exposición a terapias biológicas o sintéticas dirigidas y número de líneas terapéuticas entre casos y controles. Las variables categóricas se analizaron mediante prueba exacta de Fisher y el número de líneas terapéuticas mediante prueba de Wilcoxon-Mann-Whitney.

datos_limpios <- datos_limpios %>%
  mutate(
    cantidad_lineas_tto_cat = case_when(
      cantidad_lineas_tto == 1 ~ "1",
      cantidad_lineas_tto == 2 ~ "2",
      cantidad_lineas_tto >= 3 ~ "≥3",
      TRUE ~ NA_character_
    ),
    cantidad_lineas_tto_cat = factor(
      cantidad_lineas_tto_cat,
      levels = c("1", "2", "≥3")
    )
  )

tabla2 <- datos_limpios %>%
  mutate(
    grupo = factor(grupo, levels = c("Caso", "Control"))
  ) %>%
  select(
    grupo,
    intensificacion_tto,
    combinacion_DMARDs,
    cantidad_lineas_tto_cat,
    recibio_bDMARD,
    recibio_tsDMARD
  ) %>%
  tbl_summary(
    by = grupo,
    statistic = list(
      all_categorical() ~ "{n} ({p}%)"
    ),
    missing = "no",
    label = list(
      intensificacion_tto ~ "Intensificación terapéutica",
      combinacion_DMARDs ~ "Combinación de DMARDs",
      cantidad_lineas_tto_cat ~ "Número de líneas terapéuticas",
      recibio_bDMARD ~ "Exposición a bDMARD",
      recibio_tsDMARD ~ "Exposición a tsDMARD"
    )
  ) %>%
  add_p(
    test = list(
      all_categorical() ~ "fisher.test"
    )
  )

tabla2
Characteristic Caso
N = 25
1
Control
N = 75
1
p-value2
Intensificación terapéutica

0.8
    No 4 (16%) 16 (21%)
    Si 21 (84%) 59 (79%)
Combinación de DMARDs

>0.9
    No 12 (48%) 36 (48%)
    Si 13 (52%) 39 (52%)
Número de líneas terapéuticas

0.2
    1 4 (16%) 18 (24%)
    2 11 (44%) 40 (53%)
    ≥3 10 (40%) 17 (23%)
Exposición a bDMARD

0.5
    No 11 (44%) 26 (35%)
    Si 14 (56%) 49 (65%)
Exposición a tsDMARD

0.2
    No 17 (68%) 38 (51%)
    Si 8 (32%) 37 (49%)
1 n (%)
2 Fisher’s exact test

Interpretación: No se observaron diferencias estadísticamente significativas entre los pacientes que alcanzaron remisión sostenida libre de DMARDs (casos) y los controles en las características de la trayectoria terapéutica evaluadas. La frecuencia de intensificación terapéutica y de uso combinado de DMARDs fue similar entre ambos grupos. Descriptivamente, los casos presentaron con mayor frecuencia tres o más líneas terapéuticas (40% vs. 23%), mientras que la exposición a tsDMARD fue menos frecuente (32% vs. 49%); ninguna de estas diferencias alcanzó significación estadística. La exposición a bDMARD tampoco difirió significativamente entre los grupos (56% vs. 65%; p = 0,5).

Comentario: Los pacientes de ambos grupos presentaron características basales comparables y no se observaron diferencias estadísticamente significativas en las trayectorias terapéuticas evaluadas. A pesar de ello, sólo un subgrupo alcanzó remisión sostenida libre de DMARDs.

Esta observación plantea la posibilidad de que existan factores biológicos o clínicos intrínsecos, no capturados por las variables evaluadas en este estudio, que influyan en la capacidad de algunos pacientes para alcanzar este desenlace.

Por otro lado, los casos no parecen ser simplemente pacientes con una AR más leve que casi no requirió tratamiento. De hecho, 40% necesitó ≥3 líneas y 56% llegó a bDMARD. Esto puede constituir un hallazgo relevante: la posterior remisión sostenida libre de DMARDs no necesariamente estuvo precedida por una trayectoria terapéutica de baja intensidad.

9. Recaídas

9.1 Tiempo hasta la recaída.

datos_casos_recaida <- datos_limpios %>%
  filter(grupo == "Caso", recaída == "Si") %>%
  mutate(
    tiempo_hasta_recaida_meses = as.numeric(
      fecha_recaída - fecha_inicio_remision_sostenida
    ) / 30.44
  )

datos_casos_recaida %>%
  select(
    id_paciente,
    fecha_inicio_remision_sostenida,
    fecha_recaída,
    tiempo_hasta_recaida_meses
  )
## # A tibble: 3 × 4
##   id_paciente fecha_inicio_remision_soste…¹ fecha_recaída tiempo_hasta_recaida…²
##   <chr>       <date>                        <date>                         <dbl>
## 1 CASO0005    2024-11-19                    2025-05-13                      5.75
## 2 CASO0007    2024-05-02                    2026-01-02                     20.0 
## 3 CASO0021    2020-04-28                    2020-05-29                      1.02
## # ℹ abbreviated names: ¹​fecha_inicio_remision_sostenida,
## #   ²​tiempo_hasta_recaida_meses
summary(datos_casos_recaida$tiempo_hasta_recaida_meses)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.02    3.38    5.75    8.94   12.89   20.04

Interpretación: De los 25 pacientes que alcanzaron remisión sostenida libre de DMARDs, 3 (12%) presentaron una recaída durante el seguimiento. Entre los pacientes que recayeron, la mediana del tiempo desde el inicio de la remisión sostenida hasta la recaída fue de 5,8 meses (RIC: 3,4–12,9 meses), con un rango de 1,0 a 20,0 meses.

9.2 Tiempo de seguimiento de los casos.

datos_casos_seguimiento <- datos_limpios %>%
  filter(grupo == "Caso") %>%
  mutate(
    tiempo_seguimiento_meses = as.numeric(
      fecha_última_visita - fecha_inicio_remision_sostenida
    ) / 30.44
  )

datos_casos_seguimiento %>%
  select(
    id_paciente,
    recaída,
    fecha_inicio_remision_sostenida,
    fecha_recaída,
    fecha_última_visita,
    tiempo_seguimiento_meses
  )
## # A tibble: 25 × 6
##    id_paciente recaída fecha_inicio_remision…¹ fecha_recaída fecha_última_visita
##    <chr>       <fct>   <date>                  <date>        <date>             
##  1 CASO0001    No      2023-11-15              NA            2024-05-09         
##  2 CASO0002    No      2023-05-28              NA            2024-06-08         
##  3 CASO0003    No      2022-01-19              NA            2026-01-24         
##  4 CASO0004    No      2025-04-02              NA            2026-05-19         
##  5 CASO0005    Si      2024-11-19              2025-05-13    2026-04-14         
##  6 CASO0006    No      2025-02-15              NA            2026-04-28         
##  7 CASO0007    Si      2024-05-02              2026-01-02    2026-03-01         
##  8 CASO0008    No      2025-12-17              NA            2026-03-20         
##  9 CASO0009    No      2026-02-16              NA            2026-08-07         
## 10 CASO0010    No      2026-01-30              NA            2026-04-21         
## # ℹ 15 more rows
## # ℹ abbreviated name: ¹​fecha_inicio_remision_sostenida
## # ℹ 1 more variable: tiempo_seguimiento_meses <dbl>
summary(datos_casos_seguimiento$tiempo_seguimiento_meses)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.3     3.4     7.3    14.7    13.5   131.5

Interpretación: Los 25 pacientes que alcanzaron remisión sostenida libre de DMARDs tuvieron un seguimiento posterior al inicio de la remisión con una mediana de 6,1 meses (RIC: 3,4–13,5). El tiempo de seguimiento osciló entre 1,3 y 131,5 meses, evidenciando una marcada variabilidad en la duración del seguimiento entre los pacientes.

10. Resumen

Título: Remisión sostenida libre de DMARDs en artritis reumatoide seropositiva: estudio multicéntrico de una cohorte argentina.

Autores: Saravia NK¹, Malah V², Mareco J³, Sirera AJ³, García-Salinas R⁴, Rosa JE⁵, Nagy I⁵, Dal Pra F⁶, Valdez Donelli A⁶, Vinicki JP¹

¹ Unidad de Reumatología, Hospital Zonal General de Agudos Dr. Isidoro Iriarte, Quilmes, Buenos Aires, Argentina.
² Unidad de Reumatología, Sanatorio Modelo de Quilmes, Quilmes, Buenos Aires, Argentina.
³ Unidad de Reumatología, HIEAyC “San Juan de Dios”, La Plata, Buenos Aires, Argentina.
⁴ Unidad de Reumatología, Hospital Italiano de La Plata, Buenos Aires, Argentina.
⁵ Sección Reumatología, Servicio de Clínica Médica, Hospital Italiano de Buenos Aires, Buenos Aires, Argentina.
⁶ Servicio de Reumatología, Instituto de Rehabilitación Psicofísica (IREP), Buenos Aires, Argentina.

Introducción: La remisión sostenida libre de fármacos modificadores de la enfermedad (DMARDs) constituye un desenlace poco frecuente en artritis reumatoide (AR). La caracterización clínica de estos pacientes podría contribuir a identificar perfiles con mayor probabilidad de alcanzar este estado.

Objetivo: Comparar las características basales y la trayectoria terapéutica de pacientes con AR seropositiva que alcanzaron remisión sostenida libre de DMARDs con aquellas de pacientes que no alcanzaron este desenlace.

Métodos: Estudio multicéntrico de casos y controles. Se incluyeron pacientes con AR según criterios ACR/EULAR 2010 y seropositividad para factor reumatoide y/o anti-CCP. Los casos presentaban remisión sostenida libre de DMARDs durante al menos 12 meses, mientras que los controles correspondían a pacientes de la misma población fuente que no alcanzaron dicho desenlace. Se compararon características clínicas, serológicas y terapéuticas mediante pruebas de Wilcoxon-Mann-Whitney y exacta de Fisher, según correspondiera.

Resultados: Se incluyeron 100 pacientes (25 casos y 75 controles). No se observaron diferencias estadísticamente significativas entre ambos grupos en edad, sexo, comorbilidades, títulos basales de factor reumatoide y anti-CCP, marcadores inflamatorios, actividad clínica basal ni daño radiográfico estructural. La distribución de los títulos de factor reumatoide y anti-CCP por cuartiles tampoco difirió entre los grupos (p=0,4 y p>0,9, respectivamente). El tratamiento inicial fue comparable, incluyendo el tiempo entre el diagnóstico y el inicio del primer DMARD [0,46 meses (RIC 0,00-0,89) en casos vs. 0,39 meses (RIC 0,00-1,02) en controles; p=0,6], el csDMARD utilizado y las dosis iniciales de metotrexato y prednisona. Tampoco se observaron diferencias significativas en la trayectoria terapéutica respecto de intensificación, combinación de DMARDs, número de líneas terapéuticas y exposición a bDMARDs o tsDMARDs. Entre los pacientes que alcanzaron remisión sostenida libre de DMARDs, 3/25 (12%) presentaron recaída durante el seguimiento.

Conclusión: En este estudio multicéntrico no se identificaron características clínicas, serológicas ni terapéuticas asociadas con la remisión sostenida libre de DMARDs. Los pacientes que alcanzaron este desenlace no presentaron necesariamente una trayectoria terapéutica de menor intensidad. Estos resultados sugieren que las variables clínicas habitualmente disponibles podrían ser insuficientes para identificar a los pacientes con mayor probabilidad de alcanzar remisión sostenida libre de tratamiento. Debido al reducido número de casos, estos hallazgos deben considerarse exploratorios y requieren confirmación en estudios de mayor tamaño.