Problemática de investigación

La inasistencia a citas médicas es un problema recurrente en los hospitales, que afecta la eficiencia en el uso de recursos y genera barreras en el acceso oportuno a la atención.
Pregunta de investigación: ¿Qué factores influyen en la asistencia a citas médicas y cómo impactan en la eficiencia hospitalaria?

#Cargar librerias# library(ggplot2) library(dplyr) library(readr) library(caret)

Importar base de datos

appointments <- read_csv(“C:/Users/lctor/Downloads/appointments.csv”) names(appointments)

Ver valores únicos de la columna ‘status’

unique(appointments$status)

Ver estructura de la base

str(appointments)

Contar valores faltantes por columna

colSums(is.na(appointments))

Exploración inicial

str(appointments) colSums(is.na(appointments))

Ver estructura de la base

str(appointments)

Contar valores faltantes por columna

colSums(is.na(appointments))

#ESTADISTICAS DESCRIPTIVAS# par(mfrow=c(2,2)) hist(appointments\(age, main="Distribución de Edad", col="lightblue", xlab="Edad") barplot(table(appointments\)sex), main=“Distribución por sexo”, col=“lightgreen”) barplot(table(appointments\(age_group), main="Distribución por grupos de edad", col="lightyellow") barplot(table(appointments\)status), main=“Estado de las citas médicas”, col=“lightpink”)

#Modelo matemático: Regresión logística binaria# appointments <- appointments %>% mutate(no_show = ifelse(status == “did not attend”, 1, 0))

modelo_logistico <- glm(no_show ~ age + sex + waiting_time, data = appointments, family = binomial)

modelo_lineal <- lm(waiting_time ~ age + sex, data = appointments) summary(modelo_lineal)

Resumen estadístico de todas las variables

summary(modelo_logistico) summary(modelo_lineal)

#Validación y testeo del modelo logístico#

par(mfrow=c(2,2)) plot(modelo_logistico)

Validación cruzada

set.seed(123) train_control <- trainControl(method=“cv”, number=5) modelo_cv <- train(no_show ~ age + sex + waiting_time, data=appointments, method=“glm”, family=“binomial”, trControl=train_control) print(modelo_cv)

#Modelo matemático: Regresión lineal múltiple#

appointments\(sex <- as.factor(appointments\)sex)

modelo_lineal <- lm(waiting_time ~ age + sex, data=appointments) summary(modelo_lineal)

#Comparación de modelos# comparacion <- data.frame( Modelo = c(“Regresión Logística Binaria”,“Regresión Lineal Múltiple”), Indicador = c(“AIC”,“R²”), Valor = c(AIC(modelo_logistico), round(summary(modelo_lineal)$r.squared, 4)) ) comparacion

#Indicadores de eficiencia hospitalaria#

Tasa global de inasistencia

tasa_inasistencia <- mean(appointments$no_show) tasa_inasistencia

Tasa de inasistencia por sexo

tasa_inasistencia_sexo <- appointments %>% group_by(sex) %>% summarise(inasistencia = mean(no_show)) tasa_inasistencia_sexo

#Gráficos de comportamiento y variabilidad#

Edad vs probabilidad de faltar

ggplot(appointments, aes(x=age, y=no_show)) + geom_jitter(alpha=0.4, color=“blue”) + geom_smooth(method=“glm”, method.args=list(family=“binomial”), se=FALSE, color=“black”) + labs(title=“Comportamiento de la asistencia según edad”, x=“Edad”, y=“Probabilidad de faltar”)

Sexo vs variabilidad

ggplot(appointments, aes(x=factor(sex), y=no_show, fill=factor(sex))) + geom_boxplot() + labs(title=“Variabilidad de la asistencia según sexo”, x=“Sexo”, y=“Probabilidad de faltar”)