Predecir la aparición de diabetes basándose en medidas diagnósticas.
Este conjunto de datos procede originalmente del Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales. El objetivo del conjunto de datos es predecir de forma diagnóstica si un paciente tiene diabetes o no, basándose en determinadas mediciones diagnósticas incluidas en el conjunto de datos. Se impusieron varias restricciones a la selección de estos casos de una base de datos más amplia. En concreto, todos los pacientes aquí incluidos son mujeres de al menos 21 años de edad y ascendencia indígena pima.
El conjunto de datos consta de varias variables predictivas médicas y una variable objetivo, el resultado. Las variables predictivas incluyen el número de embarazos que ha tenido la paciente, su IMC, su nivel de insulina, su edad, etc.
Pregnancies Glucose BloodPressure SkinThickness
Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. : 0.00
1st Qu.: 1.000 1st Qu.: 99.0 1st Qu.: 62.00 1st Qu.: 0.00
Median : 3.000 Median :117.0 Median : 72.00 Median :23.00
Mean : 3.845 Mean :120.9 Mean : 69.11 Mean :20.54
3rd Qu.: 6.000 3rd Qu.:140.2 3rd Qu.: 80.00 3rd Qu.:32.00
Max. :17.000 Max. :199.0 Max. :122.00 Max. :99.00
Insulin BMI DiabetesPedigreeFunction Age
Min. : 0.0 Min. : 0.00 Min. :0.0780 Min. :21.00
1st Qu.: 0.0 1st Qu.:27.30 1st Qu.:0.2437 1st Qu.:24.00
Median : 30.5 Median :32.00 Median :0.3725 Median :29.00
Mean : 79.8 Mean :31.99 Mean :0.4719 Mean :33.24
3rd Qu.:127.2 3rd Qu.:36.60 3rd Qu.:0.6262 3rd Qu.:41.00
Max. :846.0 Max. :67.10 Max. :2.4200 Max. :81.00
Outcome
Min. :0.000
1st Qu.:0.000
Median :0.000
Mean :0.349
3rd Qu.:1.000
Max. :1.000
set.seed(42)trainIndex <-createDataPartition(df_reduced$Outcome, p =0.8, list =FALSE)trainData <- df_reduced[trainIndex,]testData <- df_reduced[-trainIndex,]
Paso 9. Entrenar Logistic Regression
model_lr <-glm(Outcome ~ ., data = trainData, family ="binomial")pred_lr <-predict(model_lr, newdata = testData, type ="response")pred_lr_class <-ifelse(pred_lr >0.5, 1, 0)
Paso 10. Entrenar SVM
model_svm <-svm(as.factor(Outcome) ~ ., data = trainData, kernel ="radial", probability =TRUE) pred_svm <-predict(model_svm, newdata = testData)
if(acc_lr > acc_svm){cat("El mejor modelo es Logistic Regression\n") } else {cat("El mejor modelo es SVM\n") }
El mejor modelo es SVM
Interpretación
Capacidad para manejar relaciones no lineales
La Regresión Logística asume una relación lineal entre las variables independientes y la probabilidad de pertenecer a una clase.
En cambio, el SVM con kernel radial (RBF) proyecta los datos a un espacio de mayor dimensión y puede separar clases que no son linealmente separables.
En un dataset como el de diabetes, donde las variables biomédicas (glucosa, presión, insulina, etc.) no siempre se relacionan linealmente, SVM logra capturar mejor estas complejidades.
Margen de decisión más robusto
El principio de SVM es encontrar el hiperplano con el mayor margen de separación entre clases.
Esto significa que busca el límite que maximiza la distancia entre los puntos de frontera, reduciendo el riesgo de clasificar mal en datos nuevos (mejor generalización).
Mayor desempeño empírico en el dataset
En tu proyecto, al comparar los modelos, el accuracy de SVM es superior al de Logistic Regression.
Además de la precisión global, SVM suele tener mejor recall en la clase minoritaria (personas con diabetes), lo cual es fundamental en aplicaciones médicas, ya que es más grave un falso negativo (no detectar diabetes) que un falso positivo.
Menor sensibilidad a outliers en algunos casos
La regresión logística puede verse más afectada por valores extremos en las variables.
El SVM, al enfocarse en los vectores soporte (los puntos más cercanos a la frontera), ignora gran parte de los datos alejados, siendo más robusto frente a ruido.
Conclusión
El SVM es el mejor modelo en este caso porque:
Se adapta mejor a relaciones no lineales.
Proporciona una frontera de decisión más robusta.
Presenta un mejor desempeño empírico en el dataset de diabetes (mayor accuracy y mejores métricas de clasificación).
Tiene mayor valor práctico en contextos médicos, ya que reduce los falsos negativos.