Justificacion de R Studio como herramienta

  1. Es gratuito
  2. La comunidad de R es extensa y activa
  3. Es la plataforma ideal para publicar software estadistico
  4. Sus paquetes se encuentran debidamente documentados
  5. Es aceptado en todos los ambitos en donde se trabaja con datos
  6. El IDE de R es bastante completo
  7. Cuenta con una gran diversidad de paquetes (graficas, modelos, etc.)
  8. Se puede para crear documentos dinamicos
  9. R es el lenguaje de programacion estadistico mas poderoso del mundo
  10. El core de R es ligero

Cargar las librerias necesarias

library(ggplot2) 
library(dplyr) 
## Warning: package 'dplyr' was built under R version 3.6.1
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(xlsx) 
library(plyr)
## -------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## -------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var

Descripcion del archivo

Para determinar la capacidad discriminante de la escala PIM3 se partio de la informacion contenida en un archivo .CSV el cual pesa 459 KM y tiene una dimension de 395 filas x 32 columnas. Este archivo tuvo un proceso previo de limpieza de la información.

setwd("C:/Users/Javier/Downloads/Alexandro") 
leer <- read.xlsx("DATASET.xlsx", colNames = TRUE, sheetIndex = 1)  
dim(leer) 
## [1] 395  32
str(leer) 
## 'data.frame':    395 obs. of  32 variables:
##  $ conteo         : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ Meses          : num  2 1 12 11 6 2 2 1 1 1 ...
##  $ anios          : num  0.2 0.1 1 0.9 0.5 0.2 0.2 0.1 0.1 0.1 ...
##  $ anios_rango    : Factor w/ 5 levels "1 - 3 Años",..: 5 5 1 5 5 5 5 5 5 5 ...
##  $ sexo           : Factor w/ 2 levels "H","M": 1 1 1 2 1 1 1 1 2 2 ...
##  $ peso.          : num  2.65 2.5 7.5 8.4 12 4.4 4 4.8 2.5 3.5 ...
##  $ PRISM          : num  1 19 22 24 28 25 14 NA 41 20 ...
##  $ Mortalidad     : num  15.3 29.9 44.3 54 72.8 ...
##  $ ventilacion    : num  15 10 NA 5 NA NA NA NA 150 90 ...
##  $ FC             : num  115 110 154 156 190 124 190 175 132 109 ...
##  $ PAM            : num  45 48 56 50 70 70 NA NA 111 76 ...
##  $ pres.sis       : num  64 66 73 68 98 99 NA NA 132 98 ...
##  $ gluc           : num  263 152 206 198 51 64 NA NA 153 205 ...
##  $ Creat          : num  0.4 0.4 0.4 0.3 1 0.4 NA NA 0.7 2 ...
##  $ Modo           : Factor w/ 9 levels "Ac","AC","Alto ",..: 2 2 2 2 2 2 6 6 2 2 ...
##  $ po2            : num  169 96 150 145 53 106 NA NA 39 35.7 ...
##  $ hco3           : num  18.9 25 21 22 15 23 NA NA 19 12.4 ...
##  $ eb             : num  -5.6 2.1 -2.2 -1.7 -8.9 -1.9 NA NA -19 -11 ...
##  $ pafi           : num  193 241 250 136 262 176 NA NA 303 404 ...
##  $ rec_cirugia    : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ dx_ar          : Factor w/ 3 levels "0","1","Ninguno ": NA NA NA NA NA NA NA NA NA NA ...
##  $ Dx.MAR         : Factor w/ 5 levels "0","1","3","5",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ Tipo.de.Ingreso: num  NA 2 2 NA 2 NA 2 2 2 2 ...
##  $ dias.estancia  : num  NA 7 NA NA NA NA NA NA NA 114 ...
##  $ Egreso         : num  0 1 0 0 2 0 0 0 1 1 ...
##  $ causa.muerte   : Factor w/ 96 levels "/","Bronquolitis, SDRA severo, choque septico. ",..: 1 1 1 1 81 1 1 1 1 1 ...
##  $ PIM3.mortalidad: num  31 68.7 45.7 9.3 32 ...
##  $ PIM3           : num  31 69 46 9 32 13 3 3 43 38 ...
##  $ Fallecio       : num  0 0 0 0 1 0 0 0 0 0 ...
##  $ Riesgo         : num  3 3 3 3 3 3 1 1 3 3 ...
##  $ Fallece        : num  1 1 1 1 1 1 0 0 1 1 ...
##  $ colNames       : logi  TRUE TRUE TRUE TRUE TRUE TRUE ...

Analisis de edad

El 69% de pacientes tienen menos de un ano de edad

leer$anios <- as.double(leer$anios)
edad_temp <- as.factor(ifelse(leer$anios < 1, "menor 1 año", 
                              ifelse(leer$anios >= 1 & leer$anios < 3, "1 - 3 años",
                                     ifelse(leer$anios >= 3 & leer$anios < 6, "3 - 6 años",
                                            ifelse(leer$anios >= 6 & leer$anios < 9, "6 - 9 años",
                                                   ifelse(leer$anios >= 9, "9 - 12 años",""))))))
ggplot(data.frame(edad_temp), aes(x=edad_temp)) + geom_bar(fill = "royalblue3") + xlab("Rango de edad")+ ylab("Frecuencia") + ggtitle("Cantidad de pacientes por rango de edad") 

Tipo de egreso

El 63% de pacientes salen del hospital con vida mientra que un 35% de ellos fallece (el 2% restante no ha tenido egreso aun)

egreso <- ifelse(leer$Egreso == 0, "sin egreso",
       ifelse(leer$Egreso == 1, "vivo", "fallecido"))
ggplot(data.frame(egreso), aes(x=egreso)) + geom_bar(fill = "slateblue") + xlab("Motivo de Egreso")+ ylab("Frecuencia") + ggtitle("Cantidad de pacientes por motivo de egreso")

Sexo

El 56% de pacientes son hombres y el 44% restante mujeres

sexo <- ifelse(as.factor(as.data.frame(leer$sexo)[complete.cases(as.data.frame(leer$sexo)),]) == "H", "Hombre", "Mujer")
ggplot(data.frame(sexo), aes(x=sexo)) + geom_bar(fill = "green4") + xlab("Sexo")+ ylab("Frecuencia") + ggtitle("Sexo de los pacientes")

Analisis descriptivo de variables que conforman la escala PIM3

Para cada una de las variables numericas que conforman la escala se muestra: minimo, maximo, cuartil 1, cuartil 3, media y mediana.

FC <- summary(
  as.numeric(
    as.data.frame(
      leer$FC)[complete.cases(
        as.data.frame(leer$FC)),]))

PAM <- summary(
  as.numeric(
    as.data.frame(
      leer$PAM)[complete.cases(
        as.data.frame(leer$PAM)),]))

pre.sis <- summary(as.numeric(as.data.frame(leer$pres.sis)[complete.cases(as.data.frame(leer$pres.sis)),]))
gluc <- summary(as.numeric(as.data.frame(leer$gluc)[complete.cases(as.data.frame(leer$gluc)),]))
creat <- summary(as.numeric(as.data.frame(leer$Creat)[complete.cases(as.data.frame(leer$Creat)),]))
po2 <- summary(as.numeric(as.data.frame(leer$po2)[complete.cases(as.data.frame(leer$po2)),]))
hco3 <- summary(as.numeric(as.data.frame(leer$hco3)[complete.cases(as.data.frame(leer$hco3)),]))
eb <- summary(as.numeric(as.data.frame(leer$eb)[complete.cases(as.data.frame(leer$eb)),]))
pafi <- summary(as.numeric(as.data.frame(leer$pafi)[complete.cases(as.data.frame(leer$pafi)),]))
rbind(FC, PAM, pre.sis, gluc, creat, po2, hco3, eb, pafi)
##          Min. 1st Qu. Median       Mean 3rd Qu.  Max.
## FC       60.0 115.000 138.00 137.053165  156.50 250.0
## PAM      24.0  53.000  66.00  66.168975   77.00 127.0
## pre.sis  41.0  77.000  90.00  89.097276  100.00 151.0
## gluc      2.3  87.000 108.00 125.560477  138.00 595.0
## creat     0.2   0.390   0.46   0.588489    0.59   8.1
## po2      17.8  58.000 108.00 114.922597  165.00 377.0
## hco3      3.2  16.725  19.95  19.913212   22.80 225.0
## eb      -28.0  -7.000  -3.50  -4.447668   -1.20  25.0
## pafi     22.3 140.000 192.00 202.851524  263.00 505.0

Principales causas de deceso

De quienes fallecieron, el 22% fue por Choque Septico + otra enfermedad (distinta de Neumonia) mientras que un 12% fallecieron debido a Choque Septico + Neumonia.

causas <- as.factor(subset(leer, leer$Fallecio == 1)$causa.muerte)

causas <-  revalue(causas, 
c(
  '/' = '.Otros',
  'Bronquolitis, SDRA severo, choque septico. ' = '.Choque septico + Otros',
  'Catarata Congenita, DPE Severo ERGE' = '.Otros',
  'Choque cardiogenico' = '.Otros',
  'Choque cardiogenico, endo carditis bacteriana.' = '.Otros',
  'Choque cardiogenico, neumonia bacteriana. ' = '.Otros',
  'Choque Cardiogenico, Post calostomia, CCA.' = '.Otros',
  'Choque Dengue, Dengue hemoragico. ' = '.Otros',
  'Choque distribuitivo, IRA, hipoglicemia e hipokalemia' = '.Otros',
  'Choque distributivo, SDA, TSV, PCR' = '.Otros',
  'Choque refractario a aminas, FMO' = '.Otros',
  'choque septico' = '.Choque septico',
  'Choque septico ' = '.Choque septico',
  'Choque septico refractario aminas' = '.Choque septico + Otros',
  'Choque septico, aciclosis metabolica, IRA' = '.Choque septico + Otros',
  'Choque septico, CID, neumonia bacteriana' = '.Choque septico + Neumonia',
  'Choque septico, falla renal. ' = '.Choque septico + Otros',
  'Choque septico, FMO' = '.Choque septico',
  'Choque septico, FMO, CID' = '.Choque septico + Otros',
  'Choque septico, HTPPRN, Post PCR' = '.Choque septico + Otros',
  'Choque septico, IRA poliurico' = '.Choque septico + Otros',
  'choque septico, IRA, Sx. Comvulsivo, hipernatremia, DPE severo' = '.Choque septico + Otros',
  'choque septico, LLA, Sepsis nosocomial, FMO' = '.Choque septico + Otros',
  'Choque septico, Meningitis. ' = '.Choque septico + Otros',
  'Choque Septico, neumonia bacteriana, Post PCR. CID' = '.Choque septico + Neumonia',
  'Choque septico, neumonia bacteriana.' = '.Choque septico + Neumonia',
  'choque septico, neumonia neonatal, hernia. ' = '.Choque septico + Neumonia',
  'Choque septico, neumonia viral.' = '.Choque septico + Neumonia',
  'Choque septico, NTA, IRA' = '.Choque septico + Otros',
  'Choque septico, SDRA, FMO' = '.Choque septico + Otros',
  'Choque septico, SDRA.' = '.Choque septico + Otros',
  'Choque septico, sepsis neonatal' = '.Choque septico + Otros',
  'Choque septico, sepsis neonatal tardia-' = '.Choque septico + Otros',
  'Choque septico, sepsis neonatal temprana, EMH G-III' = '.Choque septico + Otros',
  'Choque septico, sepsis nosocomial' = '.Choque septico + Otros',
  'Choque septico, sespsis nosocomial' = '.Choque septico + Otros',
  'Choque septico, Tb pulmonar y miliar, SDRA' = '.Choque septico + Otros',
  'Choque septico, Varicela s/infectada.' = '.Choque septico + Otros',
  'Chque refractario aminas, CID,FMO' = '.Otros',
  'CID, Choque septico, HPPRN.' = '.Choque septico + Otros',
  'CID/TCE G III' = '.Otros',
  'Correcion de Onfalocele, choque septico' = '.Choque septico + Otros',
  'Edema cerebral' = '.Otros',
  'Falla hepatica, choque septico' = '.Choque septico + Otros',
  'FMO, Cheque refractario aminas, CID' = '.Otros',
  'FMO, CID, choque refractario aminas' = '.Otros',
  'FMO; SDRA' = '.Otros',
  'HPPRN' = '.Otros',
  'Infeccion SNC, Sepsis nosocomial, ' = '.Sepsis nosocomial',
  'Neumonia' = '.Neumonia',
  'neumonia bacteriana, choque cardiogenico. ' = '.Neumonia + Otros',
  'Neumonia bacteriana, choque septico' = '.Choque septico + Neumonia',
  'Neumonia bacteriana, choque septico, DPE severo, PCI' = '.Choque septico + Neumonia',
  'Neumonia bacteriana, choque septico,. ' = '.Choque septico + Neumonia',
  'neumonia bacteriana, choque septico.' = '.Choque septico + Neumonia',
  'Neumonia bacteriana, choque septico. ' = '.Choque septico + Neumonia',
  'Neumonia bacteriana, diabetes, PCR' = '.Neumonia + Otros',
  'neumonia bacteriana, falla ventilatoria' = '.Neumonia + Otros',
  'Neumonia bacteriana, sepsis grave' = '.Choque septico + Neumonia',
  'neumonia bacteriana, sepsis neonatal tardia' = '.Choque septico + Neumonia',
  'neumonia complicada' = '.Neumonia',
  'Neumonia neonatal' = '.Neumonia',
  'Neumonia neonatal, choque septico' = '.Choque septico + Neumonia',
  'Neumonia neonatal, sepsis nosocomial, HTPPRN' = '.Neumonia + Otros',
  'Neumonia nosocomial' = '.Neumonia',
  'Neumonia, escape via aerea, sepsis neonatal. ' = '.Neumonia + Otros',
  'Neuroblastoma' = '.Otros',
  'otro' = '.Otros',
  'Post PCR #3, Neumonia bacteriana, FMO' = '.Neumonia + Otros',
  'Post PCR 12, hemorragia Intraparenquimatosa, edema cerebral,herniacion subfalcina' = '.Otros',
  'Prematurez, neumonia neonatal.' = '.Otros',
  'SAM, APN, HTPRN' = '.Otros',
  'SDRA, FMO, LLA' = '.Otros',
  'SDRA, Neumonia bacteriana, PCR, Choque septico.' = '.Choque septico + Neumonia',
  'SDRA, TCE G. III, Edema Cerebral, Hemorragia Intraparenquimatosa' = '.Otros',
  'Sepsis grave, choque retractorio, CID' = '.Choque septico + Otros',
  'sepsis nosocomial' = '.Sepsis nosocomial',
  'Sepsis nosocomial ' = '.Sepsis nosocomial',
  'Sepsis nosocomial, choque septico.' = '.Choque septico + Otros',
  'Sepsis nosocomial, CID, FMO' = '.Sepsis nosocomial',
  'Sepsis nosocomial, neumonia nosocomial. ' = '.Neumonia + Otros',
  'Sepsis nosocomial, Quilotorax, choque septico' = '.Choque septico + Otros',
  'sepsis nosocomial, SDRA' = '.Sepsis nosocomial',
  'Sepsis nosocomial.' = '.Sepsis nosocomial',
  'Sepsis nsocomial, fungemia' = '.Sepsis nosocomial',
  'Septis nosocomial, choque septico' = '.Choque septico + Otros',
  'Shock Refractario aminas, sepsis nosocomial, FMO' = '.Sepsis nosocomial',
  'Sx. Nefrotico, IRA, edema agudo del pulmon' = '.Otros',
  'TCE grado III, edema cerebral' = '.Otros',
  'TCE grado III, edema cerebral, Post PCR, SDRA' = '.Otros',
  'TCE III, TSV' = '.Otros'
))

causas2 <- causas
causas2 <- revalue(causas2, 
        c(
          '.Sepsis nosocomial' = 'SepsisNosoc',
          '.Choque septico' = 'ChoqueSep',
          '.Choque septico + Otros' = 'ChoqueSep+Otro',
          'Sepsis nosocomial' = 'SepsisNosoc',
          '.Otros' = 'Otro',
          'Choque septico' = 'ChoqueSep',
          '.Neumonia' = 'Neumo',
          'CHOQUE SEPTICO, SEPSIS NEONATAL' = 'ChoqueSep+Otro',
          '.Neumonia + Otros' = 'Neumo',
          '.Choque septico + Neumonia' = 'ChoqueSep+Neumo',
          'neumonia bacteriana, choque septico' = 'ChoqueSep+Neumo',
          'neumonia nosocomial' = 'Neumo'
        ))

ggplot(data.frame(causas2), aes(x=causas2)) + geom_bar(fill = "firebrick4") + xlab("Causa")+ ylab("Frecuencia") + ggtitle("Principales causas de fallecimiento")

Correlacion y significancia de variables

La escala PIM3 se interpretara de la siguiente manera: 1-3 riesgo bajo, 4-6 riesgo medio y >= 7 riesgo alto.

Se estima que los pacientes con valor >= 7 en dicha escala van a fallecer por lo tanto el valor para la variable Fallece sera 1 (0 en caso contrario).

Una correlacion de Pearson alta (cercana a -1 o cercana a +1) indica una relacion entre dos variables. Por otra parte, un P-Value <= 0.05 significa que la variable independiente explica significativamente los cambios en la variable dependiente.

Se medira la correlacion de pearson y el P-Value contra la variable binaria (0,1) que indica el pronostico respecto a si el paciente va a fallecer, esto debido a que se necesita evaluar la capacidad predictiva de la escala.

Para cada variable de la escala se muestra el porcentaje de valores en blanco, el P-Value y la Correlacion de Pearson.

Las variables que logran explicar si el paciente fallecera son: glucosa, hco3 y pafi.

Y <- leer$Fallece
X <- leer$FC
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "FC"
FC <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$PAM
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "PAM"
PAM <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$pres.sis
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "pres.sis"
pres.sis <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$gluc
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "gluc"
gluc <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$Creat
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "Creat"
Creat <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$po2
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "po2"
po2 <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$hco3
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "hco3"
hco3 <- cbind("hco3", blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$eb
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "eb"
eb <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$pafi
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "pafi"
pafi <- cbind(nombre, blanco, correlacion, pvalue)

Y <- leer$Fallece
X <- leer$rec_cirugia
T <- as.data.frame(cbind(Y,X))
T <- T[complete.cases(T),]
blanco <- 1 - round(nrow(T) / 395,2) 
correlacion <- round(cor.test(Y,X)$estimate,2)
pvalue <- round(cor.test(Y,X)$p.value,2)
nombre <- "rec.ciru"
rec_cirugia <- cbind(nombre, blanco, correlacion, pvalue)

rbind(FC, PAM, pres.sis, gluc, Creat, po2, hco3, eb, pafi, rec_cirugia)
##     nombre     blanco correlacion pvalue
## cor "FC"       "0"    "-0.02"     "0.7" 
## cor "PAM"      "0.09" "-0.04"     "0.46"
## cor "pres.sis" "0.35" "-0.04"     "0.53"
## cor "gluc"     "0.05" "0.1"       "0.06"
## cor "Creat"    "0.08" "0.06"      "0.22"
## cor "po2"      "0.03" "0.02"      "0.66"
## cor "hco3"     "0.02" "-0.13"     "0.01"
## cor "eb"       "0.02" "-0.07"     "0.2" 
## cor "pafi"     "0.17" "-0.11"     "0.04"
## cor "rec.ciru" "0"    "0.07"      "0.19"

Correlacion PIM3 ~ PRISM

La correlacion entre las escalas PIM3 y PRISM es 0.25 lo cual se considera baja.

No es posible hacer una prueba T para ver si son distribuciones estadísticamente significativas ya que al ser binarias no darian positivo en una prueba de normalidad.

A <- leer$PIM3.mortalidad
B <- leer$PRISM
T <- as.data.frame(cbind(A,B))
T <- T[complete.cases(T),]
round(cor(T$A, T$B),2)
## [1] 0.25

Capacidad discriminante de la escala PIM3

Accuracy: 0.57

Puede interpretarse como que la escala PIM3 logra predecir correctamente 57 de cada 100 casos.

R <- leer$Fallecio
P <- leer$Fallece
tabla <- table(R,P)
round(sum(diag(tabla)) / sum(tabla),2)
## [1] 0.57

AUC: 0.70 GINI: 0.4

El AUC (Area Under Curve) debe estar entre .70-.80 para que el modelo sea aceptable y entre .80 - .90 para que el modelo se considere bueno.

Un AUC de 0.70 (como lo es en este caso) significa que el modelo (dicho en otras palabras) es un 20% mejor para predecir que una moneda en donde las probabilidades son (0.50) y (1 - 0.50), es decir, 50% y 50%.

Por otra parte, un GINI aceptable deberia ser de al menos 0.40 (deseablemente de 0.50). El GINI no es mas que (2 x AUC) - 1.

Se puede concluir que la escala PIM3 no tiene una capacidad discriminante satisfactoria o aceptable, sobre todo considerando que corresponde al ambito medico.

round(as.numeric(roc(P,R)$auc),2)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## [1] 0.7
round((2 * as.numeric(roc(P,R)$auc)) - 1,2)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## [1] 0.41
plot(roc(P,R))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases

Por ultimo, la escala tiene un TPR de 0.97 y un TNR de 0.35. Esto significa que la escala logro predecir correctamente cada 97 de 100 pacientes que iban a fallecer pero en contraste solamente logro predecir 35 de cada 100 pacientes que egresarian del hospital con vida.

Retomando que se considera que el paciente va a fallecer si el valor devuelto por la escala PIM3 es >= 7…

summary(leer$PIM3)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    7.00   14.00   20.79   27.50   85.00

Podemos ver que la media de la escala es de 20.79 y la mediana de 14.00 lo cual significa que el modelo/escala esta sobre estimando, es decir, tiende a arrojar valores bastante altos, razon por la cual pudo predecir casi todos los que iban a fallecer (TPR) pero fallo en predecir a los que no lo iban a hacer (TNR).

En conclusion:

  1. La escala PIM3 no logra predecir con certeza si el paciente va a fallecer, sobre todo considerando que el instrumento corresponde al ambito medico 2, La escala esta sobre estimando, es decir, la tendencia es que indique que el paciente si va a llegar a fallecer
  2. La escala pudo haberse aplicado incorrectamente para el presente estudio y/o la misma se encuentra obsoleta y es necesario recalibrarla
  3. Podria pensarse en el metodo de regresion logistica para crear una escala/score que prediga correctamente si el paciente va a fallecer o no para lo cual se aprovecharia las herramientas y metodos para el aprendizaje de maquina.
TPR <- tabla[2,2] / (tabla[2,1] + tabla[2,2])
TNR <- tabla[1,1] / (tabla[1,1] + tabla[1,2])
round(TPR,2)
## [1] 0.97
round(TNR,2)
## [1] 0.35