Se define diferencia mínima clínicamente importante (DMCI) a la diferencia más pequeña en la puntuación de un dominio o desenlace de interés, que los pacientes son capaces de percibir como beneficiosa.(1) Si bien existen dos métodos para establecer la DMCI de un dominio determinado (el método basado en el ancla y el método basado en la distribución)(2), los primeros son los recomendados ya que utiliza un criterio externo para definir lo que el paciente considera clínicamente importante.(2,3) El método basado en la distribución, generalmente se denomina cambio mínimo detectable (CMD) ya que tiene en cuenta el error de medición del instrumento.(3) Este cálculo ya ha sido reportado con anticipación.(4)
La pregunta ancla seleccionada fue “¿Con respecto a la primer consulta como siente se siente con respecto a su dolor lumbar?” con opciones de respuesta verbal “Peor”, “Algo peor”, “Igual”, “Algo mejor” y “Mejor”, poniendo interés en las útimas dos que nos informan de una mejoría clínica que los pacientes percibieron desde su subjetividad.(2) Los cálculos de la DMCI se realizan entre dicha impresión informada clínicamente y el cambio en la puntuación del dominio de interés, en este caso, el cambio en el puntaje total de la PCS. Estos puntajes, además de ser anclase clínicas y basadas en el paciente, deben correlacionarse con para definir una asociación aceptable entre un ancla y el puntaje de cambio de la PCS. Se utilizó un valor de r > 0.30-0.35 como umbral de correlación entre ambas variables, como es recomendado.(5) Se llevó a cabo el cálculo de correlación de rangos de Spearman para la impresión clínica autoinformada por el paciente con el puntaje de cambio en la PCS. Se calculó el cambio promedio en el puntaje de la PCS y para aquellos pacientes que respondieron “Algo mejor” o “Mejor” en la pregunta ancla con la finalidad de establecer el umbral que da cuenta del mínimo cambio correlacionado con una mejoría clínica del paciente.(2) La percepción clínica autoinformada fue utilizada como ancla principal, y se calculó la curva ROC para determinar el punto de corte óptimo de MCID para la puntuación de la PCS que maximiza equitativamente la sensibilidad y la especificidad y donde el error de clasificación global de ambas es menor. En tal sentido, se utilizó el índice de Youden para obtener dicho punto óptimo. Por último, se obtuvo el cálculo del área bajo la curva (AUC) para evaluar el valor predictivo, considerando un valor aceptable como un AUC > 0.7, mientras que un AUC > 0.8 se considera excelente. (6) Para todos los análisis se utilizó el programa R versión 4.2.1.20.(7) Se consideró como estadísticamente significativo un p ≤ 0,05.
Referencias:
df_segui<-data.frame(df[,31])
Hmisc::describe(df_segui)
## df_segui
##
## 1 Variables 147 Observations
## --------------------------------------------------------------------------------
## T3_GrocVerbal
## n missing distinct Info Mean Gmd
## 102 45 4 0.754 4.451 0.7688
##
## Value 1 3 4 5
## Frequency 2 10 28 62
## Proportion 0.020 0.098 0.275 0.608
## --------------------------------------------------------------------------------
## [1] -20.73585
# Cálculo de la DMCI utilizando la variable ancla Groc verbal con su categorización ("respondedores": "Algo mejor" y "Mejor")
mcid_mejoria_v<-mean((df_comp$T3_PCS-df_comp$T1_PCS)[df_comp$T3_GrocVerbal_dico == 1])
mcid_mejoria_v
## [1] -17.63333
# Cálculo de la DMCI para deterioro utilizando la variable ancla Groc verbal con su categorización ("No respondedores": "Algo peor" y "Peor")
mcid_deterioro<-mean((df_comp$T3_PCS-df_comp$T1_PCS)[df_comp$T3_GrocVerbal_dico == 0])
mcid_deterioro
## [1] -8.083333
library(ROCit)
clase<-df_comp$T3_GrocVerbal_dico
ajustados<-df_comp$PCS_cambio
ROC <- rocit(ajustados,class=clase)
score<-ajustados
plot(ROC, col="#1c61b6AA")
ROC$AUC
## [1] 0.7314815
# busco la distancia del (fpr,tpr) al (0,1)
distancia<-sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC$Cutoff,distancia,pch=20)
minimo<-ROC$Cutoff[which.min(distancia)] # 17
minimo
## [1] 17
measure <- measureit(score = score, class = clase, measure = c("ACC", "SENS", "SPEC"))
measure
## Cutoff Depth TP FP TN FN ACC SENS SPEC
## 1 Inf 0.000000000 0 0 12 90 0.1176471 0.00000000 1.00000000
## 2 45 0.009803922 1 0 12 89 0.1274510 0.01111111 1.00000000
## 3 43 0.019607843 2 0 12 88 0.1372549 0.02222222 1.00000000
## 4 38 0.058823529 6 0 12 84 0.1764706 0.06666667 1.00000000
## 5 35 0.068627451 7 0 12 83 0.1862745 0.07777778 1.00000000
## 6 34 0.078431373 8 0 12 82 0.1960784 0.08888889 1.00000000
## 7 33 0.088235294 9 0 12 81 0.2058824 0.10000000 1.00000000
## 8 32 0.098039216 10 0 12 80 0.2156863 0.11111111 1.00000000
## 9 31 0.107843137 11 0 12 79 0.2254902 0.12222222 1.00000000
## 10 30 0.117647059 12 0 12 78 0.2352941 0.13333333 1.00000000
## 11 29 0.147058824 15 0 12 75 0.2647059 0.16666667 1.00000000
## 12 28 0.166666667 17 0 12 73 0.2843137 0.18888889 1.00000000
## 13 27 0.186274510 19 0 12 71 0.3039216 0.21111111 1.00000000
## 14 26 0.235294118 24 0 12 66 0.3529412 0.26666667 1.00000000
## 15 25 0.274509804 28 0 12 62 0.3921569 0.31111111 1.00000000
## 16 24 0.294117647 30 0 12 60 0.4117647 0.33333333 1.00000000
## 17 23 0.313725490 31 1 11 59 0.4117647 0.34444444 0.91666667
## 18 22 0.352941176 35 1 11 55 0.4509804 0.38888889 0.91666667
## 19 21 0.362745098 36 1 11 54 0.4607843 0.40000000 0.91666667
## 20 20 0.382352941 38 1 11 52 0.4803922 0.42222222 0.91666667
## 21 19 0.411764706 41 1 11 49 0.5098039 0.45555556 0.91666667
## 22 18 0.441176471 44 1 11 46 0.5392157 0.48888889 0.91666667
## 23 17 0.490196078 48 2 10 42 0.5686275 0.53333333 0.83333333
## 24 16 0.509803922 48 4 8 42 0.5490196 0.53333333 0.66666667
## 25 15 0.539215686 51 4 8 39 0.5784314 0.56666667 0.66666667
## 26 14 0.598039216 56 5 7 34 0.6176471 0.62222222 0.58333333
## 27 13 0.656862745 61 6 6 29 0.6568627 0.67777778 0.50000000
## 28 12 0.676470588 63 6 6 27 0.6764706 0.70000000 0.50000000
## 29 11 0.715686275 67 6 6 23 0.7156863 0.74444444 0.50000000
## 30 10 0.764705882 72 6 6 18 0.7647059 0.80000000 0.50000000
## 31 9 0.774509804 73 6 6 17 0.7745098 0.81111111 0.50000000
## 32 8 0.794117647 75 6 6 15 0.7941176 0.83333333 0.50000000
## 33 7 0.803921569 76 6 6 14 0.8039216 0.84444444 0.50000000
## 34 6 0.833333333 78 7 5 12 0.8137255 0.86666667 0.41666667
## 35 5 0.852941176 80 7 5 10 0.8333333 0.88888889 0.41666667
## 36 4 0.901960784 84 8 4 6 0.8627451 0.93333333 0.33333333
## 37 3 0.911764706 85 8 4 5 0.8725490 0.94444444 0.33333333
## 38 2 0.921568627 85 9 3 5 0.8627451 0.94444444 0.25000000
## 39 -1 0.941176471 86 10 2 4 0.8627451 0.95555556 0.16666667
## 40 -3 0.960784314 88 10 2 2 0.8823529 0.97777778 0.16666667
## 41 -5 0.970588235 88 11 1 2 0.8725490 0.97777778 0.08333333
## 42 -8 0.980392157 88 12 0 2 0.8627451 0.97777778 0.00000000
## 43 -15 0.990196078 89 12 0 1 0.8725490 0.98888889 0.00000000
## 44 -23 1.000000000 90 12 0 0 0.8823529 1.00000000 0.00000000
library(pROC)
rocobj <- plot.roc(df_comp$T3_GrocVerbal_dico,ajustados,
main="Confidence intervals",
percent=TRUE,ci=TRUE,print.auc=TRUE)
ciobj <- ci.se(rocobj, specificities=seq(0, 100, 5))
#insertamos el IC
plot(ciobj, type="shape", col="#1c61b6AA")
plot(ci(rocobj, of="thresholds", thresholds="best"))
a<-ggplot(df_comp, aes(T3_GrocVerbal_dico, PCS_cambio, fill = T3_GrocVerbal_dico)) + geom_boxplot(show.legend = F) +
theme_minimal() + labs( x= "Respondedores vs No respondedores", y= "Cambio en el valor de PCS", colour = "Tratamiento",
title = "Cambio en el valor de PCS distribuída por respondedores o no") +
scale_fill_brewer(palette = "Set3")
a
b<- ggplot(df_comp, aes(df_comp$T3_GrocVerbal, df_comp$PCS_cambio, fill = df_comp$T3_GrocVerbal)) +
geom_boxplot(show.legend = F) +theme_minimal() + labs( x= "GROC Verbal", y= "Cambio en el valor de PCS", colour = "GROC Verbal", title = "Cambio en el valor de PCS distribuída por la variable GROC Verbal" ) +
theme(plot.title = element_text(hjust = 0.5), axis.text.x = element_text(vjust = 0.5, angle = 0, hjust = 0.5)) +
scale_fill_brewer(palette = "Set3")
b
## Warning: Use of `df_comp$T3_GrocVerbal` is discouraged. Use `T3_GrocVerbal`
## instead.
## Warning: Use of `df_comp$PCS_cambio` is discouraged. Use `PCS_cambio` instead.
## Warning: Use of `df_comp$T3_GrocVerbal` is discouraged. Use `T3_GrocVerbal`
## instead.
ggpairs(df_comp, columns = c(9:11, 15, 22:24, 28))
Supuestos para Pearson (dos variables continuas)
— Pares de observaciones X,Y independientes entre sí — Idénticamente distribuídos — Distribución conjunta normal bivariada
##
## Shapiro-Wilk normality test
##
## data: df$T1_PCS
## W = 0.97546, p-value = 0.009723
##
## Shapiro-Wilk normality test
##
## data: df$T1_RM
## W = 0.98635, p-value = 0.1566
##
## Shapiro-Wilk normality test
##
## data: df$T1_EVA
## W = 0.93982, p-value = 6.256e-06
##
## Shapiro-Wilk normality test
##
## data: df$Indice1
## W = 0.97873, p-value = 0.02208
# Debido a que no se cumplen los supuestos mencionados utilizo el coeficiente
# de correlación de Spearman
# ____ Spearman ´s PCS ____ ====
cor.test(df$T1_PCS, df$T1_RM, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_PCS, df$T1_RM, alternative = c("two.sided"), :
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_PCS and df$T1_RM
## S = 308840, p-value = 1.531e-07
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.4166178
cor.test(df$T1_PCS, df$T1_EVA, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_PCS, df$T1_EVA, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_PCS and df$T1_EVA
## S = 459667, p-value = 0.1118
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.1317134
cor.test(df$T1_PCS, df$T1_IDB, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_PCS, df$T1_IDB, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_PCS and df$T1_IDB
## S = 314871, p-value = 3.556e-07
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.4052266
cor.test(df$T1_PCS, df$Indice1, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_PCS, df$Indice1, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_PCS and df$Indice1
## S = 729066, p-value = 2.49e-06
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.3771664
# Debido a que no se cumplen los supuestos mencionados utilizo el coeficiente
# de correlación de Spearman
# ____ Spearman ´s RM ____ ====
cor.test(df$T1_RM, df$T1_EVA, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_RM, df$T1_EVA, alternative = c("two.sided"), :
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_RM and df$T1_EVA
## S = 385116, p-value = 0.000839
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.2725374
cor.test(df$T1_RM, df$T1_IDB, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_RM, df$T1_IDB, alternative = c("two.sided"), :
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_RM and df$T1_IDB
## S = 381905, p-value = 0.0006333
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.2786026
cor.test(df$T1_RM, df$Indice1, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_RM, df$Indice1, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_RM and df$Indice1
## S = 748315, p-value = 1.931e-07
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.4135269
# Debido a que no se cumplen los supuestos mencionados utilizo el coeficiente
# de correlación de Spearman
# ____ Spearman ´s RM ____ ====
cor.test(df$T1_EVA, df$T1_IDB, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_EVA, df$T1_IDB, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_EVA and df$T1_IDB
## S = 401401, p-value = 0.003175
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.2417759
cor.test(df$T1_EVA, df$Indice1, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_EVA, df$Indice1, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_EVA and df$Indice1
## S = 741554, p-value = 4.908e-07
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.4007546
# Debido a que no se cumplen los supuestos mencionados utilizo el coeficiente
# de correlación de Spearman
# ____ Spearman ´s RM ____ ====
cor.test(df$T1_IDB, df$Indice1, alternative = c("two.sided"),
method = c("spearman"), conf.level = 0.95)
## Warning in cor.test.default(df$T1_IDB, df$Indice1, alternative =
## c("two.sided"), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: df$T1_IDB and df$Indice1
## S = 747956, p-value = 2.031e-07
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.4128472