library("plyr")          #Previamente descargue install.packages("plyr)
source("cargar_datos.R") #Descargue y guarde en la carpeta principal de su respuesta

nombre1= "CARLOS ESTEBAN MORA GALAZ"
nombre2= "JAVIER ANDRES COLLAO CALLPA"

datos = cargar_datos(nombre1,nombre2)
knitr::kable(head(datos[,2:ncol(datos)])) #kable pertenece a la biblioteca knitr
diagnostico comorbilidad sexo prom_edad ds_edad egreso DE freq
3rd Degree Sideburns Alien DNA Femenino 2 4.36 Alta 118 31
3rd Degree Sideburns Alien DNA Femenino 114 0.56 Fallecido(a) 193 9
3rd Degree Sideburns Alien DNA Masculino 118 2.47 Alta 86 22
3rd Degree Sideburns Alien DNA Masculino 88 2.02 Fallecido(a) 155 10
3rd Degree Sideburns Alien DNA Otro 104 2.83 Alta 37 5
3rd Degree Sideburns Alien DNA Otro 5 1.88 Fallecido(a) 158 2

Introduccion “PEP”

El conjunto de datos proviene de 5,000 pacientes de egresados el año 2021 desde un hospital ficticio. Cada fila corresponde al número de pacientes atendidos para cada diagnóstico principal con su respectiva comorbilidad en inglés, dividido según sexo biológico, edad, (promedio y desviación estándar), condición de egreso y días de estada en el hospital. Para evitar la herida de susceptibilidades, el listado de diagnósticos principales y comorbilidades se extrajo del videojuego Theme hospital.

Actividad 2

2.1 Descripción de cada variable del conjunto de datos según medicion y precision.

Variable Descripción Medición Precisión
diagnostico Es la determinación del estado de salud de un paciente Nominal Politómica
comorbilidad Es la señalización de uno o más transtornos Nominal Politómica
sexo Se refiere al sexo biológico de los pacientes Nominal Politómica
prom_edad Es el promedio de edad de los pacientes que han sido atendidos por el hospital Intervalo Discreta
ds_edad Se refiere a la desviación estándar de la edad o qué tan dispersa es la edad de los distintos pacientes atendidos. Intervalo Continua
egreso Nombra la forma de salida del hospital; si salió de alta o este falleció. Nominal Dicotómica
DE Es el total de días que el paciente estuvo dentro del hospital Intervalo Discreta
freq cantidad de pacientes dentro de las Patologias Intervalo Discreta

2.2 Considerando la letalidad de los/las pacientes atendidos/atendidas en su establecimiento hospitalario:

1 ¿Cuál es la probabilidad que tiene un/una paciente de fallecer en su establecimiento hospitalario? Indique la tasa de mortalidad hospitalaria de su establecimiento.
fallecidos = 0
tpacientes = 0
dealta = 0

temp= which(datos$egreso=="Fallecido(a)")
fallecidos = sum(datos$freq[temp])

temp3= which(datos$egreso=="Alta")
dealta = sum(datos$freq[temp3])

tpacientes= sum(datos$freq)

prob_mortalidad = fallecidos/tpacientes

tasa_mortalidad = (fallecidos/dealta)*100

cat("La probabilidad que tiene un/una paciente de fallecer en nuestro establecimiento hospitalario es de", prob_mortalidad, " y la tasa de mortalidad hospitalaria ", tasa_mortalidad)
## La probabilidad que tiene un/una paciente de fallecer en nuestro establecimiento hospitalario es de 0.29295  y la tasa de mortalidad hospitalaria  41.43271
2 ¿Cuál es el diagnóstico principal que tienen mayor probabilidad de fallecimiento (letalidad) en su hospital según cada sexo biológico?
fallecidosPorSexo = function(sexo){
  temp =  which(datos$sexo == sexo & datos$egreso == "Fallecido(a)")
  fallecidos = sum(datos$freq[temp])
  return(fallecidos)
}

fallecidosMujer = fallecidosPorSexo("Femenino")
fallecidosHombre = fallecidosPorSexo("Masculino")
fallecidosOtro = fallecidosPorSexo("Otro")


diagnosticolist <- split(datos, datos$diagnostico)

listaParaMaximos = function (sexo){
  i <- 1
  mylist <- c()
  while (i <= length(diagnosticolist)) {
    temp = which(diagnosticolist[[i]]$egreso == "Fallecido(a)" & diagnosticolist[[i]]$sexo == sexo)
    mylist <- c(mylist, sum(diagnosticolist[[i]]$freq[temp]))
    i <- i+1
  }
  return(mylist)
} 

maximoDiagnosticoConFallecidosMujer = max(listaParaMaximos("Femenino"))
maximoDiagnosticoConFallecidosHombre = max(listaParaMaximos("Masculino"))
maximoDiagnosticoConFallecidosOtro = max(listaParaMaximos("Otro"))


probabilidadMujer = maximoDiagnosticoConFallecidosMujer/fallecidosMujer
probabilidadHombre = maximoDiagnosticoConFallecidosHombre/fallecidosHombre
probabilidadOtro = maximoDiagnosticoConFallecidosOtro/fallecidosOtro

probabilidadMujer
## [1] 0.05251142
probabilidadHombre
## [1] 0.04835082
probabilidadOtro
## [1] 0.05328597
fallecidosPorSexo = function(sexo){
  temp =  which(datos$sexo == sexo & datos$egreso == "Fallecido(a)")
  fallecidos = sum(datos$freq[temp])
  return(fallecidos)
}

fallecidosMujer = fallecidosPorSexo("Femenino")
fallecidosHombre = fallecidosPorSexo("Masculino")
fallecidosOtro = fallecidosPorSexo("Otro")


diagnosticolist <- split(datos, datos$diagnostico)

listaParaMaximos = function (sexo){
  i <- 1
  mylist <- c()
  while (i <= length(diagnosticolist)) {
    temp = which(diagnosticolist[[i]]$egreso == "Fallecido(a)" & diagnosticolist[[i]]$sexo == sexo)
    mylist <- c(mylist, sum(diagnosticolist[[i]]$freq[temp]))
    i <- i+1
  }
  return(mylist)
} 

maximoDiagnosticoConFallecidosMujer = max(listaParaMaximos("Femenino"))
maximoDiagnosticoConFallecidosHombre = max(listaParaMaximos("Masculino"))
maximoDiagnosticoConFallecidosOtro = max(listaParaMaximos("Otro"))


probabilidadMujer = maximoDiagnosticoConFallecidosMujer/fallecidosMujer
probabilidadHombre = maximoDiagnosticoConFallecidosHombre/fallecidosHombre
probabilidadOtro = maximoDiagnosticoConFallecidosOtro/fallecidosOtro

subDataDiagnosticoConFallecidos = function (sexo) {
  
  tablaDiagnostico = matrix(c(unique(datos$diagnostico),listaParaMaximos(sexo)),nrow=length(unique(datos$diagnostico)),ncol=2)
  colnames(tablaDiagnostico)=c("diagnostico","mortalidad")
  datadiag = data.frame(tablaDiagnostico)
  rr = which.max(datadiag$mortalidad)
  return(datadiag [rr,])
  
}

 maximoDiagnosticoEnMujer = subDataDiagnosticoConFallecidos("Femenino")
 maximoDiagnosticoEnHombre = subDataDiagnosticoConFallecidos("Otro")
 maximoDiagnosticoEnOtro = subDataDiagnosticoConFallecidos("Masculino")
 
 maximoDiagnosticoEnMujer
##        diagnostico mortalidad
## 6 Discrete Itching        138
 maximoDiagnosticoEnHombre
##     diagnostico mortalidad
## 16 King Complex         30
 maximoDiagnosticoEnOtro
##            diagnostico mortalidad
## 25 Unexpected Swelling        129
3 ¿Cuál es la comorbilidad que presenta mayor probabilidad de aparición en personas adultas fallecidas en su establecimiento hospitalario?
i <- 1
mylist <- c()
comorbilidadlist <- split(datos, datos$comorbilidad)

while (i <= length(comorbilidadlist)) {
    temp44 = which(comorbilidadlist[[i]]$egreso == "Fallecido(a)" & comorbilidadlist[[i]]$sexo == "Femenino")
    mylist <- c(mylist, sum(comorbilidadlist[[i]]$freq[temp44]))
    i <- i+1
}
d = xtabs(freq~comorbilidad-egreso-sexo,datos)

mm = max(mylist)
listaParaComorbilidadMaximos = function (edad){
  i <- 1
  mylist <- c()
  while (i <= length(comorbilidadlist)) {
      temp44 = which(comorbilidadlist[[i]]$egreso == "Fallecido(a)" & comorbilidadlist[[i]]$prom_edad>=edad)
      mylist <- c(mylist, sum(comorbilidadlist[[i]]$freq[temp44]))
      i <- i+1
  }
  mylist

  return(mylist)
}
mprob = function (edad){
    prob = (max(listaParaComorbilidadMaximos(edad))/sum(listaParaComorbilidadMaximos(edad)))
  
  return(prob)
}

cat("Probabilidad de morir para las personas mayores de 18 es  : ", mprob(18))
## Probabilidad de morir para las personas mayores de 18 es  :  0.1263823
diagnosticolist <- split(datos, datos$diagnostico)
listaMuertesEnDiagnostico = function (egreso){
  i <- 1
  mylist <- c()
  while (i <= length(diagnosticolist)) {
    temp = which(diagnosticolist[[i]]$egreso == egreso)
    mylist <- c(mylist, sum(diagnosticolist[[i]]$freq[temp]))
    i <- i+1
  }
  return(mylist)
} 

listaMuertesEnDiagnostico("Fallecido(a)")
##  [1] 221 230 253 227 228 277 229 265 207 203 227 248 232 214 230 231 208 236 230
## [20] 233 237 244 235 240 274
a = listaMuertesEnDiagnostico("Fallecido(a)")
b = listaMuertesEnDiagnostico("Alta")
suma = a+b
Mortalidadtotal= (100+max(a))/sum(suma)

cat("Usando como base el diagnóstico principal con mayor probabilidad de fallecimiento (letalidad) en nuestro hospital, la probabilidad de que si el próximo año se hospitalizan 100 personas con esa patología, N de ellas fallezcan es de:", Mortalidadtotal)
## Usando como base el diagnóstico principal con mayor probabilidad de fallecimiento (letalidad) en nuestro hospital, la probabilidad de que si el próximo año se hospitalizan 100 personas con esa patología, N de ellas fallezcan es de: 0.01885
4 Usando como base el diagnóstico principal con mayor probabilidad de fallecimiento (letalidad) en su hospital: ¿cuál es la probabilidad de que si el próximo año se hospitalizan 100 personas con esa patología, N de ellas fallezcan? Mejorado
dFallecimiento = function(datos){

  diagnostico = ""
  totalMuertos = 0
  totalPersonas = 0
  probabilidadAlta = -1
  
  for(i in 1:nrow(datos)) {
    if (diagnostico == ""){
      diagnosticoFila = datos[i, 2]
      diagnostico = diagnosticoFila
    }
    diagnosticoFila = datos[i, 2]
    if (diagnosticoFila == diagnostico){
      totalPersonas = totalPersonas + datos[i, 9]
      if (datos[i,7] == "Fallecido(a)"){
        totalMuertos = totalMuertos + datos[i, 9]
      }
    }
    else{
      probabilidad = totalMuertos/totalPersonas
      i = i-1
      if (probabilidad > probabilidadAlta){
        probabilidadAlta = probabilidad
        diagnosticoMortal = diagnostico
      }
      diagnostico = diagnosticoFila
      totalPersonas = 0
      totalMuertos = 0
    }
  }
  cat("En nuestro hospital la patología con mayor letalidad es", diagnosticoMortal)
  return(probabilidadAlta)
}

MayorLetalidad = dFallecimiento(datos)
## En nuestro hospital la patología con mayor letalidad es Discrete Itching
N = sample(seq(5,50),1)
probabilidadFallecidos = dbinom(x = N, size = 100, MayorLetalidad)
cat("Si el próximo año se hospitalizan 100 personas con esa patología, la probabilidad de que ", N, "personas fallezcan es de ", probabilidadFallecidos)
## Si el próximo año se hospitalizan 100 personas con esa patología, la probabilidad de que  37 personas fallezcan es de  0.06712088

2.5¿Qué puede concluir de los resultados con relación a las características y gestión de su establecimiento hospitalario?

Nuestra tasa de mortalidad corresponde al 16% , acorde a la investigación desarrollada por Ciper :Tasa de mortalidad del sector público supera a las clínicas privadas: https://www.elmostrador.cl/dia/2020/06/22/tasa-de-mortalidad-del-sector-publico-supera-a-las-clinicas-privadas-subsecretario-zuniga-descarta-que-se-deba-a-una-diferencia-en-la-atencion/

Nuestros indices de mortalidad estarian acordes a los de un hospital publica dentro del rango: l San José muestra una tasa de 21,3%; Del Salvador, con 20,1%; la ex Posta Central, con 17,7%; el San Juan de Dios, con 18%.

2.3. Considerando la estancia de los/las pacientes atendidos/atendidas en su establecimiento hospitalario:

1 ¿Cuál es el promedio de día de estadas (DE) de su establecimiento hospitalario?
a=sum(datos[8])
b=nrow(datos)
prom=a/b

cat("El promedio de dias de estadia de nuestro hospital publico es de :", prom)
## El promedio de dias de estadia de nuestro hospital publico es de : 101.4849
2 ¿Cuál es la probabilidad de que un paciente pediátrico (menor a 18 años) sea dado de alta de la patología más frecuente después de 30 días de estada? Asuma en ambos casos una distribución normal y una desviación estándar típica de 0.2 para los DE.
comorbilidadlist <- split(datos, datos$comorbilidad)

listaParaComorbilidadMaximos = function (edad){
  i <- 1
  mylist <- c()
  while (i <= length(comorbilidadlist)) {
      temp = which(comorbilidadlist[[i]]$egreso == "Alta" & comorbilidadlist[[i]]$prom_edad<edad & comorbilidadlist[[i]]$DE>30)
      mylist <- c(mylist, sum(comorbilidadlist[[i]]$freq[temp]))
      i <- i+1
  }
  mylist

  return(mylist)
} 

a =listaParaComorbilidadMaximos(18)
b=max(a)
suma = sum(a)

probdesv= (b/suma)/pnorm(30,prom,0.2,lower.tail=FALSE)

cat("la probabilidad de que un paciente pediátrico (menor a 18 años) sea dado de alta de la patología más frecuente después de 30 días de estada es de :", probdesv)
## la probabilidad de que un paciente pediátrico (menor a 18 años) sea dado de alta de la patología más frecuente después de 30 días de estada es de : 0.1426527
3 ¿Cuál es la probabilidad de que si usted es o ustedes son hospitalizados en su establecimiento hospitalario sean dados de alta antes de los 10 días? Al igual que el ejercicio anterior, asuma una distribución normal y una desviación estándar típica de 0.2 para los DE.
nProm = sum(subset(subset(subset(datos, prom_edad==27), DE<10), egreso== "Alta")$DE * subset(subset(subset(datos, prom_edad==27), DE<10), 
            egreso== "Alta")$freq)

media = nProm/(sum(subset(datos, prom_edad==27)$freq))

cat("la probabilidad de que si somos hospitalizados en nuestro establecimiento hospitalario y seamos dados de alta antes de 10 días es de:",dnorm(10, media, 0.2))
## la probabilidad de que si somos hospitalizados en nuestro establecimiento hospitalario y seamos dados de alta antes de 10 días es de: 0
4 ¿Qué puede concluir de los resultados con relación a las características y gestión de su establecimiento hospitalario? (Ayuda)

Fuente: El Mercurio

En general, el estudio concluye que un enfermo pasa, en promedio, 6,8 días internado en un hospital y en una clínica esa espera es de 4,1 días.

Según Saldías, esto se explica porque el sector público de salud es menos eficiente que el privado.

En base al promedio dado por nuestro recinto hospitalario que fue alrededor de 99 dias, la probabilidad de ser dado de alta antes de los 10 dias es 0%.

2.4. Considerando elementos propios de la atención hospitalaria.

1 Si usted ve/ustedes ven salir de su hospital a cuatro pacientes dados de alta del hospital caminando uno tras otro: ¿cuál es la probabilidad de que todos/todas ellos/ellas hayan tenido la patología con mayor probabilidad de aparición atendida en su establecimiento?
patologiaConMasFrecuencia = function(data){
 
  diagnostico = ""
  totalPacientes = sum(data$freq)
  totalPersonas = 0
  probabilidadAlta = -1

  for(i in 1:nrow(data)) {
    if (diagnostico == ""){
      diagnosticoFila = data[i, 2]
      diagnostico = diagnosticoFila
    }
    diagnosticoFila = data[i, 2]
    
    if (diagnosticoFila == diagnostico){
      totalPersonas = totalPersonas + data[i, 9]
    }

    else{
      probabilidad = totalPersonas/totalPacientes
      i = i-1
      if (probabilidad > probabilidadAlta){
        probabilidadAlta = probabilidad
        diagnostico_frecuente = diagnostico
      }
      diagnostico = diagnosticoFila
      totalPersonas = 0
    }
  }
  return(probabilidadAlta)
}

probabilidadDiagnosticoFrecuente = patologiaConMasFrecuencia(datos)
probabilidadBinomial = dbinom(x = 4, size = 4, probabilidadDiagnosticoFrecuente)

cat("La probabilidad de que los pacientes hayan tenido la patología con mayor probabilidad de aparición es de ", probabilidadBinomial)
## La probabilidad de que los pacientes hayan tenido la patología con mayor probabilidad de aparición es de  2.825761e-06
2 Usted ha/ustedes han decidido ir al área ambulatoria de consultas médicas. Si entre todos/todas los/las especialistas médicos se está atendiendo un promedio a treinta pacientes por hora ¿cuál es la probabilidad que en la siguiente hora se atienda como mínimo a N pacientes?
N = sample(seq(5,50),1)
probabilidadAtencion = dpois(N,30) #donde 30 es la cantidad de pacientes
cat("La probabilidad de que en la siguiente hora se atienda como mínimo a ", N, " pacientes es de ", probabilidadAtencion)
## La probabilidad de que en la siguiente hora se atienda como mínimo a  38  pacientes es de  0.02416867