Introducción

El desempeño de los hospitales depende de diversos factores como la infraestructura disponible, el personal médico y el tiempo de atención a los pacientes. Estos elementos pueden influir tanto en la cantidad de pacientes atendidos como en los resultados de salud.

En este trabajo se analiza una base de datos hospitalaria del año 2024 para estudiar la relación entre los recursos hospitalarios y los resultados de atención. Para ello se utilizan modelos de regresión lineal simple, regresión lineal múltiple y regresión logística (Logit), con el fin de evaluar cómo variables como las camas disponibles, el número de médicos y los días de estancia hospitalaria influyen en los egresos hospitalarios y en la probabilidad de mortalidad después de 48 horas.

Base de datos

La base de datos utilizada corresponde a información hospitalaria del año 2024 que está compuesta de 626 registros y 131 variables. Se analizan variables relacionadas con infraestructura hospitalaria, personal médico y resultados de atención como egresos hospitalarios y fallecimientos.

#install.packages(c("DiagrammeR", "ggplot2", "readxl"))

library(DiagrammeR)
library(ggplot2)
library(readxl)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#choose.files()
datos <- read_excel("C:\\Users\\SClient\\Desktop\\Metodos cuantitativos\\camas_hospitalarias_2024.xlsx")

Problemática general

El problema consiste en analizar cómo los recursos hospitalarios influyen en los resultados de atención médica en los hospitales. Los establecimientos de salud presentan diferencias en la disponibilidad de camas, personal médico y tiempo de atención, lo cual puede afectar tanto la cantidad de pacientes atendidos como los resultados de salud. Por ello, resulta necesario analizar la relación entre estos recursos y el desempeño hospitalario.

1.Regresión lineal simple

Problema

Determinar si la disponibilidad de camas hospitalarias influye en la cantidad de egresos hospitalarios.

¿Existe una relación directa entre el número de camas disponibles y los egresos hospitalarios?

Objetivo

Analizar si la disponibilidad de camas influye en el número de egresos hospitalarios.

Variables

  • Y: totegres (egresos hospitalarios)

  • X: camas_disp (camas disponibles)

    modelo_simple <- lm(totegres ~ camas_disp, data = datos)
    #togeter= β0+β1camas_disp
    summary(modelo_simple)
    ## 
    ## Call:
    ## lm(formula = totegres ~ camas_disp, data = datos)
    ## 
    ## Residuals:
    ##     Min      1Q  Median      3Q     Max 
    ## -9957.1  -345.0   -90.5   296.5  8478.4 
    ## 
    ## Coefficients:
    ##             Estimate Std. Error t value Pr(>|t|)    
    ## (Intercept)   2.2046    59.0422   0.037     0.97    
    ## camas_disp   47.6813     0.8146  58.535   <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## Residual standard error: 1259 on 624 degrees of freedom
    ## Multiple R-squared:  0.8459, Adjusted R-squared:  0.8457 
    ## F-statistic:  3426 on 1 and 624 DF,  p-value: < 2.2e-16

    Interpretación: El coeficiente estimado para la variable camas disponibles es 47.68, lo que indica que por cada cama adicional disponible, el número de egresos hospitalarios aumenta en promedio aproximadamente en 48 egresos.

    El p-value (< 2e-16) es menor a 0.01, lo que indica que la relación entre camas disponibles y egresos hospitalarios es estadísticamente significativa.

    Además, el R² = 0.8459 indica que aproximadamente el 84.6% de la variación en los egresos hospitalarios es explicada por el número de camas disponibles.

    ggplot(datos, aes(x = camas_disp, y = totegres)) +
      geom_point(color = "red") +
      geom_smooth(method = "lm", se = TRUE) +
      labs(
        title = "Relación entre camas disponibles y egresos hospitalarios",
        x = "Camas disponibles",
        y = "Total de egresos"
      )
    ## `geom_smooth()` using formula = 'y ~ x'

    A medida que aumenta el número de camas disponibles, también aumenta el número de egresos hospitalarios.

    cat_cfg <- data.frame(
      nombre  = c("Infraestructura","Capacidad hospitalaria","Gestión hospitalaria"),
      x_union = c(3,6,3),
      y_label = c(4,0,-4),
      color   = c("#2980b9","#27ae60","#c0392b"),
      lado    = c("arriba","arriba","abajo")
    )
    
    sub_cfg <- data.frame(
      categoria = c(rep("Infraestructura",3),
                    rep("Capacidad hospitalaria",3),
                    rep("Gestión hospitalaria",3)),
      causa = c(
        "Número de camas","Equipamiento hospitalario","Espacio hospitalario",
        "Camas disponibles","Demanda de pacientes","Uso de camas",
        "Planificación médica","Organización hospitalaria","Administración"
      ),
      rank = rep(1:3,3)
    )
    
    sub_cfg <- left_join(sub_cfg,cat_cfg,by=c("categoria"="nombre"))
    
    ggplot()+
    theme_void()+
    geom_segment(aes(x=0,xend=9,y=0,yend=0),linewidth=1.5)+
    geom_segment(data=cat_cfg,
    aes(x=0.5,xend=x_union,y=y_label,yend=0,color=color),
    linewidth=1.5,show.legend=FALSE)+
    geom_label(data=cat_cfg,
    aes(x=x_union,y=y_label,label=nombre,fill=color),
    color="white",show.legend=FALSE)+
    geom_text(data=sub_cfg,
    aes(x=x_union-1.7,y=y_label+rank*0.7,label=causa),
    size=3)+
    annotate("rect",xmin=9,xmax=11,ymin=-1,ymax=1,fill="#e74c3c")+
    annotate("text",x=10,y=0,label="EGRESOS\nHOSPITALARIOS",color="white",fontface="bold")

2. Regresión lineal múltiple

Problema

El desempeño hospitalario no depende únicamente de la infraestructura. También puede verse afectado por otros factores como:

  • número de médicos

  • tiempo de estancia de los pacientes

  • recursos hospitalarios disponibles.

Si se analiza solo una variable, se podría obtener una explicación incompleta del fenómeno.

Variables

Y:totegr​es (egresos hospitalarios)

X₁:camas_disp (camas disponibles)

X₂:dotmedic (número de médicos)

X₃:dia_estad (días de estancia hospitalaria)

modelo_multiple <- lm(totegres ~ camas_disp + dotmedic + dia_estad, data = datos)
#togeter= β0+β1camas_disp+β2dotmedic+β3dia_estad+ε
summary(modelo_multiple)
## 
## Call:
## lm(formula = totegres ~ camas_disp + dotmedic + dia_estad, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11275.5   -340.1   -129.1    280.3   7823.1 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.446e+02  6.451e+01   3.791 0.000165 ***
## camas_disp  2.232e+01  3.316e+00   6.733 3.79e-11 ***
## dotmedic    1.445e+01  5.016e+00   2.880 0.004112 ** 
## dia_estad   7.688e-02  9.993e-03   7.694 5.62e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1203 on 622 degrees of freedom
## Multiple R-squared:  0.8599, Adjusted R-squared:  0.8592 
## F-statistic:  1273 on 3 and 622 DF,  p-value: < 2.2e-16

Interpretación: Las camas disponibles, el número de médicos y los días de estancia influyen significativamente en los egresos hospitalarios. En promedio, una cama adicional aumenta los egresos en 22.32 pacientes y un médico adicional en 14.45, mientras que los días de estancia tienen un efecto positivo menor. Además, todas las variables son estadísticamente significativas (p < 0.01) y el modelo explica el 86% de la variación de los egresos hospitalarios (R² = 0.8599).

ggplot(datos, aes(x = dotmedic, y = totegres)) +
      geom_point() +
      geom_smooth(method = "lm", se = TRUE) +
      labs(
        title = "Relación entre número de médicos y egresos hospitalarios",
        x = "número de médicos",
        y = "Total de egresos"
      )
## `geom_smooth()` using formula = 'y ~ x'

ggplot(datos, aes(x = dia_estad, y = totegres)) +
      geom_point() +
      geom_smooth(method = "lm", se = TRUE) +
      labs(
        title = "Relación entre días de estancia hospitalaria y egresos hospitalarios",
        x = "días de estancia hospitalaria",
        y = "Total de egresos"
      )
## `geom_smooth()` using formula = 'y ~ x'

Se observa una relación positiva:a medida que aumenta el número de médicos, también tiende a aumentar el número de egresos hospitalarios. A mayor número de días de estancia hospitalaria,mayor es el número de egresos hospitalarios.

Diagrama

cat_cfg$nombre <- c("Infraestructura","Personal médico","Atención hospitalaria")

sub_cfg$causa <- c(
"Camas disponibles","Capacidad hospitalaria","Infraestructura",
"Número de médicos","Disponibilidad médica","Cobertura médica",
"Días de estancia","Duración hospitalización","Atención pacientes"
)

ggplot()+
theme_void()+
geom_segment(aes(x=0,xend=9,y=0,yend=0),linewidth=1.5)+
geom_segment(data=cat_cfg,
aes(x=0.5,xend=x_union,y=y_label,yend=0,color=color),
linewidth=1.5,show.legend=FALSE)+
geom_label(data=cat_cfg,
aes(x=x_union,y=y_label,label=nombre,fill=color),
color="white",show.legend=FALSE)+
geom_text(data=sub_cfg,
aes(x=x_union-1.7,y=y_label+rank*0.7,label=causa),
size=3)+
annotate("rect",xmin=9,xmax=11,ymin=-1,ymax=1,fill="#e74c3c")+
annotate("text",x=10,y=0,label="EGRESOS\nHOSPITALARIOS",color="white",fontface="bold")

3. Modelo Logit

Problema

El problema consiste en analizar qué factores hospitalarios influyen en la probabilidad de que ocurra mortalidad hospitalaria después de 48 horas de hospitalización.

Factores como la capacidad hospitalaria, la disponibilidad de médicos y la duración de la estancia hospitalaria pueden afectar el riesgo de fallecimiento de los pacientes.

¿Cómo influyen los recursos hospitalarios en la probabilidad de registrar fallecimientos hospitalarios después de 48 horas?

Analizar cómo las camas disponibles, el número de médicos y los días de estancia hospitalaria influyen en la probabilidad de mortalidad hospitalaria después de 48 horas.

Variable dependiente

Y: fallecido48

Variables independientes

X₁: camas_disp
X₂: dotmedic
X₃: dia_estad

datos$muerte48 <- ifelse(datos$falmas48 > 0, 1, 0)
modelo_logit <- glm(muerte48~ camas_disp + dotmedic + dia_estad,
                    data = datos,
                    family = binomial)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(modelo_logit)
## 
## Call:
## glm(formula = muerte48 ~ camas_disp + dotmedic + dia_estad, family = binomial, 
##     data = datos)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.389e+00  1.778e-01  -7.810 5.74e-15 ***
## camas_disp  -6.927e-03  1.268e-02  -0.546    0.585    
## dotmedic     1.541e-01  3.197e-02   4.821 1.43e-06 ***
## dia_estad    4.557e-04  7.489e-05   6.085 1.16e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 867.59  on 625  degrees of freedom
## Residual deviance: 570.01  on 622  degrees of freedom
## AIC: 578.01
## 
## Number of Fisher Scoring iterations: 8

Interpretación: Los resultados muestran que el número de médicos y los días de estancia hospitalaria influyen significativamente en la probabilidad de mortalidad después de 48 horas, mientras que las camas disponibles no resultan estadísticamente significativas (p = 0.585) en este modelo.

datos$prob <- predict(modelo_logit, type="response")

ggplot(datos, aes(x=camas_disp, y=prob))+
geom_point()+
labs(title="Probabilidad de fallecimientos según camas disponibles",
x="Camas disponibles",
y="Probabilidad estimada")

La probabilidad de mortalidad tiende a aumentar ligeramente a medida que aumenta el número de camas, aunque los puntos presentan bastante dispersión.

datos$prob <- predict(modelo_logit, type="response")

ggplot(datos, aes(x = dotmedic, y = prob)) +
  geom_point(color = "green") +
  labs(
    title = "Probabilidad de fallecimientos según número de médicos",
    x = "Número de médicos",
    y = "Probabilidad estimada"
  )

La probabilidad de mortalidad tiende a aumentar a medida que aumenta el número de medicos.

ggplot(datos, aes(x = dia_estad, y = prob)) +
  geom_point(color = "blue") +
  labs(
    title = "Probabilidad de fallecimientos según días de estancia",
    x = "Días de estancia hospitalaria",
    y = "Probabilidad estimada"
  )

La probabilidad de mortalidad aumenta a medida que aumenta el número de dias de estancia hopitararia.

Odds

#Odds = razón entre la probabilidad de que ocurra un evento y la probabilidad de que no ocurra.
exp(coef(modelo_logit))
## (Intercept)  camas_disp    dotmedic   dia_estad 
##   0.2494428   0.9930973   1.1666315   1.0004558
or <- exp(coef(modelo_logit))[-1]

or_df <- data.frame(
  Variable = c("Camas disponibles","Número de médicos","Días de estancia"),
  OR = or
)

library(ggplot2)

ggplot(or_df, aes(x = Variable, y = OR)) +
  geom_point(size = 3, color = "blue") +
  geom_hline(yintercept = 1, linetype = "dashed") +
  labs(
    title = "Odds Ratios del modelo Logit",
    x = "Variables",
    y = "Odds Ratio"
  ) +
  theme_minimal()

La gráfica muestra los Odds Ratios de las variables del modelo Logit. Valores mayores a 1 indican un aumento en la probabilidad del evento, mientras que valores cercanos a 1 indican un efecto pequeño.

cat_cfg$nombre <- c("Infraestructura hospitalaria",
                    "Personal médico",
                    "Condición del paciente")

sub_cfg$causa <- c(
"Camas disponibles","Capacidad hospitalaria","Infraestructura",
"Número de médicos","Atención médica","Disponibilidad médica",
"Días de estancia","Gravedad del paciente","Seguimiento clínico"
)

ggplot()+
theme_void()+
geom_segment(aes(x=0,xend=9,y=0,yend=0),linewidth=1.5)+
geom_segment(data=cat_cfg,
aes(x=0.5,xend=x_union,y=y_label,yend=0,color=color),
linewidth=1.5,show.legend=FALSE)+
geom_label(data=cat_cfg,
aes(x=x_union,y=y_label,label=nombre,fill=color),
color="white",show.legend=FALSE)+
geom_text(data=sub_cfg,
aes(x=x_union-1.7,y=y_label+rank*0.7,label=causa),
size=3)+
annotate("rect",xmin=9,xmax=11,ymin=-1,ymax=1,fill="#e74c3c")+
annotate("text",x=10,y=0,label="MORTALIDAD\nHOSPITALARIA",color="white",fontface="bold")

Conclusión

Los resultados muestran que los recursos hospitalarios influyen en el desempeño de los hospitales. En particular, el número de camas disponibles presenta una relación positiva con los egresos hospitalarios.

El modelo de regresión múltiple evidencia que las camas disponibles, el número de médicos y los días de estancia hospitalaria influyen significativamente en el número de egresos. Además, el modelo Logit muestra que el número de médicos y los días de estancia tienen efecto en la probabilidad de mortalidad hospitalaria después de 48 horas.

Recomendaciones