library("plyr")
source("cargar_datos.R")
library("ggplot2")
nombre1 = "FRANCISCO JAVIER SALFATE GARCÉS"
nombre2 = "FRANCISCO JAVIER SALFATE GARCÉS"
datos = cargar_datos(nombre1, nombre2)
knitr::kable(head(datos[,2:ncol(datos)]))
| diagnostico | comorbilidad | sexo | prom_edad | ds_edad | egreso | DE | freq |
|---|---|---|---|---|---|---|---|
| 3rd Degree Sideburns | Alien DNA | Femenino | 43 | 1.68 | Alta | 130 | 25 |
| 3rd Degree Sideburns | Alien DNA | Femenino | 66 | 4.83 | Fallecido(a) | 167 | 15 |
| 3rd Degree Sideburns | Alien DNA | Masculino | 49 | 2.21 | Alta | 3 | 34 |
| 3rd Degree Sideburns | Alien DNA | Masculino | 56 | 3.26 | Fallecido(a) | 162 | 11 |
| 3rd Degree Sideburns | Alien DNA | Otro | 25 | 0.44 | Alta | 90 | 7 |
| 3rd Degree Sideburns | Alien DNA | Otro | 89 | 0.88 | Fallecido(a) | 132 | 2 |
Corresponde a la enfermedad diagnosticada al paciente. Es cualitativa, nominal y politómica.
Corresponde a (Según el centro de Políticas de Salud de Manitoba en 2003) aquellas condiciones médicas que aumentan el riesgo de muerte de un paciente (Aparte de la razón principal por la que se encuentra en el hospital). Es cualitativa, nominal y politómica.
Corresponde al sexo biológico de un paciente. Es cualitativa, nominal y politómica.
Corresponde al promedio de edad de los pacientes, Es cuantitativa, ratio y discreta.
Corresponde a la desviación estándar de la edad. Es cuantitativa, ratio y continua.
Corresponde a la clasificación del egreso de un paciente del hospital. Es cualitativa, nominal y dicotómica.
Corresponde al total de días de estadía de un paciente en el hospital. Es cuantitativa, ratio y discreta.
Corresponde a la frecuencia (o ocurrencia) de una cierta condición de paciente. Es cuantitativa, ratio y discreta.
total = 0
total_fallecidos = 0
i = 1
while (i < nrow(datos)){
if(datos[i, 7] == "Fallecido(a)"){
total_fallecidos = total_fallecidos + datos[i, 9]
}
i = i + 1
}
i = 1
while (i < nrow(datos)){
total = total + datos[i, 9]
i = i + 1
}
probabilidadFallecimiento = total_fallecidos/total
total_alta = 0
i = 1
while (i < nrow(datos)){
if(datos[i, 7] == "Alta"){
total_alta = total_alta + datos[i, 9]
}
i = i + 1
}
tasa_mortalidad = (total_fallecidos*100) / total_alta
cat("La probabilidad de fallecimiento en el establecimiento hospitalario es", probabilidadFallecimiento)
## La probabilidad de fallecimiento en el establecimiento hospitalario es 0.2957296
cat("\nLa tasa de mortalidad del establecimiento hospitalario es", tasa_mortalidad)
##
## La tasa de mortalidad del establecimiento hospitalario es 41.99091
diagnosticos = unique(datos[2])
lista_diagnosticos = c()
# Se genera un vector con todos los diagnosticos
for (i in 1:nrow(diagnosticos)){
lista_diagnosticos <- append(lista_diagnosticos, diagnosticos[i,1])
}
hombres_por_diagnostico = c()
mujeres_por_diagnostico = c()
otros_por_diagnostico = c()
hombres_fallecidos_por_diagnostico = 0
mujeres_fallecidas_por_diagnostico = 0
otros_fallecidos_por_diagnostico = 0
hombres_atendidos = c()
mujeres_atendidas = c()
otros_atendidos = c()
hombres_atendidos_por_diagnostico = 0
mujeres_atentidas_por_diagnostico = 0
otros_atendidos_por_diagnostico = 0
# Se calculan los atendidos por cada sexo
for (i in 1:length(lista_diagnosticos)){
for(j in 1:nrow(datos)){
if ((datos[j, 4] == "Masculino") && (datos[j, 7] == "Alta") && (datos[j, 2] == lista_diagnosticos[i])){
hombres_atendidos_por_diagnostico = hombres_atendidos_por_diagnostico + datos[j, 9]
}
if ((datos[j, 4] == "Femenino") && (datos[j, 7] == "Alta") && (datos[j, 2] == lista_diagnosticos[i])){
mujeres_atentidas_por_diagnostico = mujeres_atentidas_por_diagnostico + datos[j, 9]
}
if ((datos[j, 4] == "Otro") && (datos[j, 7] == "Alta") && (datos[j, 2] == lista_diagnosticos[i])){
otros_atendidos_por_diagnostico = otros_atendidos_por_diagnostico + datos[j, 9]
}
}
hombres_atendidos = append(hombres_atendidos, hombres_atendidos_por_diagnostico)
mujeres_atendidas = append(mujeres_atendidas, mujeres_atentidas_por_diagnostico)
otros_atendidos = append(otros_atendidos, otros_atendidos_por_diagnostico)
hombres_atendidos_por_diagnostico = 0
mujeres_atentidas_por_diagnostico = 0
otros_atendidos_por_diagnostico = 0
}
# Se calculan los fallecidos por cada sexo
for (i in 1:length(lista_diagnosticos)){
for (j in 1:nrow(datos)){
if ((datos[j, 4] == "Masculino") && (datos[j, 7] == "Fallecido(a)") && (datos[j, 2] == lista_diagnosticos[i])){
hombres_fallecidos_por_diagnostico = hombres_fallecidos_por_diagnostico + datos[j, 9]
}
if ((datos[j, 4] == "Femenino") && (datos[j, 7] == "Fallecido(a)") && (datos[j, 2] == lista_diagnosticos[i])){
mujeres_fallecidas_por_diagnostico = mujeres_fallecidas_por_diagnostico + datos[j, 9]
}
if ((datos[j,4] == "Otro") && (datos[j, 7] == "Fallecido(a)") && (datos[j, 2] == lista_diagnosticos[i])){
otros_fallecidos_por_diagnostico = otros_fallecidos_por_diagnostico + datos[j, 9]
}
}
hombres_por_diagnostico = append(hombres_por_diagnostico, hombres_fallecidos_por_diagnostico)
mujeres_por_diagnostico = append(mujeres_por_diagnostico, mujeres_fallecidas_por_diagnostico)
otros_por_diagnostico = append(otros_por_diagnostico, otros_fallecidos_por_diagnostico)
otros_fallecidos_por_diagnostico = 0
mujeres_fallecidas_por_diagnostico = 0
hombres_fallecidos_por_diagnostico = 0
}
diagnostico_letal_hombre = lista_diagnosticos[which.max(hombres_por_diagnostico)]
diagnostico_letal_mujer = lista_diagnosticos[which.max(mujeres_por_diagnostico)]
diagnostico_letal_otro = lista_diagnosticos[which.max(otros_por_diagnostico)]
prob_hombre = hombres_por_diagnostico[which.max(hombres_por_diagnostico)]/hombres_atendidos[which.max(hombres_por_diagnostico)]
prob_mujer = mujeres_por_diagnostico[which.max(mujeres_por_diagnostico)]/mujeres_atendidas[which.max(mujeres_por_diagnostico)]
prob_otros = otros_por_diagnostico[which.max(otros_por_diagnostico)]/otros_atendidos[which.max(otros_por_diagnostico)]
cat("El diagnóstico más letal para los hombres es:", diagnostico_letal_hombre, "con una cantidad de fallecidos de", hombres_por_diagnostico[which.max(hombres_por_diagnostico)], "y una probabilidad de fallecimiento de", prob_hombre, "\n")
## El diagnóstico más letal para los hombres es: Golf Stones con una cantidad de fallecidos de 132 y una probabilidad de fallecimiento de 0.5789474
cat("El diagnóstico más letal para las mujeres es:", diagnostico_letal_mujer, "con una cantidad de fallecidos de", mujeres_por_diagnostico[which.max(mujeres_por_diagnostico)], "y una probabilidad de fallecimiento de", prob_mujer, "\n")
## El diagnóstico más letal para las mujeres es: The Squits con una cantidad de fallecidos de 125 y una probabilidad de fallecimiento de 0.4882812
cat("El diagnóstico más letal para otros es:", diagnostico_letal_otro, "con una cantidad de fallecidos de", otros_por_diagnostico[which.max(otros_por_diagnostico)], "y una probabilidad de fallecimiento de", prob_otros)
## El diagnóstico más letal para otros es: Sweaty Palms con una cantidad de fallecidos de 37 y una probabilidad de fallecimiento de 0.6491228
# Se crean abreviaciones para los diagnósticos, esto sacrifica un poco la facilidad de entender lo que trata de decir el gráfico, pero es la mejor manera ya que utilizar directamente los nombres de los diagnósticos lo hace ilegible
simbolos_str = c("3DS", "BH", "BW", "CN", "CA", "DI", "FB", "GE", "GS", "GR", "HP", "IL", "I", "ILS", "KB", "KC", "RN", "SI", "SR", "SP", "TS", "T", "TP", "UC", "US")
# Gráfico de muertes por diagnóstico de hombres
data_graph = data.frame(lista_diagnosticos, hombres_por_diagnostico)
graph = ggplot(data = data_graph, aes(x = simbolos_str, y = hombres_por_diagnostico))
graph = graph + geom_bar(stat = "identity", fill = "red")
graph = graph + theme_bw() + ggtitle("Gráfico de fallecimientos por diagnóstico en hombres")
graph = graph + xlab("Diagnósticos") + ylab("Cantidad de fallecimientos")
plot(graph)
# Gráfico de muertes por diagnóstico de mujeres
data_graph = data.frame(lista_diagnosticos, mujeres_por_diagnostico)
graph = ggplot(data = data_graph, aes(x = simbolos_str, y = mujeres_por_diagnostico))
graph = graph + geom_bar(stat = "identity", fill = "red")
graph = graph + theme_bw() + ggtitle("Gráfico de fallecimientos por diagnóstico en mujeres")
graph = graph + xlab("Diagnósticos") + ylab("Cantidad de fallecimientos")
plot(graph)
# Gráfico de muertes por diagnóstico de otros
data_graph = data.frame(lista_diagnosticos, otros_por_diagnostico)
graph = ggplot(data = data_graph, aes(x = simbolos_str, y = otros_por_diagnostico))
graph = graph + geom_bar(stat = "identity", fill = "red")
graph = graph + theme_bw() + ggtitle("Gráfico de fallecimientos por diagnóstico en otros")
graph = graph + xlab("Diagnósticos") + ylab("Cantidad de fallecimientos")
plot(graph)
comorbilidad = unique(datos[3])
lista_comorbilidad = c()
# Se genera un vector con todas las comorbilidades
for (i in 1:nrow(comorbilidad)){
lista_comorbilidad <- append(lista_comorbilidad, comorbilidad[i,1])
}
adultos_fallecidos_por_comorbilidad = c()
adultos_totales_por_comorbilidad = c()
letalidades_por_comorbilidad = c()
cantidad_adultos_fallecidos = 0
cantidad_adultos_totales = 0
letalidad = 0
# Se calculan los pacientes y fallecidos por cada comorbilidad
for (i in 1:length(lista_comorbilidad)){
for (j in 1:nrow(datos)){
if ((datos[j, 5] > 18) && (datos[j, 7] == "Fallecido(a)") && (datos[j, 3] == lista_comorbilidad[i])){
cantidad_adultos_fallecidos = cantidad_adultos_fallecidos + datos[j, 9]
}
if ((datos[j, 5] > 18) && (datos[j, 3] == lista_comorbilidad[i])){
cantidad_adultos_totales = cantidad_adultos_totales + datos[j, 9]
}
}
adultos_fallecidos_por_comorbilidad = append(adultos_fallecidos_por_comorbilidad, cantidad_adultos_fallecidos)
adultos_totales_por_comorbilidad = append(adultos_totales_por_comorbilidad, cantidad_adultos_totales)
cantidad_adultos_totales = 0
cantidad_adultos_fallecidos = 0
}
for (i in 1:length(lista_comorbilidad)){
letalidad = (adultos_fallecidos_por_comorbilidad[i]/adultos_totales_por_comorbilidad[i])
letalidades_por_comorbilidad = append(letalidades_por_comorbilidad, letalidad)
letalidad = 0
}
comorbilidad_mas_letal = lista_comorbilidad[which.max(letalidades_por_comorbilidad)]
cat("La comorbilidad con mayor probabilidad de aparición en adultos fallecidos es:", comorbilidad_mas_letal, "\n")
## La comorbilidad con mayor probabilidad de aparición en adultos fallecidos es: Jellyitis
cat("Con una probabilidad de aparición de:", letalidades_por_comorbilidad[which.max(letalidades_por_comorbilidad)])
## Con una probabilidad de aparición de: 0.3119748
data_graph = data.frame(lista_comorbilidad, letalidades_por_comorbilidad)
graph = ggplot(data = data_graph, aes(x = lista_comorbilidad, y = letalidades_por_comorbilidad))
graph = graph + geom_bar(stat = "identity", fill = "red")
graph = graph + theme_bw() + ggtitle("Gráfico de probabilidades de fallecimiento por comorbilidad en adultos")
graph = graph + xlab("Comorbilidades") + ylab("Probabilidad de fallecimiento")
plot(graph)
muertes_por_diagnostico = c()
pacientes_por_diagnostico = c()
cantidad_muertos_por_diagnostico = 0
cantidad_pacientes_por_diagnostico = 0
letalidades_por_diagnostico = c()
# Se calculan los fallecidos y pacientes por cada diagnostico
for (i in 1:length(lista_diagnosticos)){
for (j in 1:nrow(datos)){
if ((datos[j, 7] == "Fallecido(a)") && (datos[j, 2] == lista_diagnosticos[i])){
cantidad_muertos_por_diagnostico = cantidad_muertos_por_diagnostico + datos[j, 9]
}
if ((datos[j, 2] == lista_diagnosticos[i])){
cantidad_pacientes_por_diagnostico = cantidad_pacientes_por_diagnostico + datos[j, 9]
}
}
muertes_por_diagnostico = append(muertes_por_diagnostico, cantidad_muertos_por_diagnostico)
pacientes_por_diagnostico = append(pacientes_por_diagnostico, cantidad_pacientes_por_diagnostico)
cantidad_muertos_por_diagnostico = 0
cantidad_pacientes_por_diagnostico = 0
}
letalidad = 0
# Se calculan las letalidades
for (i in 1:length(lista_diagnosticos)){
letalidad = (muertes_por_diagnostico[i]/pacientes_por_diagnostico[i]) * 100
letalidades_por_diagnostico = append(letalidades_por_diagnostico, letalidad)
letalidad = 0
}
N=sample(seq(5,50),1)
m = sum(muertes_por_diagnostico)
n = sum(pacientes_por_diagnostico) - sum(muertes_por_diagnostico)
k = 100
# Corresponde a una distribución hipergeometrica
probabilidad = dhyper(N, m, n, k)
cat("La probabilidad de que si el próximo año se hospitalizan 100 personas con esa patología, N de ellas fallezcan es:", probabilidad)
## La probabilidad de que si el próximo año se hospitalizan 100 personas con esa patología, N de ellas fallezcan es: 0.001395229
Se puede concluir que el establecimiento hospitalario va por un camino un poco “turbulento”, ya que se pueden notar que las tasas de letalidad se ven un poco altas si consideramos una tasa de letalidad “moderada” entre 15% y 30%, pero al menos es sabido que la probabilidad de que fallezcan 100 personas con la patología más letal es considerablemente baja.
letalidades_por_diagnostico
## [1] 30.10883 28.43792 28.22086 30.40712 29.64427 29.55607 29.50617 32.65565
## [9] 32.42925 29.18239 26.44110 29.00552 29.86842 28.79377 30.61224 28.51852
## [17] 30.61481 28.57143 28.59008 28.69148 29.44712 28.66162 31.97452 31.28019
## [25] 28.17746
pacientes_totales = 0
estadia_todos = 0
for (i in 1:nrow(datos)){
estadia_todos = estadia_todos + (datos[i, 8] * datos[i, 9]) # Ya que una frecuencia de datos[i, 9] pacientes se quedó datos[i, 8} días
pacientes_totales = pacientes_totales + datos[i, 9]
}
promedio = estadia_todos/pacientes_totales
cat("El promedio de DE del establecimiento hospitalario es:", promedio)
## El promedio de DE del establecimiento hospitalario es: 99.099
# Se busca la patología más frecuente
patologia_mas_frecuente = lista_diagnosticos[which.max(pacientes_por_diagnostico)]
# Se busca a aquellos menores de 18 años que padecen esta patologia
child = datos[(datos$diagnostico == patologia_mas_frecuente & datos$prom_edad+datos$ds_edad < 18 & datos$DE > 30 & datos$egreso == "Alta"),]
estadia_child = 0
for (i in 1:nrow(child)){
estadia_child = estadia_child + child[i,8]*child[i,9]
}
# Se promedia la estadía de los pacientes con el total de pacientes
prom = estadia_child/sum(child[,9])
# Se calcula finalmente 1 - P(X <= 30)
prob = 1 - pnorm(30, mean = prom, sd = 0.2)
cat("La probabilidad de que un paciente pediátrico sea dado de alta de la patología más frecuente después de 30 días de estada es:", prob)
## La probabilidad de que un paciente pediátrico sea dado de alta de la patología más frecuente después de 30 días de estada es: 1
Entre las patologías y comorbilidades presentes, no poseo ninguna, pero asumiendo que poseo alguna se tiene lo siguiente:
Entonces de la siguiente manera, eligiré un diagnóstico al azar y supondremos que lo padezco
# Se elige un diagnóstico al azar
diagnostico_random = sample(lista_diagnosticos, 1)
# Se busca a aquellos pacientes que posean este diagnóstico, que hayan pasado menos de 10 días en el hospital y que hayan sido dados de alta
pacientes_diag_random = datos[(datos$diagnostico == diagnostico_random & datos$DE < 10 && datos$egreso == "Alta"),]
estadia_total = 0
for (i in 1:nrow(pacientes_diag_random)){
estadia_total = estadia_total + pacientes_diag_random[i,8]*pacientes_diag_random[i,9]
}
# Se hace uso de un pequeño control de errores para evitar el caso donde pacientes_diag_random tenga 0 resultados y por ende se retorne numeric(0), lo cual no nos entrega un resultado que tenga alguna interpretación.
probabilidad = 0
if(nrow(pacientes_diag_random) != 0){
prom = estadia_total/sum(pacientes_diag_random[,9])
# Se calcula P(X < 10)
probabilidad = pnorm(10, mean = prom, sd = 0.2)
}
cat("Al ser diagnosticado con", diagnostico_random)
## Al ser diagnosticado con Chronic Nosehair
cat("\nSe tiene la siguiente probabilidad de ser dado de alta antes de 10 días de estadía:", probabilidad)
##
## Se tiene la siguiente probabilidad de ser dado de alta antes de 10 días de estadía: 0
Teniendo en cuenta estudios realizados sobre establecimientos hospitalarios en Chile, se debe notar que el promedio de días de estada para hospitales de 6.8 y para clínicas es de 4.1, estas dos cifras se encuentran distantes de lo que se puede extraer de este hospital en particular (Pero se debe tener en cuenta que estos estudios se realizaron en Chile y puede darse otro caso distinto para otras localidades), ya que se puede observar un promedio de estada mucho menor a los anteriormente mencionados. Pero también se puede notar que para la patología más frecuente, hay un 100% de pacientes dados de alta tras 30 días, esto demostrando que teniendo el suficiente tiempo, el establecimiento hospitalario es capaz de manejar el caso más común de patologías de forma totalmente efectiva (Aunque en el contexto de una situación médica, el tiempo no es ilimitado).
# Se debe tener en cuenta a aquellos que poseen la patología con mayor probabilidad de aparición y fueron dados de alta
vivos = sum(datos[(datos$diagnostico == patologia_mas_frecuente & datos$egreso == "Alta"), 9])
# Se debe tener en cuenta que el caso a observar debe ser de cuatro pacientes, por lo tanto la probabilidad corresponderá a 4/vivos
prob = 4/vivos
cat("La probabilidad de que aquellos cuatro pacientes dados de alta hayan tenido la patología con mayor probabilidad de aparición es:", prob)
## La probabilidad de que aquellos cuatro pacientes dados de alta hayan tenido la patología con mayor probabilidad de aparición es: 0.006633499
# Se utilizará una distribución de Poisson
# N aleatorio entre 5 y 50
N = sample(seq(5,50),1)
# Ya que se atiende a un promedio de treinta pacientes
prob = 1 - ppois(N, lambda = 30)
cat("La probabilidad de que a la siguiente hora se atienda como mínimo a N pacientes es:", prob)
## La probabilidad de que a la siguiente hora se atienda como mínimo a N pacientes es: 0.9870673
data_graph = data.frame(seq(1,50), dpois(seq(1,50), 30))
graph = ggplot(data = data_graph, aes(x = seq(1,50), y = dpois(seq(1,50), 30)))
graph = graph + geom_bar(stat = "identity", fill = "red")
graph = graph + theme_bw() + ggtitle("Probabilidad de que a la siguiente hora se atienda como mínimo a N pacientes")
graph = graph + xlab("N") + ylab("Probabilidad")
plot(graph)