En general, el objetivo de la exploración de datos del VIH a través del aprendizaje no supervisado se centra en comprender cómo se relacionan entre sí las variables de una base de datos de linfocitos T CD4 y cómo evolucionan temporalmente las observaciones de cada paciente definidas por esas variables. Estas coordenadas de información se pueden utilizar para generar una hipótesis, encontrar valores atípicos en las muestras o identificar grupos de muestras que necesitan más puntos de datos.
Con mucha frecuencia se va a querer evaluar cómo esta evolucionando la terapia antiretroviral (ART) durante un periodo de tiempo con el que se cuente información estadística. Por ejemplo, en las aplicaciones, se pueden abordar las siguientes preguntas:
¿Las observaciones de cada paciente son similares entre sí?
¿Las muestras de una misma agrupación tienen señales similares con todas las observaciones de pacientes?
Para pacientes con recuentos de T CD4 similares, ¿se tiene un perfil de comportamiento a lo largo del tiempo similar?
Para responder algunas de estas interrogantes se necesitan definir métricas de distancia o similitud entre perfiles de expresión de cada paciente y usar esa métrica para encontrar agrupaciones de pacientes que sean más similares entre sí. Dada una métrica de distancia, se emplea una metodología para encontrar agrupaciones auto-similares. La agrupación es un procedimiento presente en cualquier campo que se ocupe de datos de alta dimensión, como lo es la información generada por biomarcadores dentro de un contexto clínico.
La métrica de distancia es simplemente una medida de cuán similares son las expresiones entre sí. Hay muchas opciones para las métricas de distancia y la elección de la métrica es bastante importante para la agrupación. Por ejemplo, se cuenta con observaciones de \(124\) pacientes de \(2018\) a \(2021\), y como se muestra en la Tabla 1, y se desean encontrar similitudes en función de sus recuentos de T CD4 durante el periodo de estudio.
| x1 | size | withinss | cluster |
|---|---|---|---|
| 1.522613 | 98 | 126.5418 | 1 |
| 39.050622 | 1 | 0.0000 | 2 |
| 6.916049 | 27 | 251.0462 | 3 |
La Tabla 2 devuelve métricas del modelo. Una de ellas es tot.withinss, que es la suma de cuadrados total dentro del conglomerado que se busca minimizar al realizar el conglomerado de k-medias.
| totss | tot.withinss | betweenss | iter |
|---|---|---|---|
| 2305.123 | 377.588 | 1927.535 | 2 |
Por último, se puede ver a qué agrupación pertenece cada observación en la Tabla 3.
| .cluster | 2018 cd4 | 2019 cd4 | 2021 cd4 |
|---|---|---|---|
| 1 | 525 | 738 | 708 |
| 1 | 338 | 344 | 403 |
| 1 | 648 | 736 | 522 |
| 1 | 186 | 424 | 319 |
| 1 | 462 | 256 | 701 |
| 3 | 764 | 764 | 249 |
| 3 | 52 | 8 | 55 |
| 3 | 1180 | 974 | 867 |
| 1 | 722 | 532 | 631 |
| 1 | 635 | 635 | 798 |
| 1 | 398 | 435 | 669 |
| 1 | 293 | 612 | 856 |
| 1 | 490 | 490 | 670 |
| 1 | 513 | 513 | 429 |
| 1 | 526 | 633 | 591 |
| 1 | 595 | 497 | 603 |
| 3 | 178 | 94 | 35 |
| 1 | 768 | 605 | 343 |
| 1 | 134 | 290 | 238 |
| 1 | 540 | 749 | 708 |
| 1 | 397 | 235 | 480 |
| 3 | 565 | 833 | 1485 |
| 3 | 781 | 344 | 689 |
| 1 | 376 | 376 | 813 |
| 1 | 490 | 591 | 453 |
| 3 | 121 | 643 | 634 |
| 1 | 592 | 559 | 967 |
| 3 | 339 | 592 | 1125 |
| 1 | 447 | 610 | 625 |
| 1 | 623 | 582 | 423 |
| 1 | 649 | 530 | 464 |
| 3 | 680 | 705 | 166 |
| 1 | 647 | 647 | 522 |
| 1 | 532 | 772 | 926 |
| 1 | 404 | 492 | 441 |
| 1 | 530 | 507 | 562 |
| 1 | 403 | 264 | 285 |
| 1 | 472 | 452 | 447 |
| 1 | 745 | 545 | 540 |
| 1 | 690 | 607 | 971 |
| 1 | 311 | 416 | 307 |
| 3 | 148 | 619 | 268 |
| 3 | 856 | 1484 | 1153 |
| 3 | 1022 | 935 | 908 |
| 3 | 996 | 1068 | 932 |
| 1 | 180 | 138 | 112 |
| 3 | 418 | 818 | 327 |
| 1 | 549 | 589 | 446 |
| 1 | 541 | 675 | 570 |
| 1 | 764 | 513 | 713 |
| 1 | 237 | 224 | 304 |
| 1 | 389 | 291 | 673 |
| 1 | 471 | 716 | 576 |
| 1 | 279 | 565 | 342 |
| 1 | 575 | 509 | 609 |
| 1 | 781 | 609 | 628 |
| 3 | 1037 | 924 | 565 |
| 1 | 318 | 563 | 600 |
| 1 | 306 | 608 | 611 |
| 1 | 395 | 490 | 380 |
| 1 | 210 | 150 | 163 |
| 3 | 339 | 105 | 527 |
| 1 | 552 | 602 | 749 |
| 3 | 529 | 808 | 1343 |
| 1 | 320 | 411 | 318 |
| 1 | 845 | 968 | 848 |
| 1 | 287 | 550 | 445 |
| 1 | 514 | 544 | 597 |
| 1 | 277 | 254 | 182 |
| 3 | 533 | 393 | 971 |
| 1 | 613 | 721 | 597 |
| 1 | 63 | 241 | 253 |
| 1 | 415 | 526 | 707 |
| 1 | 341 | 479 | 528 |
| 2 | 1643 | 432 | 655 |
| 3 | 344 | 569 | 1036 |
| 1 | 334 | 88 | 260 |
| 1 | 382 | 490 | 657 |
| 3 | 512 | 684 | 268 |
| 1 | 463 | 420 | 476 |
| 1 | 299 | 342 | 331 |
| 1 | 405 | 347 | 320 |
| 1 | 660 | 619 | 679 |
| 1 | 802 | 471 | 683 |
| 3 | 674 | 1001 | 873 |
| 1 | 532 | 407 | 507 |
| 1 | 419 | 423 | 454 |
| 3 | 706 | 665 | 1113 |
| 1 | 420 | 363 | 703 |
| 1 | 554 | 684 | 817 |
| 1 | 68 | 294 | 464 |
| 1 | 413 | 447 | 800 |
| 3 | 539 | 980 | 992 |
| 1 | 577 | 603 | 616 |
| 1 | 579 | 504 | 653 |
| 1 | 292 | 356 | 459 |
| 3 | 459 | 807 | 450 |
| 1 | 189 | 279 | 506 |
| 1 | 720 | 616 | 809 |
| 1 | 711 | 653 | 605 |
| 1 | 293 | 370 | 521 |
| 1 | 513 | 776 | 845 |
| 1 | 242 | 242 | 298 |
| 3 | 72 | 56 | 75 |
| 1 | 152 | 91 | 117 |
| 1 | 63 | 178 | 192 |
| 1 | 662 | 905 | 724 |
| 1 | 527 | 527 | 533 |
| 1 | 156 | 156 | 65 |
| 1 | 248 | 239 | 295 |
| 1 | 518 | 682 | 730 |
| 3 | 1098 | 777 | 1090 |
| 1 | 617 | 558 | 666 |
| 1 | 338 | 406 | 486 |
| 1 | 307 | 368 | 390 |
| 1 | 253 | 259 | 379 |
| 1 | 537 | 644 | 712 |
| 1 | 520 | 513 | 518 |
| 1 | 803 | 677 | 747 |
| 1 | 416 | 601 | 537 |
| 1 | 297 | 385 | 380 |
| 3 | 1074 | 1074 | 852 |
| 1 | 298 | 327 | 198 |
| 1 | 450 | 246 | 256 |
| 1 | 903 | 903 | 676 |
| 1 | 694 | 354 | 477 |
Y se puede visualizar qué tan bien funcionó la agrupación en los dos primeros años en la Figura 1.
Figure 1: Nube de puntos de recuento en T CD4 por número de conglomerado
2018 vs 2019
La comparación con un año de desfase al inicio del estudio (\(2018-2021\)) se visualiza en la Figura 2.
Figure 2: Nube de puntos de recuento en T CD4 por número de conglomerado
2018 vs 2021.
El comportamiento una vez iniciado el estudio durante un periodo de análisis (\(2019-2021\)) es mostrado en la Figura 3.
Figure 3: Nube de puntos de recuento en T CD4 por número de conglomerado
2019 vs 2021.
Se puede distinguir una nube de puntos con distintos niveles de dispersión, por lo que es deseable poder probar varias agrupaciones diferentes y luego encontrar la mejor. Se ajustan múltiples modelos y se extrae información de ellos en la Tabla 4.
| k | tot.withinss |
|---|---|
| 1 | 2305.12276 |
| 2 | 971.23053 |
| 3 | 377.58801 |
| 4 | 204.04221 |
| 5 | 77.04267 |
| 6 | 51.28912 |
| 7 | 34.10725 |
| 8 | 28.66945 |
| 9 | 23.72909 |
| 10 | 20.59510 |
Al contar con la suma de cuadrados total dentro del conglomerado, se grafican contra \(k\) en la Figura 4, de modo que se pueda usar el método del codo para encontrar el número óptimo de conglomerados.
Figure 4: Gráfica de codo
Se observa un codo en \(k=3\), lo que indica la creación específica para tener \(3\) agrupaciones.
## R version 4.2.3 (2023-03-15)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.2 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=es_MX.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=es_MX.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=es_MX.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=es_MX.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] kableExtra_1.3.4 knitr_1.42 yardstick_1.1.0 workflowsets_1.0.0
## [5] workflows_1.1.3 tune_1.0.1 rsample_1.1.1 recipes_1.0.5
## [9] parsnip_1.0.4 modeldata_1.1.0 infer_1.0.4 dials_1.1.0
## [13] scales_1.2.1 broom_1.0.4 tidymodels_1.0.0 magrittr_2.0.3
## [17] lubridate_1.9.2 forcats_1.0.0 stringr_1.5.0 dplyr_1.1.1
## [21] purrr_1.0.1 readr_2.1.4 tidyr_1.3.0 tibble_3.2.1
## [25] ggplot2_3.4.1 tidyverse_2.0.0 BiocStyle_2.26.0
##
## loaded via a namespace (and not attached):
## [1] bit64_4.0.5 webshot_0.5.4 httr_1.4.5
## [4] DiceDesign_1.9 tools_4.2.3 backports_1.4.1
## [7] bslib_0.4.2 utf8_1.2.3 R6_2.5.1
## [10] rpart_4.1.16 colorspace_2.1-0 nnet_7.3-17
## [13] withr_2.5.0 tidyselect_1.2.0 bit_4.0.5
## [16] compiler_4.2.3 rvest_1.0.3 cli_3.6.1
## [19] xml2_1.3.3 labeling_0.4.2 bookdown_0.33
## [22] sass_0.4.5 systemfonts_1.0.4 digest_0.6.31
## [25] svglite_2.1.1 rmarkdown_2.21 pkgconfig_2.0.3
## [28] htmltools_0.5.5 parallelly_1.35.0 lhs_1.1.6
## [31] highr_0.10 fastmap_1.1.1 rlang_1.1.0
## [34] rstudioapi_0.14 farver_2.1.1 jquerylib_0.1.4
## [37] generics_0.1.3 jsonlite_1.8.4 vroom_1.6.1
## [40] Matrix_1.5-3 Rcpp_1.0.10 munsell_0.5.0
## [43] fansi_1.0.4 GPfit_1.0-8 lifecycle_1.0.3
## [46] furrr_0.3.1 stringi_1.7.12 yaml_2.3.7
## [49] MASS_7.3-55 grid_4.2.3 parallel_4.2.3
## [52] listenv_0.9.0 crayon_1.5.2 lattice_0.20-45
## [55] splines_4.2.3 hms_1.1.3 pillar_1.9.0
## [58] future.apply_1.10.0 codetools_0.2-18 glue_1.6.2
## [61] evaluate_0.20 BiocManager_1.30.20 vctrs_0.6.1
## [64] tzdb_0.3.0 foreach_1.5.2 gtable_0.3.3
## [67] future_1.32.0 cachem_1.0.7 xfun_0.38
## [70] gower_1.0.1 prodlim_2019.11.13 viridisLite_0.4.1
## [73] class_7.3-20 survival_3.2-13 timeDate_4022.108
## [76] iterators_1.0.14 hardhat_1.2.0 lava_1.7.2.1
## [79] timechange_0.2.0 globals_0.16.2 ipred_0.9-14