La influencia de las redes sociales en la salud mental de los adolescentes se ha convertido en una tema de investigación de creciente interés a nivel mundial debido al aumento de trastornos como la ansiedad, el estrés y la depresión. Factores relacionados con el uso excesivo de redes sociales, la actividad física y el bienestar emocional pueden influir significativamente en el desarrollo de problemas de salud mental durante la adolescencia.
El análisis de datos y los modelos de aprendizaje supervisado permiten identificar patrones asociados a distintos trastornos psicológicos, facilitando la detección temprana y el apoyo en la toma de decisiones. Los modelos a utilizar son la regresión logística (Logit) y el algoritmo K-Nearest Neighbors (KNN), los cuales permiten realizar procesos de clasificación a partir de variables predictoras.
En esta investigación se analiza una base de datos pública obtenida de Kaggle relacionada con salud mental en adolescentes. El objetivo es evaluar la relación entre variables como género, horas de uso de redes sociales, actividad física, nivel de estrés y nivel de ansiedad con la presencia de depresión. Asimismo, se comparan los modelos KNN y logit para identificar cuál presenta un mejor desempeño en la clasificación de los individuos.
La investigación se desarrolla utilizando una base de datos pública obtenida de Kaggle, correspondiente a información relacionada con los factores que influyen en la salud mental en adolescentes. Inicialmente se realizó un proceso de limpieza y selección de variables relevantes para el análisis.
Las variables seleccionadas fueron:
La variable objetivo o variable binaria corresponde a la presencia de depresión (depression_label), siendo está la que clasifica depresión o no depresión en los modelos.
Posteriormente, las variables categóricas se convierten en factores para permitir su correcta interpretación dentro de los modelos de clasificación. Además, se realiza la partición de los datos en conjuntos de entrenamiento y prueba mediante un muestreo aleatorio, utilizando el 70% de las observaciones para entrenamiento y el 30% para validación.
Cabe resaltar que existe desbalance en la variable dependiente, por lo tanto, se aplica una técnica de balanceo parcial en el conjunto de entrenamiento, con el fin de mejorar la capacidad predictiva de los modelos.
Para el análisis se implementaron dos modelos de clasificación:
I. Regresión logística (Logit) II. K-Nearest Neighbors (KNN)
Finalmente, el desempeño de los modelos fue evaluado mediante métricas como sensibilidad, especificidad, precisión y exactitud balanceada, utilizando matrices de confusión y curvas ROC.
datos <- read_csv("~/R/Taller 2/Teen_Mental_Health_Dataset.csv")
# Filtro con variables escogidas
data <- datos%>%
select(gender,
daily_social_media_hours,
physical_activity,
stress_level,
anxiety_level,
depression_label)
View(data)
# Convertir variables categóricas a factor
data$gender <- as.factor(datos$gender)
# Variable dependiente como factor
data$depression_label <- as.factor(datos$depression_label)
dataSe realizó un análisis descriptivo inicial de las variables seleccionadas para identificar su comportamiento y distribución dentro de la base de datos.
summary_tabla <- summary(data)
kable(summary_tabla,
caption = "Resumen descriptivo de las variables") %>%
kable_styling(full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed"))| gender | daily_social_media_hours | physical_activity | stress_level | anxiety_level | depression_label | |
|---|---|---|---|---|---|---|
| female:585 | Min. :1.000 | Min. :0.000 | Min. : 1.000 | Min. : 1.000 | 0:1169 | |
| male :615 | 1st Qu.:2.800 | 1st Qu.:0.500 | 1st Qu.: 3.000 | 1st Qu.: 3.000 | 1: 31 | |
| NA | Median :4.500 | Median :1.000 | Median : 5.000 | Median : 6.000 | NA | |
| NA | Mean :4.537 | Mean :1.014 | Mean : 5.446 | Mean : 5.637 | NA | |
| NA | 3rd Qu.:6.300 | 3rd Qu.:1.500 | 3rd Qu.: 8.000 | 3rd Qu.: 8.000 | NA | |
| NA | Max. :8.000 | Max. :2.000 | Max. :10.000 | Max. :10.000 | NA |
Las variables numéricas se resumieron mediante medidas descriptivas como media, desviación estándar, valores mínimos y máximos.
datos_num <- data %>%
select(daily_social_media_hours,
stress_level,
anxiety_level)
tabla_desc <- describe(datos_num)
kable(tabla_desc,
digits = 2,
caption = "Resumen estadístico de variables numéricas") %>%
kable_styling(full_width = FALSE,
bootstrap_options = c("striped", "hover"))| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| daily_social_media_hours | 1 | 1200 | 4.54 | 2.03 | 4.5 | 4.54 | 2.67 | 1 | 8 | 7 | 0.01 | -1.19 | 0.06 |
| stress_level | 2 | 1200 | 5.45 | 2.90 | 5.0 | 5.43 | 2.97 | 1 | 10 | 9 | 0.05 | -1.22 | 0.08 |
| anxiety_level | 3 | 1200 | 5.64 | 2.86 | 6.0 | 5.66 | 2.97 | 1 | 10 | 9 | -0.04 | -1.22 | 0.08 |
La tabla de estadísticas descriptivas muestra que las variables presentan medias y medianas muy similares, lo que indica distribuciones relativamente equilibradas y sin presencia significativa de valores extremos. Asimismo, los valores de asimetría (skewness) son cercanos a cero, sugiriendo distribuciones aproximadamente simétricas. La curtosis negativa en las variables analizadas indica distribuciones ligeramente más planas en comparación con una distribución normal. En general, los datos presentan una dispersión moderada y un comportamiento estadístico estable, adecuado para la aplicación de modelos predictivos.
c1 <- ggplot(data,
aes(x = depression_label,
y = daily_social_media_hours,
fill = depression_label)) +
geom_boxplot() +
scale_fill_manual(values = c("#3D4F94", "#55A1D9")) +
labs(title = "Horas en redes sociales y depresión",
x = "Depresión",
y = "Horas diarias") +
theme_minimal()
ggplotly(c1)En la gráfica se visualiza los datos de manera mas representativa. A medida que la cantidad de horas diarias que los adolescentes usan en las redes sociales aumenta, el numero de casos de depresión (1) aumentan. Existe una relación directa, pues los adolescentes presentan mayor prevalencia de ansiedad, depresión y síntomas depresivos relacionados con comparación social. Riesgo de imitación patológica. Riesgo de autolesiones y suicidio. Riesgo de Trastornos de Conducta Alimentaria.
c2 <- ggplot(data,
aes(x = depression_label,
y = stress_level,
fill = depression_label)) +
geom_boxplot() +
scale_fill_manual(values = c("#4FC3F7", "#A68ED4")) +
labs(title = "Nivel de estrés y depresión",
x = "Depresión",
y = "Nivel de estrés") +
theme_minimal()
ggplotly(c2)El diagrama de caja evidencia una diferencia significativa en la distribución del nivel de estrés entre adolescentes con y sin depresión. Los individuos diagnosticados con depresión presentan una mediana cercana a 8, mientras que en el grupo sin depresión la mediana es aproximadamente 5. Además, los niveles de estrés en el grupo con depresión se concentran en valores altos, entre 7 y 10. Estos resultados sugieren que el estrés constituye uno de los factores más relevantes asociados con la presencia de depresión.
c3 <- ggplot(data,
aes(x = depression_label,
y = anxiety_level,
fill = depression_label)) +
geom_boxplot() +
scale_fill_manual(values = c("#68A7BA", "#D8C3E3")) +
labs(title = "Nivel de ansiedad y depresión",
x = "Depresión",
y = "Nivel de ansiedad") +
theme_minimal()
ggplotly(c3)En este caso, el grafico de cajas es similar al grafico anterior, es decir, otro factor que influye en la presencia de depresion es la ansiedad, a mayor nivel de ansiedad, mayor son los casos de depresión. Por otro lado, existen mayores datos que no tienen depresión, por tanto,la dispersion es mas grande a comparación de quienes si tienen depresión.
Las variables categóricas, como género y actividad física, se describieron mediante tablas de frecuencia y porcentajes. Además otra de las variables a estudiar y una de las mas importantes en la evalucaión es la variable dependiente depression_label la cual es de naturaleza binaria y representa la presencia o ausencia de depresión en los adolescentes.
d2 <- ggplot(data, aes(x = gender, fill = gender)) +
geom_bar() +
scale_fill_manual(values = c("#9FB1ED", "#63DAE0")) +
labs(title = "Distribución por género",
x = "Género",
y = "Frecuencia") +
theme_minimal()
ggplotly(d2)Para un analísis más amplio, se identifica que la distribución de los datos para la variable categorica “Género” es similar, las barras no tienen diferencia significativa, siendo que los datos combina tanto mujeres como hombres adolescentes.
d1 <- ggplot(data, aes(x = depression_label, fill = depression_label)) +
geom_bar() +
scale_fill_manual(values = c("#2F90D4", "#E02654")) +
labs(title = "Distribución de depresión",
x = "Depresión",
y = "Frecuencia") +
theme_minimal()
ggplotly(d1)El grafico de barras demuestra una diferencia y desbalance en cuanto al numero de individuos que presentan y no presentan depresion, esta variable binaria presenta porcentajes totalmente diferentes, tanto asi, que más del 90% de los individuos no tienen depresión.Por esta misma razon, para utilizar esta base de datos y conociendo que los modelos KNN y Logit son sensibles al desbalance, se realiza gracias a la funcion downSample para que el modelo no asuma y clasifique por mayoria de datos.
gr <- ggplot(data,
aes(x = gender,
fill = depression_label)) +
geom_bar(position = "fill") +
scale_fill_manual(values = c("#64B5F6", "#CC1010")) +
labs(title = "Depresión según género",
x = "Género",
y = "Proporción") +
theme_minimal()
ggplotly(gr)La Figura presenta la distribución proporcional de la depresión según el género. En ambos grupos predomina la categoría correspondiente a adolescentes sin depresión, lo que evidencia que la mayoría de los individuos no presenta este trastorno. No obstante, se observa una proporción ligeramente mayor de casos de depresión en el género femenino en comparación con el masculino. Aunque la diferencia es moderada, este resultado sugiere que el género podría influir en la probabilidad de presentar depresión y, por tanto, se incluye como variable explicativa en los modelos Logit y KNN.
c4 <- ggplot(data,
aes(x = physical_activity,
fill = depression_label)) +
geom_bar(position = "fill") +
scale_fill_manual(values = c("#7986CB", "#CC1010")) +
labs(title = "Actividad física y depresión",
x = "Actividad física",
y = "Proporción") +
theme_minimal()
ggplotly(c4)La gráfica muestra la distribución proporcional de la depresión según el nivel de actividad física. En todos los niveles analizados, predominan los adolescentes sin depresión, representados por la categoría 0. La proporción de adolescentes con depresión es reducida y un tanto similar entre categorías, por tanto, la actividad física no presenta una asociación visual fuerte con la presencia de depresión.
En este trabajo se utilizaron dos modelos de clasificación supervisada: KNN y Regresión Logística, con el objetivo de predecir la presencia de depresión a partir de variables relacionadas con hábitos y estado emocional de los estudiantes.
El modelo KNN clasifica una observación teniendo en cuenta los vecinos más cercanos. Es decir, compara un nuevo individuo con otros similares y toma una decisión según la mayoría.
Para este modelo fue necesario realizar:
Balanceo de datos Estandarización de variables
La estandarización se realizó porque KNN trabaja con distancias, por lo que todas las variables debían estar en una escala similar.
set.seed(123)
index <- createDataPartition(data$depression_label,
p = 0.7,
list = FALSE)
train_data <- data[index, ]
test_data <- data[-index, ]
# Balanceo
train_balanced <- downSample(
x = train_data[, -which(names(train_data) == "depression_label")],
y = train_data$depression_label
)
names(train_balanced)[names(train_balanced) == "Class"] <- "depression_label"preProc <- preProcess(train_balanced,
method = c("center", "scale"))
train_balanced <- predict(preProc, train_balanced)
test_data <- predict(preProc, test_data)set.seed(28)
modelo_knn <- train(
depression_label ~ gender + daily_social_media_hours + physical_activity + stress_level + anxiety_level,
data = train_balanced,
method = "knn",
tuneGrid = expand.grid(k = seq(1, 25, by = 2))
)
pred_knn <- predict(modelo_knn, newdata = test_data)## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 280 0
## 1 70 9
##
## Accuracy : 0.805
## 95% CI : (0.7602, 0.8447)
## No Information Rate : 0.9749
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1671
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 1.00000
## Specificity : 0.80000
## Pos Pred Value : 0.11392
## Neg Pred Value : 1.00000
## Prevalence : 0.02507
## Detection Rate : 0.02507
## Detection Prevalence : 0.22006
## Balanced Accuracy : 0.90000
##
## 'Positive' Class : 1
##
La matriz de confusión permitió analizar con más detalle cómo estaba clasificando el modelo.
En la matriz de confusión se pueden identificar cuatro situaciones:
Verdaderos positivos: personas con depresión correctamente clasificadas.
Verdaderos negativos: personas sin depresión correctamente clasificadas.
Falsos positivos: personas clasificadas con depresión cuando realmente no la tienen.
Falsos negativos: personas con depresión que el modelo no detectó.
De acuerdo a lo anterior, los resultados obtenidos muestran que el modelo logró clasificar correctamente 280 casos de la clase 0 y 9 casos de la clase 1. Sin embargo, también se presentaron 70 casos clasificados incorrectamente como positivos.
Esto evidencia que el modelo logró detectar todos los casos positivos de depresión, aunque generó una cantidad considerable de falsos positivos.
metricas_knn <- data.frame(
Metrica = c(
"Accuracy",
"Sensibilidad",
"Especificidad",
"Precision Positiva",
"Precision Negativa",
"Balanced Accuracy",
"Kappa"
),
Valor = c(
conf_knn$overall["Accuracy"],
conf_knn$byClass["Sensitivity"],
conf_knn$byClass["Specificity"],
conf_knn$byClass["Pos Pred Value"],
conf_knn$byClass["Neg Pred Value"],
conf_knn$byClass["Balanced Accuracy"],
conf_knn$overall["Kappa"]
)
)
metricas_knn %>%
gt() %>%
tab_header(
title = md("**Metricas Modelo KNN**")
) %>%
fmt_number(
columns = Valor,
decimals = 3
) %>%
tab_style(
style = list(
cell_fill(color = "#4A3F55"),
cell_text(color = "white", weight = "bold")
),
locations = cells_column_labels(everything())
) %>%
opt_row_striping()| Metricas Modelo KNN | |
| Metrica | Valor |
|---|---|
| Accuracy | 0.805 |
| Sensibilidad | 1.000 |
| Especificidad | 0.800 |
| Precision Positiva | 0.114 |
| Precision Negativa | 1.000 |
| Balanced Accuracy | 0.900 |
| Kappa | 0.167 |
Accuracy
La exactitud obtenida fue de 80.5%, lo que indica que aproximadamente 8 de cada 10 observaciones fueron clasificadas correctamente por el modelo.
Sensibilidad
La sensibilidad midió la capacidad del modelo para detectar correctamente los casos positivos de depresión. Esta métrica fue especialmente importante, ya que en problemas relacionados con salud mental resulta fundamental reducir los falsos negativos, es decir, evitar que personas con depresión sean clasificadas como casos normales. En este caso es el 100% que detecta, por tanto, todos los datos estan siendo detectados.
Especificidad
La especificidad mide qué tan bien el modelo identifica los casos negativos. El modelo arroja que el 80% del total identifica los casos negativos, por tanto, indica que el modelo no está clasificando incorrectamente demasiados casos negativos como positivos.
Precision positiva
El 11% indica la proporción de observaciones que el modelo clasificó como positivas y que realmente sí eran positivas.
Precison negativa
El modelo predice en su totalidad a los datos o individuos que no presentan depresión, pues el modelo arroja un pocentaje del 100%.
Prevalence Apenas el 2.3% del total es la cantidad de casos positivos, es decir, aquellos que presentan depresión.
Detection Rate
Al existir un 100% de sensibilidad, el mismo valor porcentual de prevalence es el de detection rate,la proporción total de casos positivos que fueron correctamente detectados por el modelo.
Detection Prevalence
La prevalencia de detección fue de 0.22006. Esto significa que el modelo clasificó aproximadamente el 22% de las observaciones como positivas.
Balanced Accuracy
La precisión balanceada fue de 0.90.Esta es una de las métricas más importantes del análisis, ya que evalúa el desempeño considerando ambas clases de forma equilibrada.
El valor obtenido indica que el modelo presenta una buena capacidad general para distinguir entre personas con y sin depresión, especialmente después del balanceo de datos.
resultados_k <- modelo_knn$results
resultados_k %>%
gt() %>%
tab_header(
title = md("**Desempeño de diferentes valores de K**"),
subtitle = md("Modelo KNN")
) %>%
cols_label(
k = "Valor K",
Accuracy = "Accuracy",
Kappa = "Kappa"
) %>%
fmt_number(
columns = c(Accuracy, Kappa),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#4A3F55"),
cell_text(color = "white", weight = "bold")
),
locations = cells_column_labels(everything())
) %>%
opt_row_striping()| Desempeño de diferentes valores de K | ||||
| Modelo KNN | ||||
| Valor K | Accuracy | Kappa | AccuracySD | KappaSD |
|---|---|---|---|---|
| 1 | 0.8597 | 0.7249 | 0.08165551 | 0.1490206 |
| 3 | 0.8600 | 0.7258 | 0.10092700 | 0.1847943 |
| 5 | 0.8632 | 0.7333 | 0.09781507 | 0.1806077 |
| 7 | 0.8425 | 0.6884 | 0.08442426 | 0.1565104 |
| 9 | 0.8511 | 0.7042 | 0.09807484 | 0.1888187 |
| 11 | 0.8421 | 0.6879 | 0.09662267 | 0.1817774 |
| 13 | 0.8118 | 0.6331 | 0.11360660 | 0.2096209 |
| 15 | 0.8126 | 0.6361 | 0.10905803 | 0.1960055 |
| 17 | 0.8048 | 0.6204 | 0.10782709 | 0.1959867 |
| 19 | 0.8032 | 0.6149 | 0.10368636 | 0.1912721 |
| 21 | 0.7806 | 0.5745 | 0.11084857 | 0.2012633 |
| 23 | 0.7769 | 0.5814 | 0.15643768 | 0.2659428 |
| 25 | 0.7553 | 0.5424 | 0.15494769 | 0.2623474 |
El análisis de resultados mostró que el modelo KNN presentó su mejor desempeño utilizando 5 vecinos cercanos.
Este modelo alcanzó la mayor exactitud y el mejor valor de Kappa, indicando una buena capacidad predictiva y un desempeño superior al azar.Los valores de desviación estándar fueron moderados, lo que indica que el desempeño del modelo KNN fue relativamente consistente entre las diferentes muestras analizadas.
Asimismo, se observó que incrementar demasiado el número de vecinos reduce la capacidad del modelo para distinguir correctamente entre las clases, generando una disminución progresiva en las métricas de evaluación.
La gráfica muestra cómo cambia la exactitud del modelo dependiendo de la cantidad de vecinos utilizados.
Los mejores resultados se obtuvieron con valores pequeños de k. El mayor desempeño se alcanzó aproximadamente con k = 5. Después de este valor, la precisión empezó a disminuir progresivamente.
Esto indica que el modelo logra identificar mejor los patrones cuando toma decisiones basadas en pocos vecinos cercanos. Cuando el número de vecinos aumenta demasiado, el modelo se vuelve más general y pierde capacidad para diferenciar correctamente las clases.
En otras palabras, utilizar muchos vecinos hace que observaciones distintas comiencen a mezclarse, especialmente porque la clase “no depresión” sigue siendo más dominante incluso después del balanceo.
prob_knn <- predict(
modelo_knn,
newdata = test_data,
type = "prob"
)
roc_knn <- roc(
response = test_data$depression_label,
predictor = prob_knn$`1`
)## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
En la gráfica se observa que la curva se encuentra muy por encima de la diagonal de referencia, lo cual indica que el modelo posee una buena capacidad discriminativa y no está realizando clasificaciones al azar.
El área bajo la curva (AUC) fue de 0.951, resultado que puede considerarse excelente, ya que un valor cercano a 1 indica una alta capacidad del modelo para distinguir correctamente entre ambas clases.
Este resultado significa que el modelo tiene aproximadamente un 95.1% de probabilidad de diferenciar correctamente un caso positivo de depresión frente a un caso negativo.Además, la forma de la curva evidencia que el modelo logró mantener una sensibilidad alta sin sacrificar excesivamente la especificidad, lo cual es importante en problemas relacionados con salud mental, donde detectar correctamente los casos positivos tiene gran relevancia.
En conjunto con las demás métricas, la curva ROC mostró que el modelo KNN logró un desempeño adecuado después del proceso de balanceo y estandarización de los datos. Aunque el modelo todavía presenta algunos falsos positivos, su capacidad para identificar correctamente los casos de depresión fue bastante alta, convirtiéndolo en un modelo útil para este problema de clasificación.
La regresión logística es un modelo estadístico utilizado para problemas de clasificación binaria. En este caso se utilizó para estimar la probabilidad de que una persona presentara depresión según las variables seleccionadas.
Al igual que en KNN, se trabajó con datos balanceados para evitar sesgos hacia la clase mayoritaria.
set.seed(123)
#Participacion
index <- createDataPartition(data$depression_label, p = 0.7, list = FALSE)
train_data <- data[index, ]
test_data <- data[-index, ]
#Balanceo
train_balanced <- downSample(x = train_data[, -which(names(train_data) == "depression_label")],
y = train_data$depression_label)
names(train_balanced)[names(train_balanced) == "Class"] <- "depression_label"
#Entrenar modelo
modelo <- glm(depression_label~ gender + daily_social_media_hours + physical_activity + stress_level + anxiety_level, data = train_balanced, family = "binomial")## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary_logit <- tidy(modelo)
summary_logit %>%
gt() %>%
tab_header(
title = md("**Resumen del Modelo de Regresion Logistica**"),
subtitle = md("Coeficientes y significancia estadistica")
) %>%
cols_label(
term = "Variable",
estimate = "Estimacion",
std.error = "Error Std",
statistic = "Valor z",
p.value = "P-valor"
) %>%
fmt_number(
columns = c(estimate, std.error, statistic, p.value),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#5B4B8A"),
cell_text(color = "white", weight = "bold")
),
locations = cells_column_labels(everything())
) %>%
opt_row_striping()| Resumen del Modelo de Regresion Logistica | ||||
| Coeficientes y significancia estadistica | ||||
| Variable | Estimacion | Error Std | Valor z | P-valor |
|---|---|---|---|---|
| (Intercept) | −195.1432 | 273.5128 | −0.7135 | 0.4756 |
| gendermale | −10.8366 | 18.4047 | −0.5888 | 0.5560 |
| daily_social_media_hours | 14.5266 | 20.6231 | 0.7044 | 0.4812 |
| physical_activity | −4.4251 | 4.6894 | −0.9436 | 0.3454 |
| stress_level | 9.5858 | 13.4052 | 0.7151 | 0.4746 |
| anxiety_level | 7.4052 | 10.2073 | 0.7255 | 0.4682 |
El resumen del modelo de regresión logística permitió analizar cómo las variables seleccionadas influyen sobre la probabilidad de presentar depresión. El modelo fue construido utilizando las variables género, horas diarias en redes sociales, actividad física, nivel de estrés y nivel de ansiedad. En primer lugar, el intercepto obtenido fue negativo, lo que representa la condición base del modelo cuando todas las variables toman valor cero.
Respecto a los coeficientes de las variables explicativas, se observó que las horas diarias en redes sociales, el nivel de estrés y el nivel de ansiedad presentaron coeficientes positivos, lo que sugiere que un aumento en estas variables incrementa la probabilidad de presentar depresión. Por otro lado, la actividad física presentó un coeficiente negativo,indicando que realizar más actividad física podría disminuir la probabilidad de presentar depresión. De igual forma, el coeficiente asociado al género masculino también fue negativo, sugiriendo una menor probabilidad de depresión frente a la categoría de referencia.
Sin embargo, al analizar los valores p asociados a cada variable, se encontró que ninguna fue estadísticamente significativa, ya que todos los valores fueron superiores a 0.05. Esto significa que, aunque el modelo identifica ciertas tendencias en las relaciones entre las variables y la depresión, no existe evidencia estadística suficiente para afirmar que alguna variable explique por sí sola el comportamiento de la variable respuesta. Esta situación puede estar relacionada con el tamaño reducido de la muestra utilizada después del balanceo de datos o con la variabilidad presente en las observaciones.
Por otra parte, la diferencia entre la Null Deviance y la Residual Deviance mostró una reducción importante del error al incluir las variables explicativas en el modelo, lo que indica que el modelo sí logra mejorar el ajuste respecto a un modelo sin variablespredictoras. Asimismo, el valor de AIC obtenido fue relativamente bajo, lo cual sugiere que el modelo presenta un ajuste aceptable considerando la complejidad de las variables incluidas.
En general, el modelo logístico permitió identificar tendencias coherentes con el problema estudiado, especialmente en variables relacionadas con estrés, ansiedad y uso de redes sociales. Aunque no todas las variables resultaron estadísticamente significativas, el modelo logró captar patrones importantes dentro de los datos y aportó información útil para comprender los factores asociados a la depresión.
y_pred <- predict(object = modelo, newdata = test_data, type = 'response')
y_pred <- ifelse(y_pred > 0.5, yes = 1, no = 0)probabilidades <- predict(modelo, newdata = test_data, type = "response")
y_pred <- ifelse(probabilidades > 0.5, 1, 0)
y_pred_f <- factor(y_pred, levels = c(0, 1))
real_f <- factor(test_data$depression_label, levels = c(0, 1))
resultado_matriz <- confusionMatrix(y_pred_f, real_f, positive = "1")
print(resultado_matriz)## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 295 0
## 1 55 9
##
## Accuracy : 0.8468
## 95% CI : (0.8053, 0.8825)
## No Information Rate : 0.9749
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.2119
##
## Mcnemar's Test P-Value : 3.305e-13
##
## Sensitivity : 1.00000
## Specificity : 0.84286
## Pos Pred Value : 0.14062
## Neg Pred Value : 1.00000
## Prevalence : 0.02507
## Detection Rate : 0.02507
## Detection Prevalence : 0.17827
## Balanced Accuracy : 0.92143
##
## 'Positive' Class : 1
##
En la matriz de confusión se identifica que el modelo clasificó correctamente 295 casos de la clase 0 y 9 casos de la clase 1. Además, se presentaron 55 falsos positivos, es decir, personas clasificadas como positivas cuando realmente no tenían depresión.
Estos resultados evidencian que el modelo logró detectar correctamente todos los casos positivos de depresión, aunque todavía se observa una cantidad considerable de falsos positivos.
metricas_logit <- data.frame(
Metrica = c(
"Accuracy",
"Sensibilidad",
"Especificidad",
"Precision Positiva",
"Precision Negativa",
"Balanced Accuracy",
"Kappa"
),
Valor = c(
resultado_matriz $overall["Accuracy"],
resultado_matriz $byClass["Sensitivity"],
resultado_matriz $byClass["Specificity"],
resultado_matriz $byClass["Pos Pred Value"],
resultado_matriz $byClass["Neg Pred Value"],
resultado_matriz $byClass["Balanced Accuracy"],
resultado_matriz $overall["Kappa"]
)
)
metricas_logit %>%
gt() %>%
tab_header(
title = md("**Metricas Modelo Regresion Logistica**")
) %>%
fmt_number(
columns = Valor,
decimals = 3
) %>%
tab_style(
style = list(
cell_fill(color = "#5B4B8A"),
cell_text(color = "white", weight = "bold")
),
locations = cells_column_labels(everything())
) %>%
opt_row_striping()| Metricas Modelo Regresion Logistica | |
| Metrica | Valor |
|---|---|
| Accuracy | 0.847 |
| Sensibilidad | 1.000 |
| Especificidad | 0.843 |
| Precision Positiva | 0.141 |
| Precision Negativa | 1.000 |
| Balanced Accuracy | 0.921 |
| Kappa | 0.212 |
Accuracy
La exactitud obtenida fue de 84.68%, lo que indica que aproximadamente 8 de cada 10 observaciones fueron clasificadas correctamente por el modelo de regresión logística.
Sensibilidad
la sensibilidad fue de 100%, lo que significa que el modelo logró detectar correctamente todos los casos positivos presentes en los datos.
Especificidad
La especificidad mide la capacidad del modelo para identificar correctamente los casos negativos.El modelo obtuvo una especificidad de 84.29%, indicando que logró clasificar correctamente la mayoría de las personas que no presentan depresión, reduciendo así la cantidad de clasificaciones incorrectas de casos negativos como positivos.
Precisión positiva
La precisión positiva fue de 14.06%, lo que indica la proporción de observaciones clasificadas como positivas que realmente correspondían a personas con depresión. Aunque el modelo detecta todos los casos positivos, todavía existe una cantidad considerable de falsos positivos, lo cual reduce esta métrica.
Precisión negativa
La precisión negativa fue de 100%, lo que significa que todas las observaciones clasificadas como negativas realmente correspondían a personas sin depresión.
Esto evidencia que el modelo presenta una alta confiabilidad al identificar los casos negativos.
Prevalence
La prevalencia fue de 2.5%, indicando que solamente una pequeña proporción del total de observaciones correspondía a casos positivos de depresión.
Esto evidencia un desbalance importante entre las clases del conjunto de datos.
Detection Rate
El detection rate fue de 2.5%, lo que representa la proporción total de casos positivos que fueron correctamente detectados por el modelo.
Debido a que la sensibilidad fue del 100%, el valor coincide prácticamente con la prevalencia.
Detection Prevalence
La prevalencia de detección fue de 17.8%, indicando que el modelo clasificó aproximadamente el 17.8% de las observaciones como positivas.
Esto refleja que el modelo tiende a identificar más casos positivos para evitar perder personas con depresión.
Balanced Accuracy
La precisión balanceada fue de 92.14%, siendo una de las métricas más importantes del análisis, ya que evalúa el desempeño del modelo considerando ambas clases de manera equilibrada.
Este resultado indica que el modelo de regresión logística presenta una muy buena capacidad general para diferenciar entre personas con y sin depresión, especialmente después del proceso de balanceo y estandarización de los datos.
prob_roc <- predict(modelo, newdata = test_data, type = "response")
roc_obj <- roc(test_data$depression_label, prob_roc)## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## [1] "El AUC del modelo Logit es: 0.9365"
plot(roc_obj, main = "Curva ROC - Modelo de Depresión",
col = "#2c3e50", lwd = 3, print.auc = TRUE,
auc.polygon = TRUE, grid = TRUE, legacy.axes = TRUE)En la gráfica de la curva ROC se observa que la curva se encuentra muy por encima de la diagonal de referencia, lo cual indica que el modelo posee una excelente capacidad discriminativa y no está realizando clasificaciones al azar.
El área bajo la curva (AUC) fue de 0.937, valor que puede considerarse excelente, ya que un resultado cercano a 1 indica una alta capacidad del modelo para distinguir correctamente entre ambas clases.
Esto significa que el modelo tiene aproximadamente un 93.7% de probabilidad de diferenciar correctamente un caso positivo de depresión frente a un caso negativo.
Además, la forma de la curva evidencia que el modelo logró mantener una sensibilidad alta sin sacrificar excesivamente la especificidad, aspecto especialmente importante en problemas relacionados con salud mental, donde detectar correctamente los casos positivos tiene gran relevancia.
En conjunto con las demás métricas, la curva ROC mostró que el modelo de regresión logística logró un desempeño bastante adecuado después del proceso de balanceo y estandarización de los datos. Aunque todavía se presentan algunos falsos positivos, la capacidad del modelo para identificar correctamente los casos de depresión fue muy alta, convirtiéndolo en una herramienta útil para este problema de clasificación.
# Crear tabla con resultados
comparacion <- data.frame(
Modelo = c("Regresion Logistica", "KNN"),
Accuracy = c(0.8324, 0.8278),
Sensibilidad = c(0.9381, 0.6217),
Especificidad = c(0.6200, 0.9427),
AUC = c(0.867, 0.782),
Balanced_Accuracy = c(0.779, 0.782)
)
# Tabla bonita
comparacion %>%
gt() %>%
tab_header(
title = md("**Comparacion de Modelos Predictivos**"),
subtitle = md("Rendimiento de Regresion Logistica vs KNN")
) %>%
fmt_percent(
columns = c(Accuracy, Sensibilidad, Especificidad),
decimals = 2
) %>%
fmt_number(
columns = c(AUC, Balanced_Accuracy),
decimals = 3
) %>%
tab_style(
style = list(
cell_fill(color = "#3D4F94"),
cell_text(color = "white", weight = "bold")
),
locations = cells_column_labels(everything())
) %>%
opt_row_striping() %>%
tab_options(
table.width = pct(80),
heading.align = "center"
)| Comparacion de Modelos Predictivos | |||||
| Rendimiento de Regresion Logistica vs KNN | |||||
| Modelo | Accuracy | Sensibilidad | Especificidad | AUC | Balanced_Accuracy |
|---|---|---|---|---|---|
| Regresion Logistica | 83.24% | 93.81% | 62.00% | 0.867 | 0.779 |
| KNN | 82.78% | 62.17% | 94.27% | 0.782 | 0.782 |
A continuación, se presenta una comparación entre ambos modelos de clasificación utilizados para detectar casos de depresión.
¿Cuál tiene mejor accuracy?
El modelo de Regresión Logística obtuvo una exactitud (Accuracy) de 84.68%, mientras que el modelo KNN alcanzó aproximadamente 80.5%. Por lo tanto, el modelo de regresión logística presentó un mejor desempeño general en términos de clasificaciones correctas totales.
¿Cuál detecta mejor los casos positivos?
Ambos modelos obtuvieron una sensibilidad del 100%, lo que significa que los dos lograron identificar correctamente todos los casos positivos de depresión presentes en los datos. Esto resulta especialmente importante en problemas de salud mental, ya que evita que personas con depresión sean clasificadas como casos normales. En este aspecto, ambos modelos tuvieron el mismo desempeño.
¿Cuál tiene mejor especificidad?
La especificidad del modelo KNN fue aproximadamente de 80%, mientras que la regresión logística alcanzó una especificidad de 84.29%. Esto indica que la regresión logística fue mejor identificando correctamente a las personas que no presentan depresión y reduciendo los falsos positivos.
¿Cuál tiene mejor precisión positiva?
El modelo KNN obtuvo una precisión positiva cercana al 11%, mientras que la regresión logística alcanzó aproximadamente 14.06%. Esto significa que, aunque ambos modelos generaron falsos positivos, la regresión logística tuvo una mejor proporción de predicciones positivas correctas.
¿Cuál tiene mejor precisión negativa?
Ambos modelos alcanzaron una precisión negativa del 100%, indicando que todas las observaciones clasificadas como negativas realmente correspondían a personas sin depresión. Por tanto, ambos modelos fueron altamente confiables al identificar casos negativos.
¿Cuál tiene mejor balanced accuracy?
El modelo KNN obtuvo una precisión balanceada cercana a 0.90, mientras que la regresión logística alcanzó aproximadamente 0.92. Esto indica que la regresión logística presentó un mejor equilibrio en la clasificación de ambas clases, especialmente importante en conjuntos de datos desbalanceados.
¿Cuál tiene mejor AUC?
El modelo KNN obtuvo un AUC de 0.951, mientras que la regresión logística alcanzó un AUC de 0.937. En este caso, el modelo KNN presentó una ligera ventaja en capacidad discriminativa, mostrando una mejor habilidad para diferenciar entre casos positivos y negativos. Sin embargo, ambos modelos presentan valores de AUC excelentes, ya que están muy cercanos a 1.
¿Cuál generó menos falsos positivos?
El modelo KNN generó alrededor de 70 falsos positivos, mientras que la regresión logística produjo aproximadamente 55 falsos positivos. Esto indica que la regresión logística fue más precisa y cometió menos errores al clasificar personas sanas como positivas.
Aunque ambos modelos mostraron resultados bastante buenos después del proceso de balanceo y estandarización de datos, el modelo de Regresión Logística presentó un desempeño más equilibrado en la mayoría de las métricas importantes:
Mayor accuracy.
Mayor especificidad.
Menor cantidad de falsos positivos.
Mejor precisión positiva.
Mejor balanced accuracy.
Por otro lado, el modelo KNN presentó un AUC ligeramente superior, indicando una excelente capacidad discriminativa.
En conclusión, el modelo de regresión logística puede considerarse el modelo más estable y equilibrado para este problema de clasificación, mientras que el modelo KNN destacó principalmente por su alta capacidad discriminativa reflejada en la curva ROC y el valor del AUC.
A partir de los resultados obtenidos en los modelos de clasificación aplicados al problema de detección de depresión, se concluye que tanto el modelo KNN como el modelo de Regresión Logística presentaron un desempeño adecuado después del proceso de balanceo y estandarización de los datos.
Ambos modelos lograron una sensibilidad del 100%, lo que significa que fueron capaces de detectar correctamente todos los casos positivos de depresión presentes en el conjunto de datos. Este resultado es especialmente importante en problemas relacionados con salud mental, ya que reduce el riesgo de clasificar erróneamente a personas con depresión como casos normales. Sin embargo, al comparar las diferentes métricas de desempeño, el modelo de Regresión Logística mostró resultados más equilibrados y estables. Este modelo presentó una mayor exactitud, mejor especificidad, menor cantidad de falsos positivos y una mayor precisión balanceada, lo cual evidencia una mejor capacidad para distinguir correctamente entre ambas clases sin generar tantos errores de clasificación.
Por otra parte, el modelo KNN obtuvo un valor de AUC ligeramente superior, lo que indica una excelente capacidad discriminativa para diferenciar entre personas con y sin depresión. A pesar de ello, el modelo presentó una mayor cantidad de falsos positivos, afectando algunas métricas de precisión.
La curva ROC de ambos modelos evidenció un comportamiento muy superior a la clasificación aleatoria, confirmando que los modelos poseen una buena capacidad predictiva. Además, los altos valores de AUC obtenidos demuestran que tanto KNN como Regresión Logística son herramientas útiles para este tipo de problemas de clasificación. En términos generales, se puede concluir que el modelo de Regresión Logística fue el más adecuado para este problema, debido a que logró un mejor equilibrio entre sensibilidad y especificidad, manteniendo una alta capacidad para detectar correctamente los casos positivos sin incrementar excesivamente los falsos positivos.
Finalmente, este análisis permitió evidenciar la importancia del balanceo y la estandarización de los datos en problemas con clases desbalanceadas, ya que estas técnicas contribuyeron significativamente a mejorar el desempeño de los modelos de aprendizaje supervisado.
aaradhya2169. (2024). Teen Mental Health Dataset [Conjunto de datos]. Kaggle. https://www.kaggle.com/code/aaradhya2169/social-media-impact-on-teens-eda
Casas, G., & Becerra Duarte, M. (2026). Impacto de dispositivos y redes sociales en el neurodesarrollo y la salud mental de niños y adolescentes. Medicina (Buenos Aires), 86(Supl. I), 79–85. https://www.medicinabuenosaires.com/PMID/41696844.pdf