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)
datos <- read_excel("ar_remite_solo_R.xlsx")
dim(datos)
## [1] 39 34
names(datos)
## [1] "id_paciente" "sexo"
## [3] "fecha_nac" "edad"
## [5] "hta" "dbt"
## [7] "dlp" "tbq"
## [9] "extbq" "fecha_diagnóstico"
## [11] "lar_título_inicial" "ccp_título_inicial"
## [13] "vsg_inicial" "pcr_inicial"
## [15] "dre" "nad_inicial"
## [17] "nat_inicial" "DMARD_inicial_fecha"
## [19] "DMARD_inicial_tipo" "DMARD_inicial_cual"
## [21] "DMARD_inicial_dosis" "PDN_inicial_fecha"
## [23] "PDN_inicial_dosis" "intensificacion_tto"
## [25] "combinacion_DMARDs" "cantidad_lineas_tto"
## [27] "recibio_bDMARD" "recibio_tsDMARD"
## [29] "fecha_fin_ultimo_DMARD" "fecha_inicio_remision_sostenida"
## [31] "motivo_fin_DMARD" "recaída"
## [33] "fecha_recaída" "fecha_última_visita"
str(datos)
## tibble [39 × 34] (S3: tbl_df/tbl/data.frame)
## $ id_paciente : chr [1:39] "CASO0001" "CASO0002" "CASO0003" "CASO0004" ...
## $ sexo : num [1:39] 1 1 1 0 0 0 0 1 0 0 ...
## $ fecha_nac : POSIXct[1:39], format: "1971-05-20" "1977-08-21" ...
## $ edad : num [1:39] 55 48 45 60 32 67 NA 51 43 48 ...
## $ hta : num [1:39] 0 0 0 0 0 0 0 0 0 0 ...
## $ dbt : num [1:39] 0 0 0 0 0 0 0 0 0 0 ...
## $ dlp : num [1:39] 1 0 0 1 0 0 0 0 0 0 ...
## $ tbq : num [1:39] 0 0 0 0 0 0 0 0 0 0 ...
## $ extbq : num [1:39] 1 0 0 0 0 0 0 0 0 0 ...
## $ fecha_diagnóstico : POSIXct[1:39], format: "2019-01-08" "2016-06-01" ...
## $ lar_título_inicial : num [1:39] 1024 60 500 98 14 ...
## $ ccp_título_inicial : num [1:39] 534 196 0 113 86 0 329 200 5 198 ...
## $ vsg_inicial : num [1:39] 42 110 NA 37 44 10 67 10 49 53 ...
## $ pcr_inicial : num [1:39] 96 9 NA 5.3 9 7.7 76.8 1.8 6 NA ...
## $ dre : num [1:39] 0 0 0 0 0 0 1 0 0 0 ...
## $ nad_inicial : num [1:39] 11 10 5 3 10 3 9 12 10 4 ...
## $ nat_inicial : num [1:39] 9 10 5 7 10 8 8 12 10 4 ...
## $ DMARD_inicial_fecha : POSIXct[1:39], format: "2019-01-14" "2016-06-01" ...
## $ DMARD_inicial_tipo : chr [1:39] "csDMARD" "csDMARD" "csDMARD" "csDMARD" ...
## $ DMARD_inicial_cual : chr [1:39] "MTX" "MTX" "MTX" "MTX" ...
## $ DMARD_inicial_dosis : num [1:39] 25 25 25 15 25 25 15 15 25 25 ...
## $ PDN_inicial_fecha : POSIXct[1:39], format: "2019-01-14" "2016-06-01" ...
## $ PDN_inicial_dosis : num [1:39] 20 8 8 8 8 8 8 8 8 8 ...
## $ intensificacion_tto : num [1:39] 1 1 1 1 1 0 1 0 1 1 ...
## $ combinacion_DMARDs : num [1:39] 1 1 1 1 1 0 1 0 1 1 ...
## $ cantidad_lineas_tto : num [1:39] 2 2 3 3 2 1 5 1 2 2 ...
## $ recibio_bDMARD : num [1:39] 0 0 1 1 0 0 1 0 0 0 ...
## $ recibio_tsDMARD : num [1:39] 0 0 0 0 0 0 0 0 0 1 ...
## $ fecha_fin_ultimo_DMARD : POSIXct[1:39], format: "2022-11-15" "2022-05-28" ...
## $ fecha_inicio_remision_sostenida: POSIXct[1:39], format: "2023-11-15" "2023-05-28" ...
## $ motivo_fin_DMARD : chr [1:39] "decisión paciente" "decisión paciente" "decisión paciente" "decisión paciente" ...
## $ recaída : num [1:39] 0 0 0 0 1 0 1 0 0 NA ...
## $ fecha_recaída : POSIXct[1:39], format: NA NA ...
## $ fecha_última_visita : POSIXct[1:39], format: "2024-05-09" "2024-06-08" ...
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", "Sí")),
dbt = factor(dbt, levels = c(0, 1), labels = c("No", "Sí")),
dlp = factor(dlp, levels = c(0, 1), labels = c("No", "Sí")),
tbq = factor(tbq, levels = c(0, 1), labels = c("No", "Sí")),
extbq = factor(extbq, levels = c(0, 1), labels = c("No", "Sí")),
dre = factor(dre, levels = c(0, 1), labels = c("No", "Sí")),
intensificacion_tto = factor(intensificacion_tto,
levels = c(0, 1),
labels = c("No", "Sí")),
combinacion_DMARDs = factor(combinacion_DMARDs,
levels = c(0, 1),
labels = c("No", "Sí")),
recibio_bDMARD = factor(recibio_bDMARD,
levels = c(0, 1),
labels = c("No", "Sí")),
recibio_tsDMARD = factor(recibio_tsDMARD,
levels = c(0, 1),
labels = c("No", "Sí")),
recaída = factor(recaída,
levels = c(0, 1),
labels = c("No", "Sí")),
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 [39 × 35] (S3: tbl_df/tbl/data.frame)
## $ id_paciente : chr [1:39] "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:39], format: "1971-05-20" "1977-08-21" ...
## $ edad : num [1:39] 55 48 45 60 32 67 NA 51 43 48 ...
## $ hta : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ dbt : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ dlp : Factor w/ 2 levels "No","Sí": 2 1 1 2 1 1 1 1 1 1 ...
## $ tbq : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ extbq : Factor w/ 2 levels "No","Sí": 2 1 1 1 1 1 1 1 1 1 ...
## $ fecha_diagnóstico : POSIXct[1:39], format: "2019-01-08" "2016-06-01" ...
## $ lar_título_inicial : num [1:39] 1024 60 500 98 14 ...
## $ ccp_título_inicial : num [1:39] 534 196 0 113 86 0 329 200 5 198 ...
## $ vsg_inicial : num [1:39] 42 110 NA 37 44 10 67 10 49 53 ...
## $ pcr_inicial : num [1:39] 96 9 NA 5.3 9 7.7 76.8 1.8 6 NA ...
## $ dre : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 2 1 1 1 ...
## $ nad_inicial : num [1:39] 11 10 5 3 10 3 9 12 10 4 ...
## $ nat_inicial : num [1:39] 9 10 5 7 10 8 8 12 10 4 ...
## $ DMARD_inicial_fecha : POSIXct[1:39], 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/ 1 level "MTX": 1 1 1 1 1 1 1 1 1 1 ...
## $ DMARD_inicial_dosis : num [1:39] 25 25 25 15 25 25 15 15 25 25 ...
## $ PDN_inicial_fecha : POSIXct[1:39], format: "2019-01-14" "2016-06-01" ...
## $ PDN_inicial_dosis : num [1:39] 20 8 8 8 8 8 8 8 8 8 ...
## $ intensificacion_tto : Factor w/ 2 levels "No","Sí": 2 2 2 2 2 1 2 1 2 2 ...
## $ combinacion_DMARDs : Factor w/ 2 levels "No","Sí": 2 2 2 2 2 1 2 1 2 2 ...
## $ cantidad_lineas_tto : num [1:39] 2 2 3 3 2 1 5 1 2 2 ...
## $ recibio_bDMARD : Factor w/ 2 levels "No","Sí": 1 1 2 2 1 1 2 1 1 1 ...
## $ recibio_tsDMARD : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 2 ...
## $ fecha_fin_ultimo_DMARD : POSIXct[1:39], format: "2022-11-15" "2022-05-28" ...
## $ fecha_inicio_remision_sostenida: POSIXct[1:39], format: "2023-11-15" "2023-05-28" ...
## $ motivo_fin_DMARD : Factor w/ 3 levels "decisión paciente",..: 1 1 1 1 2 2 3 2 2 NA ...
## $ recaída : Factor w/ 2 levels "No","Sí": 1 1 1 1 2 1 2 1 1 NA ...
## $ fecha_recaída : POSIXct[1:39], format: NA NA ...
## $ fecha_última_visita : POSIXct[1:39], format: "2024-05-09" "2024-06-08" ...
## $ grupo : Factor w/ 2 levels "Control","Caso": 2 2 2 2 2 2 2 2 2 1 ...
datos_limpios <- datos_limpios %>%
mutate(
across(
contains("fecha"),
as.Date
)
)
str(datos_limpios)
## tibble [39 × 35] (S3: tbl_df/tbl/data.frame)
## $ id_paciente : chr [1:39] "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:39], format: "1971-05-20" "1977-08-21" ...
## $ edad : num [1:39] 55 48 45 60 32 67 NA 51 43 48 ...
## $ hta : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ dbt : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ dlp : Factor w/ 2 levels "No","Sí": 2 1 1 2 1 1 1 1 1 1 ...
## $ tbq : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## $ extbq : Factor w/ 2 levels "No","Sí": 2 1 1 1 1 1 1 1 1 1 ...
## $ fecha_diagnóstico : Date[1:39], format: "2019-01-08" "2016-06-01" ...
## $ lar_título_inicial : num [1:39] 1024 60 500 98 14 ...
## $ ccp_título_inicial : num [1:39] 534 196 0 113 86 0 329 200 5 198 ...
## $ vsg_inicial : num [1:39] 42 110 NA 37 44 10 67 10 49 53 ...
## $ pcr_inicial : num [1:39] 96 9 NA 5.3 9 7.7 76.8 1.8 6 NA ...
## $ dre : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 2 1 1 1 ...
## $ nad_inicial : num [1:39] 11 10 5 3 10 3 9 12 10 4 ...
## $ nat_inicial : num [1:39] 9 10 5 7 10 8 8 12 10 4 ...
## $ DMARD_inicial_fecha : Date[1:39], 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/ 1 level "MTX": 1 1 1 1 1 1 1 1 1 1 ...
## $ DMARD_inicial_dosis : num [1:39] 25 25 25 15 25 25 15 15 25 25 ...
## $ PDN_inicial_fecha : Date[1:39], format: "2019-01-14" "2016-06-01" ...
## $ PDN_inicial_dosis : num [1:39] 20 8 8 8 8 8 8 8 8 8 ...
## $ intensificacion_tto : Factor w/ 2 levels "No","Sí": 2 2 2 2 2 1 2 1 2 2 ...
## $ combinacion_DMARDs : Factor w/ 2 levels "No","Sí": 2 2 2 2 2 1 2 1 2 2 ...
## $ cantidad_lineas_tto : num [1:39] 2 2 3 3 2 1 5 1 2 2 ...
## $ recibio_bDMARD : Factor w/ 2 levels "No","Sí": 1 1 2 2 1 1 2 1 1 1 ...
## $ recibio_tsDMARD : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 2 ...
## $ fecha_fin_ultimo_DMARD : Date[1:39], format: "2022-11-15" "2022-05-28" ...
## $ fecha_inicio_remision_sostenida: Date[1:39], format: "2023-11-15" "2023-05-28" ...
## $ motivo_fin_DMARD : Factor w/ 3 levels "decisión paciente",..: 1 1 1 1 2 2 3 2 2 NA ...
## $ recaída : Factor w/ 2 levels "No","Sí": 1 1 1 1 2 1 2 1 1 NA ...
## $ fecha_recaída : Date[1:39], format: NA NA ...
## $ fecha_última_visita : Date[1:39], format: "2024-05-09" "2024-06-08" ...
## $ grupo : Factor w/ 2 levels "Control","Caso": 2 2 2 2 2 2 2 2 2 1 ...
4.1 Distribución casos/controles
table(datos_limpios$grupo)
##
## Control Caso
## 30 9
4.2 Duplicados
sum(duplicated(datos_limpios$id_paciente))
## [1] 0
5.1 Conteo de NA
colSums(is.na(datos_limpios))
## id_paciente sexo
## 0 0
## fecha_nac edad
## 1 1
## hta dbt
## 0 0
## dlp tbq
## 0 0
## extbq fecha_diagnóstico
## 0 0
## lar_título_inicial ccp_título_inicial
## 0 0
## vsg_inicial pcr_inicial
## 2 6
## dre nad_inicial
## 1 0
## nat_inicial DMARD_inicial_fecha
## 0 1
## DMARD_inicial_tipo DMARD_inicial_cual
## 0 0
## DMARD_inicial_dosis PDN_inicial_fecha
## 0 1
## PDN_inicial_dosis intensificacion_tto
## 0 0
## combinacion_DMARDs cantidad_lineas_tto
## 1 0
## recibio_bDMARD recibio_tsDMARD
## 0 0
## fecha_fin_ultimo_DMARD fecha_inicio_remision_sostenida
## 30 30
## motivo_fin_DMARD recaída
## 30 30
## fecha_recaída fecha_última_visita
## 37 30
## grupo
## 0
Interpretación: Las variables específicas de
remisión sostenida libre de DMARDs fueron registradas exclusivamente en
los casos, por lo que los valores ausentes observados en
los controles corresponden a ausencia estructural de
información y no a datos faltantes.
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
## 1 1 0 0
## vsg_inicial pcr_inicial dre nat_inicial
## 2 6 1 0
## DMARD_inicial_fecha DMARD_inicial_cual PDN_inicial_fecha combinacion_DMARDs
## 1 0 1 1
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 |
|---|---|---|---|---|---|---|---|
| CASO0003 | Caso | 45 | 2017-11-29 | 500 | 0 | NA | NA |
| CTRL0000 | Control | 48 | 2019-12-14 | 0 | 198 | 53 | NA |
| CTRL0006 | Control | 48 | 2014-10-28 | 0 | 114 | 12 | NA |
| CTRL0024 | Control | 73 | 2020-03-03 | 8192 | 200 | 100 | NA |
| CTRL0025 | Control | 76 | 2017-05-23 | 500 | 196 | NA | NA |
| CTRL0027 | Control | 59 | 2018-11-22 | 500 | 200 | 95 | 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 |
|---|---|---|---|---|
| CTRL0012 | Control | 30 | 144 | NA |
Interpretación: Se identificaron 6 pacientes con
PCR basal faltante y 1 paciente con
daño radiológico estructural basal no documentado. Los
pacientes con látex AR igual a 0 presentaban
anti-CCP positivo, por lo que cumplían criterio de
seropositividad. Tras la revisión manual de las historias clínicas, los
valores ausentes fueron conservados como NA para los
análisis posteriores.
summary(datos_limpios$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 32.00 48.75 56.00 57.92 67.00 88.00 1
range(datos_limpios$edad, na.rm = TRUE)
## [1] 32 88
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,
inicio de remisión sostenida, recaída y
fecha de última visita fueron registradas exclusivamente en
los casos. Los valores ausentes observados en los
controles representan ausencia estructural de información y
no datos faltantes.
La exploración visual de los datos faltantes mostró una baja frecuencia de valores ausentes para las variables basales. No se observaron patrones sistemáticos de ausencia ni agrupamiento de datos faltantes en pacientes específicos.
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: Se realizó una evaluación visual de
los datos faltantes excluyendo las variables registradas exclusivamente
en los casos (fecha de suspensión de DMARDs,
inicio de remisión sostenida, recaída y
seguimiento). La proporción global de datos faltantes fue
del 1.3%, sin observarse patrones sistemáticos de ausencia ni
agrupamiento de valores faltantes en pacientes específicos. Por lo
tanto, se consideró que la completitud de la base era adecuada para el
análisis estadístico.
La base está completa y los pocos NA observados parecen
compatibles con pérdidas aleatorias de información propias de una
revisión retrospectiva de historias clínicas.
6.1 Distribución de los grupos
table(datos_limpios$grupo)
##
## Control Caso
## 30 9
prop.table(table(datos_limpios$grupo))*100
##
## Control Caso
## 76.92308 23.07692
Interpretación: Se incluyeron 39 pacientes con artritis reumatoidea seropositiva. Nueve pacientes cumplieron criterios de remisión sostenida libre de DMARDs (casos) y 30 pacientes conformaron el grupo control.
6.2 Sexo
table(datos_limpios$sexo)
##
## Femenino Masculino
## 28 11
prop.table(table(datos_limpios$sexo))*100
##
## Femenino Masculino
## 71.79487 28.20513
Interpretación: La población estuvo compuesta predominantemente por mujeres, 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. :32.00 Min. : 0.0 Min. : 0.0 Min. : 6.00
## 1st Qu.:48.75 1st Qu.: 30.0 1st Qu.: 112.0 1st Qu.: 16.00
## Median :56.00 Median : 60.0 Median : 196.0 Median : 40.00
## Mean :57.92 Mean : 413.1 Mean : 267.9 Mean : 42.59
## 3rd Qu.:67.00 3rd Qu.: 172.0 3rd Qu.: 200.0 3rd Qu.: 61.00
## Max. :88.00 Max. :8192.0 Max. :1174.0 Max. :110.00
## NA's :1 NA's :2
## pcr_inicial
## Min. : 1.00
## 1st Qu.: 2.30
## Median : 7.70
## Mean :12.69
## 3rd Qu.: 9.00
## Max. :96.00
## NA's :6
describe(vars_continuas)
## vars n mean sd median trimmed mad min max range
## edad 1 38 57.92 12.66 56.0 58.09 14.83 32 88 56
## lar_título_inicial 2 39 413.13 1335.15 60.0 148.36 81.54 0 8192 8192
## ccp_título_inicial 3 39 267.92 304.54 196.0 220.45 121.57 0 1174 1174
## vsg_inicial 4 37 42.59 29.45 40.0 40.26 35.58 6 110 104
## pcr_inicial 5 33 12.69 21.10 7.7 7.22 7.53 1 96 95
## skew kurtosis se
## edad -0.02 -0.57 2.05
## lar_título_inicial 5.10 26.60 213.80
## ccp_título_inicial 1.76 1.93 48.77
## vsg_inicial 0.65 -0.67 4.84
## pcr_inicial 2.80 7.21 3.67
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.8
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.3, p-value = 0.000000000002
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.7, p-value = 0.0000001
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.01
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.5, p-value = 0.000000005
Interpretación: La inspección gráfica mediante
histogramas, gráficos Q-Q y la evaluación formal mediante la prueba de
Shapiro-Wilk mostraron que la mayoría de las variables continuas no
seguían una distribución normal. Los títulos de factor reumatoide
(LAR) y anti-CCP presentaron marcada asimetría
positiva, con presencia de valores extremos elevados. De manera similar,
la PCR basal evidenció una distribución fuertemente sesgada
hacia la derecha. En contraste, la edad mostró una
distribución aproximadamente simétrica y la VSG presentó un
comportamiento cercano a la normalidad. Considerando estos hallazgos y
el tamaño muestral reducido, las variables continuas se describirán
principalmente mediante mediana y rango intercuartílico (RIC),
complementadas con media y desvío estándar cuando resulte
informativo.
6.3.6 BoxPlot conjunto de las variables continuas
boxplot(
datos_limpios %>%
select(
edad,
lar_título_inicial,
ccp_título_inicial,
vsg_inicial,
pcr_inicial
),
las = 2,
main = "Variables continuas"
)
Interpretación: La inspección mediante diagramas de
caja evidenció la presencia de valores extremos, particularmente en los
títulos de LAR y anti-CCP. Tras la revisión
individual de los registros correspondientes, dichos valores fueron
considerados plausibles desde el punto de vista clínico y de
laboratorio, por lo que no se identificaron errores de carga ni se
realizaron modificaciones sobre la base de datos.
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"))
)
tabla1 <- datos_limpios %>%
select(
grupo,
sexo,
edad,
hta,
dbt,
dlp,
tbq,
extbq,
lar_título_inicial,
ccp_título_inicial,
vsg_inicial,
pcr_inicial,
dre,
nad_inicial,
nat_inicial,
DMARD_inicial_tipo,
DMARD_inicial_cual,
DMARD_inicial_dosis,
PDN_inicial_dosis
) %>%
tbl_summary(
by = grupo,
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",
extbq ~ "Ex tabaquismo",
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",
DMARD_inicial_dosis ~ "Dosis DMARD inicial",
PDN_inicial_dosis ~ "Dosis prednisona inicial"
)
) %>%
add_p()
tabla1
| Characteristic | Caso N = 91 |
Control N = 301 |
p-value2 |
|---|---|---|---|
| Sexo | 0.2 | ||
| Femenino | 5 (56%) | 23 (77%) | |
| Masculino | 4 (44%) | 7 (23%) | |
| Edad | 50 (44 - 58) | 60 (53 - 69) | 0.049 |
| HTA | 0.085 | ||
| No | 9 (100%) | 21 (70%) | |
| Sí | 0 (0%) | 9 (30%) | |
| DBT | 0.6 | ||
| No | 9 (100%) | 26 (87%) | |
| Sí | 0 (0%) | 4 (13%) | |
| DLP | 0.7 | ||
| No | 7 (78%) | 25 (83%) | |
| Sí | 2 (22%) | 5 (17%) | |
| Tabaquismo actual | >0.9 | ||
| No | 9 (100%) | 27 (90%) | |
| Sí | 0 (0%) | 3 (10%) | |
| Ex tabaquismo | 0.6 | ||
| No | 8 (89%) | 28 (93%) | |
| Sí | 1 (11%) | 2 (6.7%) | |
| Látex AR basal | 92 (14 - 500) | 60 (30 - 162) | 0.7 |
| Anti-CCP basal | 113 (5 - 200) | 196 (144 - 200) | 0.2 |
| VSG basal | 43 (24 - 58) | 35 (16 - 61) | 0.7 |
| PCR basal | 8 (6 - 43) | 6 (2 - 8) | 0.2 |
| Daño radiológico estructural | >0.9 | ||
| No | 8 (89%) | 23 (79%) | |
| Sí | 1 (11%) | 6 (21%) | |
| NAD basal | 10 (5 - 10) | 10 (7 - 17) | 0.2 |
| NAT basal | 9 (8 - 10) | 12 (7 - 20) | 0.2 |
| Tipo de DMARD inicial | |||
| csDMARD | 9 (100%) | 30 (100%) | |
| DMARD inicial | |||
| MTX | 9 (100%) | 30 (100%) | |
| Dosis DMARD inicial | 0.5 | ||
| 7.5 | 0 (0%) | 1 (3.3%) | |
| 15 | 3 (33%) | 4 (13%) | |
| 25 | 6 (67%) | 25 (83%) | |
| Dosis prednisona inicial | 0.3 | ||
| 8 | 8 (89%) | 24 (80%) | |
| 16 | 0 (0%) | 5 (17%) | |
| 20 | 1 (11%) | 1 (3.3%) | |
| 1 n (%); Median (Q1 - Q3) | |||
| 2 Fisher’s exact test; Wilcoxon rank sum test; NA | |||
Interpretación: En la comparación de las
características basales entre pacientes con remisión sostenida libre de
DMARDs (casos) y aquellos sin este desenlace
(controles), la única diferencia estadísticamente
significativa observada fue la edad al diagnóstico. Los
casos presentaron una menor edad en comparación con los controles,
sugiriendo que los pacientes que alcanzaron remisión sostenida libre de
tratamiento eran, en promedio, más jóvenes al inicio de la
enfermedad.
Respecto al sexo, se observó una mayor proporción de
varones entre los casos en comparación con los controles. Sin embargo,
esta diferencia no alcanzó significación estadística. Dada la magnitud
de la diferencia observada y el reducido número de casos incluidos, no
puede descartarse que la ausencia de significación estadística se
relacione con una limitada potencia estadística.
No se identificaron diferencias estadísticamente significativas en la
frecuencia de las comorbilidades. Asimismo, los títulos basales de
LAR y anti-CCP, los marcadores inflamatorios
(VSG y PCR), el recuento de articulaciones
dolorosas (NAD), el recuento de articulaciones tumefactas
(NAT) y las variables relacionadas con el tratamiento
inicial no mostraron diferencias estadísticamente significativas entre
casos y controles.
En relación con el daño radiológico estructural, se observó una menor proporción en los casos en comparación con los controles; sin embargo, esta diferencia fue pequeña y no alcanzó significación estadística.
En relación con el tratamiento inicial, no se observaron diferencias
significativas en el tipo de DMARD utilizado, la dosis
inicial de DMARD ni la dosis inicial de
prednisona, lo que sugiere una estrategia terapéutica basal
similar entre casos y controles.
En conjunto, los resultados indican que los pacientes que alcanzaron
remisión sostenida libre de DMARDs no difirieron
sustancialmente de los controles en la mayoría de las variables
clínicas, serológicas y terapéuticas evaluadas al inicio de la
enfermedad. La menor edad observada en los casos constituye
el principal hallazgo diferencial de esta cohorte.
Dado el reducido número de casos identificados (n = 9), no se realizó
un análisis bivariado sistemático para todas las variables basales. Se
seleccionaron para evaluación aquellas variables que, en la
Tabla 1, mostraron diferencias aparentes entre grupos o
presentaban relevancia clínica como potenciales factores asociados a la
remisión sostenida libre de DMARDs. En este contexto, se exploraron la
edad al diagnóstico, el sexo y la presencia de
daño radiológico estructural, por haber mostrado
diferencias descriptivas de interés, aunque no necesariamente
estadísticamente significativas.
Las variables continuas se expresan como mediana (RIC). Los valores de p corresponden a la prueba de Wilcoxon-Mann-Whitney para variables continuas y prueba exacta de Fisher para variables categóricas.
wilcox.test(edad ~ grupo, data = datos_limpios)
##
## Wilcoxon rank sum test with continuity correction
##
## data: edad by grupo
## W = 64, p-value = 0.05
## alternative hypothesis: true location shift is not equal to 0
Interpretación: Los pacientes con remisión sostenida libre de DMARDs tendieron a presentar menor edad al diagnóstico, observándose una diferencia limítrofe entre grupos (p = 0.05).
fisher.test(table(datos_limpios$sexo,
datos_limpios$grupo))
##
## Fisher's Exact Test for Count Data
##
## data: table(datos_limpios$sexo, datos_limpios$grupo)
## p-value = 0.2
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.0623 2.5360
## sample estimates:
## odds ratio
## 0.391
Interpretación: No se observaron diferencias según sexo.
table(datos_limpios$dre, datos_limpios$grupo)
##
## Caso Control
## No 8 23
## Sí 1 6
fisher.test(table(datos_limpios$dre, datos_limpios$grupo))
##
## Fisher's Exact Test for Count Data
##
## data: table(datos_limpios$dre, datos_limpios$grupo)
## p-value = 1
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.196 107.764
## sample estimates:
## odds ratio
## 2.05
Interpretación: Uno de los casos presentó enfermedad radiográfica erosiva, mientras que ésta estuvo presente en 6 controles; sin embargo, la diferencia no alcanzó significación estadística (p = 1).
Objetivo: Describir y comparar la evolución terapéutica posterior al diagnóstico entre pacientes que alcanzaron remisión sostenida libre de DMARDs y aquellos con enfermedad persistente.
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 = 91 |
Control N = 301 |
p-value2 |
|---|---|---|---|
| Intensificación terapéutica | 0.7 | ||
| No | 2 (22%) | 5 (17%) | |
| Sí | 7 (78%) | 25 (83%) | |
| Combinación de DMARDs | >0.9 | ||
| No | 2 (22%) | 5 (17%) | |
| Sí | 7 (78%) | 24 (83%) | |
| Número de líneas terapéuticas | 0.9 | ||
| 1 | 2 (22%) | 5 (17%) | |
| 2 | 4 (44%) | 16 (53%) | |
| ≥3 | 3 (33%) | 9 (30%) | |
| Exposición a bDMARD | >0.9 | ||
| No | 6 (67%) | 21 (70%) | |
| Sí | 3 (33%) | 9 (30%) | |
| Exposición a tsDMARD | 0.085 | ||
| No | 9 (100%) | 21 (70%) | |
| Sí | 0 (0%) | 9 (30%) | |
| 1 n (%) | |||
| 2 Fisher’s exact test | |||
Interpretación: No se observaron diferencias estadísticamente significativas entre casos y controles en la necesidad de intensificación terapéutica (78% vs. 83%; p = 0.7), en el uso de terapia combinada con DMARDs (78% vs. 83%; p > 0.9), en el número de líneas terapéuticas utilizadas durante el seguimiento (p = 0.9) ni en la exposición a bDMARDs (33% vs. 30%; p > 0.9). Estos hallazgos sugieren trayectorias terapéuticas globalmente comparables entre ambos grupos.
Respecto a la exposición a tsDMARDs, ningún paciente del grupo con remisión sostenida libre de DMARDs recibió este tipo de tratamiento, mientras que el 30% de los controles sí estuvo expuesto a tsDMARDs. Aunque esta diferencia no alcanzó significación estadística (p = 0.085), constituye el hallazgo con mayor magnitud de diferencia observada en el análisis de trayectoria terapéutica y podría reflejar una tendencia clínica relevante que no pudo demostrarse formalmente debido al reducido tamaño muestral.
table(datos_limpios$grupo)
##
## Caso Control
## 9 30
table(datos_limpios$recaída)
##
## No Sí
## 7 2
datos_casos <- datos_limpios %>%
filter(grupo == "Caso") %>%
mutate(
fecha_fin = if_else(
recaída == "Sí",
fecha_recaída,
fecha_última_visita
),
tiempo_meses = as.numeric(
fecha_fin - fecha_inicio_remision_sostenida
) / 30.44
)
datos_casos %>%
select(
id_paciente,
recaída,
fecha_inicio_remision_sostenida,
fecha_recaída,
fecha_última_visita,
fecha_fin,
tiempo_meses
)
## # A tibble: 9 × 7
## 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 Sí 2024-11-19 2025-05-13 2026-04-14
## 6 CASO0006 No 2025-02-15 NA 2026-04-28
## 7 CASO0007 Sí 2024-05-02 2026-01-02 2026-03-01
## 8 CASO0008 No 2025-12-17 NA 2026-03-20
## 9 CASO0009 No 2026-01-30 NA 2026-04-21
## # ℹ abbreviated name: ¹fecha_inicio_remision_sostenida
## # ℹ 2 more variables: fecha_fin <date>, tiempo_meses <dbl>
summary(datos_casos$tiempo_meses)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.7 5.7 12.4 14.0 14.4 48.2
datos_casos %>%
filter(recaída == "Sí") %>%
select(id_paciente, tiempo_meses)
## # A tibble: 2 × 2
## id_paciente tiempo_meses
## <chr> <dbl>
## 1 CASO0005 5.75
## 2 CASO0007 20.0
Interpretación: Durante una mediana de seguimiento de 12,4 meses (RIC 5,7–14,4) desde el inicio de la remisión sostenida libre de DMARDs, 2 de 9 pacientes (22,2%) presentaron reactivación clínica de la enfermedad. El tiempo hasta la recaída fue de 5,8 y 20,0 meses, respectivamente.
Título: REMISIÓN SOSTENIDA LIBRE DE DMARDS EN ARTRITIS REUMATOIDE SEROPOSITIVA: UN ESTUDIO CASO-CONTROL DE FACTORES ASOCIADOS EN PRÁCTICA CLÍNICA REAL.
Autores: Saravia NK, Malah V, Vinicki JP.
Introducción: La remisión sostenida libre de DMARDs representa un desenlace clínico relevante en artritis reumatoide (AR), ya que refleja la ausencia persistente de sinovitis luego de suspender el tratamiento modificador de la enfermedad. Sin embargo, las características asociadas a este desenlace en práctica clínica real aún no están completamente definidas.
Objetivo: Comparar las características clínicas, serológicas, inflamatorias, radiológicas y terapéuticas de pacientes con AR seropositiva que alcanzaron remisión sostenida libre de DMARDs frente a pacientes con enfermedad persistente.
Métodos: Estudio observacional, analítico, retrospectivo, de tipo caso-control, realizado en la Unidad de Reumatología del Hospital de Quilmes. Se incluyeron 9 casos con remisión sostenida libre de DMARDs y 30 controles con AR persistente. Las variables continuas se expresaron como mediana y rango intercuartílico; las categóricas como frecuencia y porcentaje. Se utilizaron pruebas de Wilcoxon-Mann-Whitney y exacta de Fisher.
Resultados: Los pacientes que alcanzaron remisión sostenida libre de DMARDs fueron más jóvenes al diagnóstico que los controles [50 años (RIC 44–58) vs. 60 años (RIC 53–69); p = 0,049]. Se observó una mayor proporción de varones entre los casos (44% vs. 23%), aunque sin significación estadística (p = 0,2). No se identificaron diferencias significativas en comorbilidades, títulos de látex AR o anti-CCP, VSG, PCR, NAD, NAT, daño radiológico estructural ni tratamiento inicial. Las trayectorias terapéuticas fueron globalmente comparables entre grupos. Ningún caso recibió tsDMARDs frente al 30% de los controles (p = 0,085). Durante un seguimiento mediano de 12,4 meses (RIC 5,7–14,4), 2 de 9 casos (22,2%) presentaron recaída clínica.
Conclusión: En esta serie de pacientes con AR seropositiva, la menor edad al diagnóstico fue el principal hallazgo asociado a remisión sostenida libre de DMARDs. No se observaron diferencias claras en la mayoría de las variables basales ni en la trayectoria terapéutica, aunque la ausencia de exposición a tsDMARDs en los casos podría representar una señal exploratoria.