# 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)))Analisis Descriptivo Multivariado
Procesamiento de variables
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).