Analisis Descriptivo Multivariado

Procesamiento de variables

# cambia idioma de la consola de R a español:
Sys.setenv(LANG="es")
# usar 2 cifras significativas y tiende a evitar 
# notación científica (ver ayuda de función: `options`): 
options(digits = 2, scipen = 999) 
# cargar librerías: 
# Cargar librerías y suprimir mensajes y advertencias individualmente
suppressMessages(suppressWarnings(library(FactoClass)))
suppressMessages(suppressWarnings(library(Factoshiny)))
suppressMessages(suppressWarnings(library(factoextra)))
suppressMessages(suppressWarnings(library(plotly)))
suppressMessages(suppressWarnings(library(dplyr)))
suppressMessages(suppressWarnings(library(readxl)))
suppressMessages(suppressWarnings(library(ggplot2)))
suppressMessages(suppressWarnings(library(knitr)))
suppressMessages(suppressWarnings(library(htmlwidgets)))
suppressMessages(suppressWarnings(library(ggpubr)))
datos <- read_excel("SUPPPORT2.xlsx")
datos<-datos%>%mutate(num.co=case_when(num.co>=4~ '4+',
                                       TRUE ~ as.character(num.co)
))
datos[,c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)]<-lapply(datos[,c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)],as.factor)
datos
# A tibble: 9,105 × 45
     age sex    dzgroup dzclass num.co   edu income scoma charges totcst totmcst
   <dbl> <fct>  <fct>   <fct>   <fct>  <dbl> <fct>  <dbl>   <dbl>  <dbl>   <dbl>
 1  62.8 male   Lung C… Cancer  0         11 $11-$…     0    9715     NA      NA
 2  60.3 female Cirrho… COPD/C… 2         12 $11-$…    44   34496     NA      NA
 3  52.7 female Cirrho… COPD/C… 2         12 under…     0   41094     NA      NA
 4  42.4 female Lung C… Cancer  2         11 under…     0    3075     NA      NA
 5  79.9 female ARF/MO… ARF/MO… 1         NA <NA>      26   50127     NA      NA
 6  93.0 male   Coma    Coma    1         14 <NA>      55    6884     NA      NA
 7  62.4 male   CHF     COPD/C… 1         14 $25-$…     0   30460     NA      NA
 8  86.8 male   CHF     COPD/C… 3         NA <NA>      26   30460     NA      NA
 9  85.7 male   Lung C… Cancer  2         12 <NA>      26      NA     NA      NA
10  42.3 female Colon … Cancer  0         11 $25-$…     0    9914     NA      NA
# ℹ 9,095 more rows
# ℹ 34 more variables: avtisst <dbl>, race <fct>, sps <dbl>, aps <dbl>,
#   surv2m <dbl>, surv6m <dbl>, hday <dbl>, diabetes <fct>, dementia <fct>,
#   ca <fct>, prg2m <dbl>, prg6m <dbl>, dnr <fct>, dnrday <dbl>, meanbp <dbl>,
#   wblc <dbl>, hrt <dbl>, resp <dbl>, temp <dbl>, pafi <dbl>, alb <dbl>,
#   bili <dbl>, crea <dbl>, sod <dbl>, ph <dbl>, glucose <dbl>, bun <dbl>,
#   urine <dbl>, adlp <fct>, adls <fct>, adlsc <dbl>, death <fct>, …

Sex

La variable Sex no parece nesesitar ninguna recategorizacion.

Nuevos Niveles:

female : f

male : m

dzgroup: Subcategoría enfermedad del paciente.

Nuevos Niveles:

Lung Cancer = L.C

Cirrhosis = C

ARF/MOSF w/ Sepsis = A.M.S

Coma = Coma

CHF = CHF

Colon Cancer = C.C

COPD = COPD

MOSF w/Malig = M.M

dzclass:Categoría enfermedad del paciante.

Nuevos Niveles:

ARF/MOSF = A.M

Cancer= C

Coma = Coma

COPD/CHF/Cirrhosis = C.C.C

race

Hay muy pocos asiaticos, negros, hispanos y otros por lo que se binzariza la variable en blancos y otros

nuevos nivels

white=w

other=o

datos<-datos%>%mutate(dzgroup=case_when(dzgroup=="Lung Cancer"~ 'L.C',
                                        dzgroup=="Cirrhosis"~ 'C',
                                        dzgroup=="ARF/MOSF w/Sepsis"~ 'A.M.S',
                                        dzgroup=="Coma"~ 'Coma',
                                        dzgroup=="CHF"~ 'CHF',
                                        dzgroup=="Colon Cancer"~ 'C.C',
                                        dzgroup=="COPD"~ 'COPD',
                                        dzgroup=="MOSF w/Malig"~ 'M.M',
                                        T~'NA'
))

datos<-datos%>%mutate(dzclass=case_when(dzclass=="ARF/MOSF"~ 'A.M',
                                       dzclass=="Cancer"~ 'C',
                                       dzclass=="Coma"~ 'Coma',
                                       T~'C.C.C'
))
datos<-datos%>%mutate(race=case_when(race=="white"~ 'W',
                                     
                                     T~'O'
))

datos<-datos%>%mutate(dementia=case_when(dementia==1~ 'yes',
                                         
                                         T~'no'
))

datos<-datos%>%mutate(diabetes=case_when(diabetes==1~ 'yes',
                                         
                                         T~'no'
))



datos<-datos%>%mutate(dnr=case_when(dnr=='dnr after sadm'~ 'yes',
                                    dnr=='dnr before sadm'~ 'yes',
                                         T~'no'
))
datos<-datos%>%mutate(death=case_when(death==1~ 'yes',
                                      
                                      T~'no'
))

datos<-datos%>%mutate(hospdead=case_when(hospdead==1~ 'yes',
                                         
                                         T~'no'
))
datos[,c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)]<-lapply(datos[,c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)],as.factor)

ACP

De acuerdo con el análisis exploratorio de los datos, se decide utilizar como variables activas para el ACP aquellas que presenten menos valores faltantes (NA) y menos valores atípicos (outliers). Las variables seleccionadas son: “age”, “avtisst”, “surv2m”, “surv6m”, “meanbp”, “hrt” y “temp”.

outlier_count <- function(column) {
  if (is.numeric(column)) { # Verificar si la columna es numérica
    Q1 <- quantile(column, 0.25, na.rm = TRUE)  # Primer cuartil
    Q3 <- quantile(column, 0.75, na.rm = TRUE)  # Tercer cuartil
    IQR <- Q3 - Q1  # Rango intercuartil
    lower_bound <- Q1 - 1.5 * IQR  # Límite inferior
    upper_bound <- Q3 + 1.5 * IQR  # Límite superior
    return(sum(column < lower_bound | column > upper_bound, na.rm = TRUE))
  } else {
    return(0)  # Si no es numérico, no hay atípicos
  }
}
colores <- rep(c("red","blue","yellow","pink","green","orange"),5)
par(mfrow=c(2,3), mai=c(0.3,0.4,0.3,0.1), las=1, bty="n")
for(i in # Encuentra las posiciones de las columnas
match(c("age", "avtisst", "surv2m", "surv6m", "meanbp", "hrt", "temp"), names(datos))) boxplot(datos[,i], main=names(datos)[i], col=colores[i])

sapply(datos[,-c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)], outlier_count)
    age     edu   scoma charges  totcst totmcst avtisst     sps     aps  surv2m 
     56     199    1955     912     749     495      43     283     178     307 
 surv6m    hday   prg2m   prg6m  dnrday  meanbp    wblc     hrt    resp    temp 
      0    1543       0       0     799       6     399      40     313      14 
   pafi     alb    bili    crea     sod      ph glucose     bun   urine   adlsc 
     90      15     926     987     256     260     272     267      92       0 
res.PCA<-PCA(datos,quali.sup=c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45),quanti.sup=c(6,9,10,11,14,15,18,22,23,25,27,29,31,32,33,34,35,36,37,38,39,42),graph=FALSE)
Warning in PCA(datos, quali.sup = c(2, 3, 4, 5, 7, 13, 19, 20, 21, 24, 40, :
Missing values are imputed by the mean of the variable: you should use the
imputePCA function of the missMDA package

Observando el histograma de los valores propios divididos por la inercia total, se decide analizar cuatro ejes, dado que retienen alrededor del 40% de la variabilidad.

barplot(res.PCA$eig[,1]/sum(res.PCA$eig[,1]))

cumsum(res.PCA$eig[,1]/sum(res.PCA$eig[,1]))
comp 1 comp 2 comp 3 comp 4 comp 5 comp 6 comp 7 comp 8 
  0.34   0.52   0.65   0.76   0.86   0.94   1.00   1.00 

Las variables que más contribuyen a la construcción del primer eje son los índices de supervivencia Schoma y Avissst. En el segundo eje, las variables principales son la temperatura, la frecuencia cardíaca y la edad. En el tercer eje, predominan la presión arterial y la edad, mientras que en el cuarto eje destacan la edad, la temperatura y la presión arterial.

fviz_contrib(res.PCA, choice = "var", axes = 1)

fviz_contrib(res.PCA, choice = "var", axes = 2)

fviz_contrib(res.PCA, choice = "var", axes = 3)

fviz_contrib(res.PCA, choice = "var", axes = 4)

Se grafican los círculos de correlaciones correspondientes a tres planos factoriales, incluyendo únicamente las variables ilustrativas y activas con un \(cos^2 > 0.2\). Esto se realiza para facilitar la lectura y mejorar la interpretación de los resultados.

umbral_cos2 <- 0.2

# Filtrar las variables según su cos2
variables_filtradas <- rownames(res.PCA$var$cos2)[apply(res.PCA$var$cos2[,c(1,2)], 1, sum) >= umbral_cos2]

# Filtrar las variables según su cos2
variables_filtradas2 <- rownames(res.PCA$quanti.sup$cos2)[apply(res.PCA$quanti$cos2[,c(1,2)], 1, sum) >= umbral_cos2]
variables_filtradas<-c(variables_filtradas,variables_filtradas2)
fviz_pca_var(res.PCA, axes=c(1,2), col.var="cos2",
             select.var = list(name =variables_filtradas),
             gradient.cols = c("darkred", 
                               "darkorange", 
                               "darkgreen"))

En el primer eje se puede observar una correlación positiva con el índice y la estimación de supervivencia de los pacientes, y una correlación negativa con el score de coma y la puntuación promedio del sistema de calificación de la intervención terapéutica (TISS), que cuantifica la intensidad del tratamiento suministrado al paciente.

El segundo eje presenta una correlación positiva con el TISS, la temperatura y la frecuencia cardíaca, y una correlación negativa con la edad.

umbral_cos2 <- 0.2

# Filtrar las variables según su cos2
variables_filtradas <- rownames(res.PCA$var$cos2)[apply(res.PCA$var$cos2[,c(1,3)], 1, sum) >= umbral_cos2]

# Filtrar las variables según su cos2
variables_filtradas2 <- rownames(res.PCA$quanti.sup$cos2)[apply(res.PCA$quanti$cos2[,c(1,3)], 1, sum) >= umbral_cos2]
variables_filtradas<-c(variables_filtradas,variables_filtradas2)
fviz_pca_var(res.PCA, axes=c(1,3), col.var="cos2",
             select.var = list(name =variables_filtradas),
             gradient.cols = c("darkred", 
                               "darkorange", 
                               "darkgreen"))

En el tercer eje se observa una alta correlación positiva con la presión arterial, mientras que en el cuarto eje se identifica una correlación positiva con la temperatura, la edad y la presión arterial.

umbral_cos2 <- 0.2

# Filtrar las variables según su cos2
variables_filtradas <- rownames(res.PCA$var$cos2)[apply(res.PCA$var$cos2[,c(1,4)], 1, sum) >= umbral_cos2]

# Filtrar las variables según su cos2
variables_filtradas2 <- rownames(res.PCA$quanti.sup$cos2)[apply(res.PCA$quanti$cos2[,c(1,4)], 1, sum) >= umbral_cos2]
variables_filtradas<-c(variables_filtradas,variables_filtradas2)
fviz_pca_var(res.PCA, axes=c(1,4), col.var="cos2",
             select.var = list(name =variables_filtradas),
             gradient.cols = c("darkred", 
                               "darkorange", 
                               "darkgreen"))

Para el gráfico de los promedios de las variables ilustrativas, se seleccionan aquellas que tengan valores test mayores a 3.

umbral <- 3
quali.sup <- as.data.frame(res.PCA$quali.sup$coord[apply(abs(res.PCA$quali.sup$v.test[,c(1,2)]), 1, max) >= umbral,])
quali.sup$name <- rownames(res.PCA$quali.sup$cos2)[apply(abs(res.PCA$quali.sup$v.test[,c(1,2)]), 1, max) >= umbral]

# Plot

ggscatter(quali.sup, x = "Dim.1", y = "Dim.2", label = "name",
          ylim = c(-2.5, 2.5), xlim = c(-2.5, 2.5),
          ggtheme = theme_minimal()
)+
  geom_vline(xintercept = 0, linetype = "dashed")+
  geom_hline(yintercept = 0, linetype = "dashed")

res.PCA$quali.sup$v.test
                      Dim.1  Dim.2   Dim.3    Dim.4   Dim.5
female               -2.332  -1.20   3.033   1.7466  0.9668
male                  2.332   1.20  -3.033  -1.7466 -0.9668
dzgroup_A.M.S       -13.369  21.73 -13.064  -5.1702  3.7811
dzgroup_C             4.943   2.68  -3.358  -7.2961 -2.8515
dzgroup_C.C          12.156  -3.99   5.613   2.3167  2.6549
dzgroup_CHF          30.684 -13.64  -2.604   8.7531 -1.5187
dzgroup_Coma        -35.229  -3.14  10.545 -13.9374 20.9100
dzgroup_COPD         17.954  -7.73   7.825  11.6772 -4.1807
dzgroup_L.C           3.818 -11.34   9.580   2.8130 -8.7274
dzgroup_M.M         -23.893   4.40  -4.157  -1.7908 -9.3892
dzclass_A.M         -25.913  23.58 -14.991  -6.0112 -1.3636
dzclass_C            10.872 -11.90  11.475   3.7942 -5.5218
dzclass_C.C.C        38.110 -14.36   1.518  10.9176 -5.3599
dzclass_Coma        -35.229  -3.14  10.545 -13.9374 20.9100
num.co_0             -8.309  15.43  -4.925 -10.1174  8.5916
num.co_1             -6.183   2.17   2.155  -0.8182 -0.9480
num.co_2              0.935  -4.77  -0.550   4.6595 -3.8257
num.co_3              7.758  -4.79   1.393   2.8399 -0.9804
num.co_4+             7.562  -7.24   1.150   2.1333 -1.2137
$11-$25k              2.734  -0.34   1.036  -0.8416 -0.0428
$25-$50k              0.392   5.56  -3.096  -3.0296 -1.0077
>$50k                 1.347   3.00  -2.608  -2.2473  0.7184
under $11k            6.416  -2.05   2.865  -0.5966 -2.4480
O                     0.166  10.21  -4.783 -13.3820 -0.0056
W                    -0.166 -10.21   4.783  13.3820  0.0056
diabetes_no          -2.427   6.33  -0.899  -3.4465 -4.6872
diabetes_yes          2.427  -6.33   0.899   3.4465  4.6872
dementia_no           4.663  11.11  -8.424  -9.4508 -4.2138
dementia_yes         -4.663 -11.11   8.424   9.4508  4.2138
ca_metastatic         2.339 -11.67  10.345   4.1038 -8.3944
ca_no                 9.182  11.76  -9.725  -6.3453  9.7861
ca_yes              -15.381  -2.54   1.286   3.9354 -3.6526
dnr_no               43.044  11.75  -7.565  -4.6886  1.9941
dnr_yes             -43.044 -11.75   7.565   4.6886 -1.9941
adlp_0               30.049  -2.69  -0.996   1.4519 -1.5976
adlp_1               16.082  -5.46   3.582   3.7756 -0.7972
adlp_2               10.664  -4.02   0.941   3.6901 -1.0973
adlp_3                5.773  -4.11   0.020   2.8558 -1.5902
adlp_4                4.772  -3.68   0.810   2.4465 -0.7222
adlp_5                5.806  -2.59   1.029  -0.8308 -2.8662
adlp_6                5.107  -0.50  -0.660  -0.6054 -1.9379
adlp_7                1.821  -0.90   0.065   0.0037 -2.4080
adls_0                4.660   7.72  -4.376  -6.4864  0.3349
adls_1                0.738  -1.37   2.494   2.6144  0.8007
adls_2                0.695  -1.26   2.338   4.2430 -0.9251
adls_3                0.312  -2.05   1.485   2.2037 -1.9980
adls_4                1.082  -1.20   2.408   2.0281 -0.3825
adls_5               -2.075  -0.85   1.732   1.7530 -3.4469
adls_6               -3.004  -1.50   1.381  -1.0198 -0.7011
adls_7               -6.420  -1.57   2.241  -1.1627  2.4175
death_no             29.256  15.19  -8.203  -5.0605  5.1246
death_yes           -29.256 -15.19   8.203   5.0605 -5.1246
hospdead_no          57.225  -3.39   4.779   8.3157  2.9831
hospdead_yes        -57.225   3.39  -4.779  -8.3157 -2.9831
<2 mo. follow-up    -52.345  -4.50   1.120  -3.6616 -3.9992
adl>=4 (>=5 if sur)   0.016   2.57   3.534   2.3771  2.3516
Coma or Intub        -4.780   2.21  -3.008  -0.0389  2.0380
no(M2 and SIP pres)  36.402  -0.13  -1.926   1.4774  1.5914
SIP>=30              10.271   2.31  -1.915  -0.2273 -1.5321
res.PCA$quali.sup$coord
                       Dim.1   Dim.2   Dim.3   Dim.4     Dim.5
female              -0.04601 -0.0170  0.0360  0.0201  0.010030
male                 0.03573  0.0132 -0.0280 -0.0156 -0.007789
dzgroup_A.M.S       -0.29314  0.3411 -0.1725 -0.0662  0.043594
dzgroup_C            0.35354  0.1374 -0.1446 -0.3047 -0.107245
dzgroup_C.C          0.86585 -0.2033  0.2408  0.0963  0.099439
dzgroup_CHF          1.25852 -0.4005 -0.0643  0.2096 -0.032753
dzgroup_Coma        -2.31446 -0.1477  0.4172 -0.5346  0.722324
dzgroup_COPD         0.90561 -0.2791  0.2377  0.3439 -0.110882
dzgroup_L.C          0.19947 -0.4242  0.3014  0.0858 -0.239734
dzgroup_M.M         -1.42631  0.1882 -0.1495 -0.0624 -0.294719
dzclass_A.M         -0.48401  0.3153 -0.1686 -0.0656 -0.013392
dzclass_C            0.43975 -0.3445  0.2795  0.0896 -0.117441
dzclass_C.C.C        0.97865 -0.2640  0.0235  0.1637 -0.072373
dzclass_Coma        -2.31446 -0.1477  0.4172 -0.5346  0.722324
num.co_0            -0.37495  0.4983 -0.1338 -0.2666  0.203859
num.co_1            -0.15313  0.0385  0.0321 -0.0118 -0.012346
num.co_2             0.02720 -0.0992 -0.0096  0.0791 -0.058511
num.co_3             0.31317 -0.1383  0.0339  0.0669 -0.020809
num.co_4+            0.35468 -0.2429  0.0325  0.0584 -0.029933
$11-$25k             0.10588 -0.0094  0.0242 -0.0190 -0.000871
$25-$50k             0.01880  0.1908 -0.0895 -0.0849 -0.025421
>$50k                0.08217  0.1309 -0.0958 -0.0800  0.023044
under $11k           0.16506 -0.0377  0.0444 -0.0090 -0.033113
O                    0.00559  0.2463 -0.0971 -0.2633 -0.000099
W                   -0.00149 -0.0656  0.0258  0.0701  0.000026
diabetes_no         -0.02079  0.0388 -0.0046 -0.0172 -0.021110
diabetes_yes         0.08567 -0.1600  0.0191  0.0710  0.086991
dementia_no          0.01486  0.0253 -0.0162 -0.0176 -0.007062
dementia_yes        -0.44226 -0.7542  0.4812  0.5234  0.210162
ca_metastatic        0.08033 -0.2868  0.2139  0.0823 -0.151568
ca_no                0.11498  0.1054 -0.0733 -0.0464  0.064441
ca_yes              -0.66979 -0.0791  0.0337  0.1001 -0.083633
dnr_no               0.55028  0.1075 -0.0582 -0.0350  0.013404
dnr_yes             -1.01789 -0.1988  0.1077  0.0647 -0.024795
adlp_0               1.03500 -0.0664 -0.0207  0.0292 -0.028933
adlp_1               0.96074 -0.2334  0.1289  0.1317 -0.025043
adlp_2               0.95312 -0.2571  0.0506  0.1926 -0.051568
adlp_3               0.77555 -0.3950  0.0016  0.2240 -0.112330
adlp_4               0.70620 -0.3903  0.0721  0.2114 -0.056190
adlp_5               0.78266 -0.2501  0.0835 -0.0654 -0.203160
adlp_6               0.85123 -0.0599 -0.0662 -0.0589 -0.169848
adlp_7               0.42179 -0.1494  0.0091  0.0005 -0.293327
adls_0               0.11255  0.1335 -0.0636 -0.0915  0.004253
adls_1               0.03592 -0.0477  0.0731  0.0743  0.020487
adls_2               0.05184 -0.0672  0.1050  0.1848 -0.036293
adls_3               0.02809 -0.1325  0.0806  0.1159 -0.094640
adls_4               0.11062 -0.0879  0.1482  0.1210 -0.020558
adls_5              -0.18239 -0.0537  0.0917  0.0899 -0.159274
adls_6              -0.24269 -0.0869  0.0672 -0.0481 -0.029786
adls_7              -0.60372 -0.1057  0.1269 -0.0638  0.119534
death_no             0.74331  0.2762 -0.1255 -0.0751  0.068462
death_yes           -0.34810 -0.1293  0.0588  0.0352 -0.032062
hospdead_no          0.58855 -0.0250  0.0296  0.0499  0.016132
hospdead_yes        -1.68210  0.0713 -0.0846 -0.1427 -0.046107
<2 mo. follow-up    -1.25964 -0.0774  0.0162 -0.0514 -0.050602
adl>=4 (>=5 if sur)  0.00082  0.0956  0.1106  0.0722  0.064282
Coma or Intub       -1.23586  0.4091 -0.4683 -0.0059  0.277040
no(M2 and SIP pres)  0.88938 -0.0023 -0.0283  0.0211  0.020444
SIP>=30              0.69496  0.1119 -0.0780 -0.0090 -0.054509
plot.PCA(res.PCA, axes = c(1,2),label =c('none'),choix = c("ind"))

plot.PCA(res.PCA, axes = c(1,3),label =c('none'),choix = c("ind"))

plot.PCA(res.PCA, axes = c(1,4),label =c('none'),choix = c("ind"))

ACM

summary(datos[,c(2,3,4,5,7,13,19,20,21,24,40,41,43,44,45)])
     sex          dzgroup      dzclass     num.co           income     race    
 female:3980   A.M.S  :3515   A.M  :4227   0 :1177   $11-$25k  :1527   O:1914  
 male  :5125   CHF    :1387   C    :1420   1 :3006   $25-$50k  :1057   W:7191  
               COPD   : 967   C.C.C:2862   2 :2397   >$50k     : 684           
               L.C    : 908   Coma : 596   3 :1425   under $11k:2855           
               M.M    : 712                4+:1100   NA's      :2982           
               Coma   : 596                                                    
               (Other):1020                                                    
 diabetes   dementia            ca        dnr            adlp     
 no :7327   no :8809   metastatic:1858   no :5910   0      :1849  
 yes:1778   yes: 296   no        :5995   yes:3195   1      : 711  
                       yes       :1252              2      : 332  
                                                    3      : 150  
                                                    5      : 149  
                                                    (Other): 273  
                                                    NA's   :5641  
      adls      death      hospdead                   sfdm2     
 0      :3108   no :2904   no :6745   <2 mo. follow-up   :3123  
 1      :1031   yes:6201   yes:2360   adl>=4 (>=5 if sur): 916  
 2      : 469                         Coma or Intub      :  41  
 6      : 403                         no(M2 and SIP pres):3061  
 5      : 343                         SIP>=30            : 564  
 (Other): 884                         NA's               :1400  
 NA's   :2867                                                   

Se eligen las variables numéricas como ilustrativas, y las variables sfdm2, dzgroup y los índices de actividad diaria como suplementarias para realizar el ACM.

library("FactoMineR")
acm <- MCA(datos,quanti.sup=c(1,6,8,9,10,11,12,14,15,16,17,18,22,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,42),quali.sup=c(3,40,41,45),graph=FALSE)
barplot(acm$eig[,1])

Se realiza el diagrama de barras correspondiente a los valores propios más altos y se seleccionan 17 ejes para llevar a cabo el proceso de agrupamiento.

s <- 11 # poner el numero de activas que hicieron los planos
l <- acm$eig[acm$eig[,1] > 1/s, 1]
tau <- ( s / (s - 1) )^2 * ( l - (1/s) )^2
ptau <- tau / sum( tau ) * 100
barplot(ptau, col="darkred", ylim = c(0,75))

Al realizar el histograma de Benzecri, se decide analizar 3 ejes.

fviz_contrib(acm, choice = "var", axes = 1)

Se puede observar que lo que más contribuye al primer eje factorial son: tener metástasis o no tener cáncer, tener cáncer, una comorbilidad (COPD/CHF/Cirrhosis) y no haber muerto a lo largo del estudio.

fviz_contrib(acm, choice = "var", axes = 2)

En el segundo eje factorial contribuyen: haber muerto en el hospital o no, tener o no una orden de reanimación, y tener cáncer o no.

fviz_contrib(acm, choice = "var", axes = 3)

En el tercer eje, lo que más contribuye es tener 4 o más comorbilidades o ninguna, tener diabetes, tener COPD/CHF/Cirrhosis, no haber muerto y tener ARF/MOSF.

# Establecer un umbral mínimo de calidad de representación
umbral_cos2 <- 0.2

# Filtrar las variables según su cos2
variables_filtradas <- rownames(acm$var$cos2)[apply(acm$var$cos2[,c(1,2)], 1, sum) >= umbral_cos2]

# Crear un gráfico solo con las variables seleccionadas
fviz_mca_var(acm, axes = c(1, 2), col.var = "cos2", repel = TRUE, 
             select.var = list(name = variables_filtradas),
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             ggtheme = theme_minimal())

Las variables más representadas en el primer plano muestran que las personas que murieron en el hospital tenían orden de reanimación. También se observa que las personas con metástasis no presentaban ninguna comorbilidad y no tenían orden de reanimación. Al parecer, las personas con CCC no murieron y parecen tener más comorbilidades. Se puede observar que las personas que murieron se ubican al otro lado de las variables “cáncer” y “metástasis”.

# Filtrar las variables según su cos2 en los ejes seleccionados (1 y 3)
umbral_cos2 <- 0.15
variables_filtradas <- rownames(acm$var$cos2)[apply(acm$var$cos2[,c(1,3)], 1, sum) >= umbral_cos2]


# Crear un gráfico solo con las variables seleccionadas
fviz_mca_var(acm, axes = c(1, 3), col.var = "cos2", repel = TRUE, 
             select.var = list(name = variables_filtradas),
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             ggtheme = theme_minimal())

El segundo plano factorial muestra cómo se separan las personas con varias comorbilidades de las que no tienen. Se puede observar que las personas con más comorbilidades son las que suelen morir más, y que las personas con cáncer y metástasis presentan una comorbilidad.

plot.MCA(acm, choix='quanti.sup',title="Supplementary quantitatives variables")
Warning: ggrepel: 19 unlabeled data points (too many overlaps). Consider
increasing max.overlaps

En el círculo de correlación se muestra cómo los índices suministrados por los doctores están altamente relacionados con la supervivencia de los pacientes, indicando que, entre más altos sean estos índices, mayor es la probabilidad de que el paciente sobreviva.

plot.MCA(acm, axes = c(1, 3),choix='quanti.sup',title="Supplementary quantitatives variables")
Warning: ggrepel: 26 unlabeled data points (too many overlaps). Consider
increasing max.overlaps

fviz_mca_var(acm, axes = c(1,2),
             choice = "mca.cor", repel = TRUE, 
             ggtheme = theme_minimal())
Warning: ggrepel: 21 unlabeled data points (too many overlaps). Consider
increasing max.overlaps

fviz_mca_var(acm, axes = c(1,3),
             choice = "mca.cor", repel = TRUE, 
             ggtheme = theme_minimal())
Warning: ggrepel: 28 unlabeled data points (too many overlaps). Consider
increasing max.overlaps

plot.MCA(acm,label ='none')

plot.MCA(acm, axes = c(1,3),label =c('none'))

Al observar la nube de individuos, se puede notar que pocos tenían 0 comorbilidades, siendo la mayoría quienes tenían una. Además, se puede ver claramente la separación entre los pacientes con cáncer y/o metástasis y aquellos sin estas condiciones.

# poner 1000}
res.HCPC<-HCPC(acm,nb.clust=3,kk=1000,consol=FALSE,graph=FALSE)
plot.HCPC(res.HCPC,choice='tree',title='Hierarchical tree')

plot.HCPC(res.HCPC,choice='map',draw.tree=FALSE,title='Factor map',ind.names=F,axes=c(1,2))

plot.HCPC(res.HCPC,choice='map',draw.tree=FALSE,title='Factor map',ind.names=F,axes=c(1,3))

Al construir el árbol, se eligen 3 grupos basándose en el diagrama de barras del dendrograma.

round(res.HCPC$desc.var$category$`1`,3)
                          Cla/Mod Mod/Cla Global p.value v.test
hospdead=hospdead_no         75.8    93.2   74.1   0.000    Inf
death=death_no               94.2    49.9   31.9   0.000    Inf
dnr=dnr_no                   78.7    84.8   64.9   0.000    Inf
ca=ca_no                     76.8    84.0   65.8   0.000    Inf
dzclass=dzclass_C.C.C        95.1    49.6   31.4   0.000    Inf
dzgroup=dzgroup_CHF          97.8    24.7   15.2   0.000   35.8
sfdm2=no(M2 and SIP pres)    80.4    44.9   33.6   0.000   28.7
dzgroup=dzgroup_COPD         93.1    16.4   10.6   0.000   24.5
dzgroup=dzgroup_C            91.3     8.5    5.6   0.000   16.2
sfdm2=SIP>=30                86.3     8.9    6.2   0.000   14.0
num.co=num.co_4+             77.9    15.6   12.1   0.000   13.2
sfdm2=adl>=4 (>=5 if sur)    76.7    12.8   10.1   0.000   11.1
adlp=adlp_0                  71.3    24.0   20.3   0.000   11.0
num.co=num.co_3              72.0    18.7   15.7   0.000   10.1
dzgroup=dzgroup_A.M.S        66.7    42.7   38.6   0.000   10.0
sfdm2=sfdm2.NA               71.9    18.3   15.4   0.000    9.8
adlp=adlp_1                  75.5     9.8    7.8   0.000    8.9
income=under $11k            65.7    34.2   31.4   0.000    7.2
adls=adls_0                  65.1    36.9   34.1   0.000    6.8
diabetes=diabetes_yes        66.6    21.6   19.5   0.000    6.2
num.co=num.co_0              67.0    14.4   12.9   0.000    5.2
adlp=adlp_2                  72.0     4.4    3.6   0.000    4.5
adlp=adlp_6                  78.6     1.4    1.1   0.000    3.9
dementia=dementia_no         60.6    97.3   96.7   0.000    3.7
adlp=adlp_5                  73.8     2.0    1.6   0.000    3.5
dzclass=dzclass_A.M          62.1    47.8   46.4   0.001    3.3
adlp=adlp_4                  71.0     1.6    1.4   0.013    2.5
sex=male                     61.2    57.2   56.3   0.029    2.2
adls=adls_1                  63.3    11.9   11.3   0.031    2.2
income=$11-$25k              62.5    17.4   16.8   0.044    2.0
sex=female                   59.0    42.8   43.7   0.029   -2.2
adls=adls_7                  53.5     2.9    3.3   0.016   -2.4
ca=ca_yes                    56.0    12.8   13.8   0.001   -3.3
dementia=dementia_yes        49.7     2.7    3.3   0.000   -3.7
income=>$50k                 53.4     6.7    7.5   0.000   -3.8
income=income.NA             56.2    30.5   32.8   0.000   -5.5
diabetes=diabetes_no         58.7    78.4   80.5   0.000   -6.2
adls=adls.NA                 54.4    28.5   31.5   0.000   -7.6
dzgroup=dzgroup_M.M          39.3     5.1    7.8   0.000  -11.7
adlp=adlp.NA                 52.9    54.4   62.0   0.000  -18.5
dzclass=dzclass_Coma         23.7     2.6    6.5   0.000  -18.8
dzgroup=dzgroup_Coma         23.7     2.6    6.5   0.000  -18.8
num.co=num.co_1              44.8    24.6   33.0   0.000  -21.0
dzgroup=dzgroup_C.C           0.0     0.0    5.6   0.000  -31.4
sfdm2=<2 mo. follow-up       25.6    14.6   34.3   0.000   -Inf
hospdead=hospdead_yes        15.8     6.8   25.9   0.000   -Inf
death=death_yes              44.3    50.1   68.1   0.000   -Inf
dnr=dnr_yes                  26.1    15.2   35.1   0.000   -Inf
ca=ca_metastatic              9.5     3.2   20.4   0.000   -Inf
dzclass=dzclass_C             0.0     0.0   15.6   0.000   -Inf
dzgroup=dzgroup_L.C           0.0     0.0   10.0   0.000   -Inf

Predominan los pacientes menos graves o sin complicaciones fatales, con una baja mortalidad hospitalaria (hospdead_no, death_no). Estos pacientes presentan una alta prevalencia de enfermedades crónicas controladas, como insuficiencia cardíaca congestiva (dzgroup_CHF), EPOC (dzgroup_COPD) y otras condiciones controladas. Además, tienen una mayor capacidad funcional y menor gravedad, con un número mayor de co-morbilidades leves a moderadas (num.co_3, num.co_4+). También es destacable la clasificación de enfermedades crónicas controladas (dzclass_C.C.C) y la prevalencia de diabetes (diabetes_yes). En cuanto al estado económico, un porcentaje considerable pertenece a los ingresos bajos, con valores por debajo de $11k.No se encuentran pacientes con enfermedades terminales ni decisiones de no reanimar (dnr_no).

round(res.HCPC$desc.var$category$`2`,3)
                          Cla/Mod Mod/Cla Global p.value v.test
sfdm2=<2 mo. follow-up      60.68   86.61   34.3   0.000    Inf
hospdead=hospdead_yes       78.31   84.46   25.9   0.000    Inf
death=death_yes             35.16   99.63   68.1   0.000    Inf
dnr=dnr_yes                 61.19   89.35   35.1   0.000    Inf
adlp=adlp.NA                35.84   92.41   62.0   0.000   36.7
dzclass=dzclass_A.M         37.95   73.31   46.4   0.000   29.2
dzclass=dzclass_Coma        74.50   20.29    6.5   0.000   27.1
dzgroup=dzgroup_Coma        74.50   20.29    6.5   0.000   27.1
dzgroup=dzgroup_M.M         60.67   19.74    7.8   0.000   21.8
ca=ca_yes                   44.01   25.18   13.8   0.000   16.8
dzgroup=dzgroup_A.M.S       33.34   53.56   38.6   0.000   16.3
dementia=dementia_yes       48.65    6.58    3.3   0.000    9.3
adls=adls_7                 39.87    5.48    3.3   0.000    6.2
income=income.NA            27.77   37.84   32.8   0.000    5.8
num.co=num.co_0             30.84   16.59   12.9   0.000    5.7
sex=female                  26.71   48.58   43.7   0.000    5.3
adls=adls_6                 32.75    6.03    4.4   0.000    4.1
race=O                      26.65   23.31   21.0   0.003    3.0
diabetes=diabetes_yes       26.49   21.53   19.5   0.007    2.7
adls=adls.NA                25.43   33.32   31.5   0.035    2.1
diabetes=diabetes_no        23.43   78.47   80.5   0.007   -2.7
ca=ca_no                    23.15   63.44   65.8   0.007   -2.7
race=W                      23.34   76.69   79.0   0.003   -3.0
adlp=adlp_6                 11.22    0.50    1.1   0.001   -3.2
num.co=num.co_3             20.70   13.48   15.7   0.001   -3.2
income=>$50k                18.71    5.85    7.5   0.001   -3.5
income=$11-$25k             20.56   14.35   16.8   0.000   -3.5
income=$25-$50k             19.68    9.51   11.6   0.000   -3.6
adlp=adlp_4                  8.06    0.46    1.4   0.000   -4.6
num.co=num.co_4+            18.36    9.23   12.1   0.000   -4.8
sex=male                    21.95   51.42   56.3   0.000   -5.3
adlp=adlp_5                  6.71    0.46    1.6   0.000   -5.6
adlp=adlp_3                  6.67    0.46    1.6   0.000   -5.6
adls=adls_0                 19.95   28.34   34.1   0.000   -6.6
adlp=adlp_2                  7.23    1.10    3.6   0.000   -8.2
sfdm2=adl>=4 (>=5 if sur)   13.43    5.62   10.1   0.000   -8.4
dzgroup=dzgroup_C            8.66    2.01    5.6   0.000   -9.2
dementia=dementia_no        23.20   93.42   96.7   0.000   -9.3
ca=ca_metastatic            13.40   11.38   20.4   0.000  -12.6
sfdm2=SIP>=30                3.37    0.87    6.2   0.000  -14.0
dzgroup=dzgroup_COPD         6.93    3.06   10.6   0.000  -14.7
adlp=adlp_1                  3.94    1.28    7.8   0.000  -15.2
dzgroup=dzgroup_C.C          0.00    0.00    5.6   0.000  -16.9
sfdm2=sfdm2.NA               5.86    3.75   15.4   0.000  -19.4
dzgroup=dzgroup_L.C          0.00    0.00   10.0   0.000  -22.9
dzgroup=dzgroup_CHF          2.09    1.32   15.2   0.000  -24.7
adlp=adlp_0                  3.57    3.02   20.3   0.000  -26.5
dzclass=dzclass_C            0.00    0.00   15.6   0.000  -29.2
dzclass=dzclass_C.C.C        4.89    6.40   31.4   0.000  -32.0
sfdm2=no(M2 and SIP pres)    1.90    2.65   33.6   0.000   -Inf
hospdead=hospdead_no         5.04   15.54   74.1   0.000   -Inf
death=death_no               0.28    0.37   31.9   0.000   -Inf
dnr=dnr_no                   3.94   10.65   64.9   0.000   -Inf

Las características principales de este grupo están asociadas a pacientes críticos, con una alta mortalidad (death_yes, hospdead_yes) y una alta frecuencia de condiciones terminales, como coma (dzclass_Coma) o intubación reciente (sfdm2=<2 mo. follow-up). Además, presentan una mayor proporción de pacientes con órdenes de no reanimar (dnr_yes). En términos de gravedad funcional, muchos presentan dependencia severa o carecen de datos funcionales (adlp.NA). También se observa una mayor proporción de pacientes con cáncer avanzado (ca_metastatic). En cuanto a los aspectos socioeconómicos, se destaca una distribución homogénea entre los diferentes niveles de ingresos.

round(res.HCPC$desc.var$category$`3`,3)
                          Cla/Mod Mod/Cla Global p.value v.test
ca=ca_metastatic           77.072  100.00  20.41   0.000    Inf
dzclass=dzclass_C         100.000   99.16  15.60   0.000    Inf
dzgroup=dzgroup_L.C       100.000   63.41   9.97   0.000    Inf
dzgroup=dzgroup_C.C       100.000   35.75   5.62   0.000    Inf
num.co=num.co_1            30.206   63.41  33.02   0.000   25.8
death=death_yes            20.513   88.83  68.11   0.000   19.8
hospdead=hospdead_no       19.185   90.36  74.08   0.000   16.6
diabetes=diabetes_no       17.879   91.48  80.47   0.000   12.4
adlp=adlp_0                25.149   32.47  20.31   0.000   11.9
income=>$50k               27.924   13.34   7.51   0.000    8.5
dementia=dementia_no       16.199   99.65  96.75   0.000    8.2
adls=adls.NA               20.126   40.29  31.49   0.000    7.7
sfdm2=sfdm2.NA             22.286   21.79  15.38   0.000    7.0
income=$25-$50k            22.233   16.41  11.61   0.000    5.9
dnr=dnr_no                 17.360   71.65  64.91   0.000    5.9
race=W                     16.674   83.73  78.98   0.000    4.9
sfdm2=no(M2 and SIP pres)  17.739   37.92  33.62   0.000    3.7
adlp=adlp_3                27.333    2.86   1.65   0.000    3.6
adlp=adlp_1                20.534   10.20   7.81   0.000    3.5
sex=male                   16.820   60.20  56.29   0.001    3.3
adlp=adlp_2                20.783    4.82   3.65   0.013    2.5
sfdm2=Coma or Intub         2.439    0.07   0.45   0.009   -2.6
adls=adls_1                12.803    9.22  11.32   0.005   -2.8
sex=female                 14.322   39.80  43.71   0.001   -3.3
adls=adls_6                 9.429    2.65   4.43   0.000   -3.8
sfdm2=SIP>=30              10.284    4.05   6.19   0.000   -3.8
sfdm2=<2 mo. follow-up     13.705   29.89  34.30   0.000   -3.9
adls=adls_7                 6.645    1.40   3.31   0.000   -4.8
race=O                     12.173   16.27  21.02   0.000   -4.9
sfdm2=adl>=4 (>=5 if sur)   9.825    6.29  10.06   0.000   -5.4
dnr=dnr_yes                12.707   28.35  35.09   0.000   -5.9
dementia=dementia_yes       1.689    0.35   3.25   0.000   -8.2
num.co=num.co_3             7.298    7.26  15.65   0.000  -10.3
income=under $11k           9.422   18.79  31.36   0.000  -11.6
dzclass=dzclass_Coma        1.846    0.77   6.55   0.000  -11.6
dzgroup=dzgroup_Coma        1.846    0.77   6.55   0.000  -11.6
diabetes=diabetes_yes       6.862    8.52  19.53   0.000  -12.4
dzgroup=dzgroup_C           0.000    0.00   5.58   0.000  -13.2
num.co=num.co_4+            3.727    2.86  12.08   0.000  -13.4
adlp=adlp.NA               11.257   44.34  61.95   0.000  -14.7
dzgroup=dzgroup_M.M         0.000    0.00   7.82   0.000  -15.8
num.co=num.co_0             2.124    1.75  12.93   0.000  -16.3
hospdead=hospdead_yes       5.847    9.64  25.92   0.000  -16.6
dzgroup=dzgroup_COPD        0.000    0.00  10.62   0.000  -18.6
death=death_no              5.510   11.17  31.89   0.000  -19.8
ca=ca_yes                   0.000    0.00  13.75   0.000  -21.4
dzgroup=dzgroup_CHF         0.072    0.07  15.23   0.000  -22.4
dzclass=dzclass_C.C.C       0.035    0.07  31.43   0.000  -34.3
ca=ca_no                    0.000    0.00  65.84   0.000   -Inf
dzclass=dzclass_A.M         0.000    0.00  46.42   0.000   -Inf
dzgroup=dzgroup_A.M.S       0.000    0.00  38.60   0.000   -Inf

Las características principales de este grupo están asociadas a pacientes con cáncer avanzado y alta gravedad, con una alta prevalencia de cáncer metastásico (ca_metastatic) y una clasificación severa de enfermedades (dzclass_C y dzgroup_L.C). A pesar de la gravedad de su condición, algunos pacientes mantienen una mayor capacidad funcional residual (adlp_0, num.co_1). En cuanto a los aspectos socioeconómicos, se observa una distribución hacia ingresos elevados (income >$50k). Además, se destaca una menor proporción de comorbilidades como insuficiencia cardíaca y EPOC (dzgroup_CHF, dzgroup_COPD).