Se va a trabajar con la base de datos de una población de mujeres con al menos 21 años, de ascendencia indígena Pima y que vivían cerca de Phoenix, Arizona. Estas se sometieron a pruebas de diabetes de acuerdo con los criterios de la Organización Mundial de la Salud. Los datos fueron recopilados por el Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales de EE. UU. Se usaron los 532 registros completos después de eliminar los datos (principalmente faltantes) sobre la insulina sérica.

library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.0.5
library(MASS)
## Warning: package 'MASS' was built under R version 4.0.5
data("Pima.tr");data("Pima.te")
Pima <- rbind(Pima.tr,Pima.te)
rm(Pima.tr,Pima.te)
str(Pima)                           
## 'data.frame':    532 obs. of  8 variables:
##  $ npreg: int  5 7 5 0 0 5 3 1 3 2 ...
##  $ glu  : int  86 195 77 165 107 97 83 193 142 128 ...
##  $ bp   : int  68 70 82 76 60 76 58 50 80 78 ...
##  $ skin : int  28 33 41 43 25 27 31 16 15 37 ...
##  $ bmi  : num  30.2 25.1 35.8 47.9 26.4 35.6 34.3 25.9 32.4 43.3 ...
##  $ ped  : num  0.364 0.163 0.156 0.259 0.133 ...
##  $ age  : int  24 55 35 26 23 52 25 24 63 31 ...
##  $ type : Factor w/ 2 levels "No","Yes": 1 2 1 1 1 2 1 1 1 2 ...
summary(Pima)
##      npreg             glu               bp              skin      
##  Min.   : 0.000   Min.   : 56.00   Min.   : 24.00   Min.   : 7.00  
##  1st Qu.: 1.000   1st Qu.: 98.75   1st Qu.: 64.00   1st Qu.:22.00  
##  Median : 2.000   Median :115.00   Median : 72.00   Median :29.00  
##  Mean   : 3.517   Mean   :121.03   Mean   : 71.51   Mean   :29.18  
##  3rd Qu.: 5.000   3rd Qu.:141.25   3rd Qu.: 80.00   3rd Qu.:36.00  
##  Max.   :17.000   Max.   :199.00   Max.   :110.00   Max.   :99.00  
##       bmi             ped              age         type    
##  Min.   :18.20   Min.   :0.0850   Min.   :21.00   No :355  
##  1st Qu.:27.88   1st Qu.:0.2587   1st Qu.:23.00   Yes:177  
##  Median :32.80   Median :0.4160   Median :28.00            
##  Mean   :32.89   Mean   :0.5030   Mean   :31.61            
##  3rd Qu.:36.90   3rd Qu.:0.6585   3rd Qu.:38.00            
##  Max.   :67.10   Max.   :2.4200   Max.   :81.00

Variables

Age<-Pima$age
Npreg<-Pima$npreg
Glu<-Pima$glu
Bp<-Pima$bp
Skin<-Pima$skin
Bmi<-Pima$bmi
Ped<-Pima$ped
Type<-Pima$type

#Punto 1

Árbol de Clasificación

library(rpart.plot)
set.seed(123)
Tree1<-rpart(Type ~ Age + Npreg + Bmi + Glu + Bp + Skin + Ped,
              data = Pima,
              method = "class")

rpart.plot(Tree1,digits = -1,type = 2,extra = 101,cex = 0.8, nn=TRUE)

Matriz de Confusión

Predic1<-predict(Tree1, newdata=Pima,type="class")
caret::confusionMatrix(Predic1,Pima$type,positive="Yes")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  326  46
##        Yes  29 131
##                                           
##                Accuracy : 0.859           
##                  95% CI : (0.8265, 0.8875)
##     No Information Rate : 0.6673          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.6747          
##                                           
##  Mcnemar's Test P-Value : 0.06467         
##                                           
##             Sensitivity : 0.7401          
##             Specificity : 0.9183          
##          Pos Pred Value : 0.8187          
##          Neg Pred Value : 0.8763          
##              Prevalence : 0.3327          
##          Detection Rate : 0.2462          
##    Detection Prevalence : 0.3008          
##       Balanced Accuracy : 0.8292          
##                                           
##        'Positive' Class : Yes             
## 

En lo correspondiente al análisis de estadísticos para evaluar la bondad de ajuste, es pertinente analicar el estadístico de exactitud ‘Accuracy’, Kappa, Sensibilidad. La exactitud se refiere a lo cerca que está el resultado de una medición del valor verdadero, con un valor del 85.9% indica que, a pesar del sesgo de estimación se cuenta con un alto valor de acertividad sobre cuáles mujeres padecían o no, de diabetes.

Entendiendo la sensibilidad y la especificidad como valores que indican la capacidad del estimador para discriminar los casos positivos, de los negativos. La sensibilidad representa la proporción de verdaderos positivos, mientras que la especificidad, es la fracción de verdaderos negativos. De esta estimación, se obtuvo valores de 0.7401 y de 0.9183 para los verdaderos positivos (mujeres estimadas con diabetes que sí tenían diabetes) y un valor mucho más alto para los verdaderos negativos, es decir, sensibilidad y especificidad, respectivamente. Indicando así, que de los positivos estimados, aproximadamente las 3/4 partes fueron verdaderos positivos.

El coeficiente kappa de Cohen, como medida estadística que ajusta el efecto del azar en la proporción de la concordancia observada, para este caso se obtuvo un Kappa de 0.6747, valor que se podría buscar aumentar variando las condiciones de clasificación del árbol.

#Punto 2

Árbol de clasificación con nuevos hiperparámetros

Tree2<-rpart(Type ~ Age + Npreg + Bmi + Glu + Bp + Skin + Ped,
              data = Pima,
             control = rpart.control(minsplit = 50,minbucket = 30),
              method = "class")

rpart.plot(Tree2,digits = -1,type = 2,extra = 101,cex = 0.8, nn=TRUE)

Al cambiar los valores de los hiperparámetros minibucket y minsplit a 30 y 50, respectivamente, el árbol tiene una clasificación visual más comprensible pero quizá, no tan precisa y acertada, pues recoge menos grupos y por lo tanto, estos contribuyen ahora con una proporción mayor, permitiendo así, ampliar un poco los rangos de error.

Matriz de Confusión

Predic2<-predict(Tree2, newdata=Pima,type="class")
caret::confusionMatrix(Predic2,Pima$type,positive="Yes")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  313  58
##        Yes  42 119
##                                           
##                Accuracy : 0.812           
##                  95% CI : (0.7762, 0.8444)
##     No Information Rate : 0.6673          
##     P-Value [Acc > NIR] : 7.571e-14       
##                                           
##                   Kappa : 0.5669          
##                                           
##  Mcnemar's Test P-Value : 0.1336          
##                                           
##             Sensitivity : 0.6723          
##             Specificity : 0.8817          
##          Pos Pred Value : 0.7391          
##          Neg Pred Value : 0.8437          
##              Prevalence : 0.3327          
##          Detection Rate : 0.2237          
##    Detection Prevalence : 0.3026          
##       Balanced Accuracy : 0.7770          
##                                           
##        'Positive' Class : Yes             
## 

Como muestra de lo mencionado y especulado, se obtuvo un nivel menor para todos los estadísticos analizados con las clasificaciones iniciales y escogidas por el algoritmo del programa, perdiendo exactitud en estimación y con niveles menores de verdaderos negativos/positivos, reflejando así, mayor equivocación de estimación.

#Punto 3 Árbol de clasificación controlando el CP

Tree3<-rpart(Type ~ Age + Npreg + Bmi + Glu + Bp + Skin + Ped,
              data = Pima,
             control = rpart.control(minsplit = 50,minbucket = 30,cp=0,05),
              method = "class")

rpart.plot(Tree3,digits = -1,type = 2,extra = 101,cex = 0.8, nn=TRUE)

Al determinar una exigencia de clasificación mucho más alta, (un 50% más), se obtiene un árbol mucho más ordenado y estricto en la forma de determinar las categorías, para analizar qué tanto mejora, se observará a partir de los estadísticos de la matriz de confusión.

Matriz de Confusión

Predic3<-predict(Tree3, newdata=Pima,type="class")
caret::confusionMatrix(Predic3,Pima$type,positive="Yes")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  313  58
##        Yes  42 119
##                                           
##                Accuracy : 0.812           
##                  95% CI : (0.7762, 0.8444)
##     No Information Rate : 0.6673          
##     P-Value [Acc > NIR] : 7.571e-14       
##                                           
##                   Kappa : 0.5669          
##                                           
##  Mcnemar's Test P-Value : 0.1336          
##                                           
##             Sensitivity : 0.6723          
##             Specificity : 0.8817          
##          Pos Pred Value : 0.7391          
##          Neg Pred Value : 0.8437          
##              Prevalence : 0.3327          
##          Detection Rate : 0.2237          
##    Detection Prevalence : 0.3026          
##       Balanced Accuracy : 0.7770          
##                                           
##        'Positive' Class : Yes             
## 

Respecto a los niveles anteriores, junto con los minibucket y minsplit dados (30 y 50, respectivamente), el nivel exactitud de estimación tiene una notable mejora (excepto en el Kappa), reflejado así, en los niveles de sensitividad y especificidad, sin embargo, no llegan a ser tan altos como las primeras estimaciones realizadas por el algoritmo del programa.

#Punto 4

Árbol de clasificación podado

Tree4<-prune(Tree3,cp=0.03)
rpart.plot(Tree4,digits = -1,type = 2,extra = 101,cex = 0.8, nn=TRUE)

Matriz de confusión

Prediccion4<-predict(Tree4, newdata=Pima,type="class")
caret::confusionMatrix(Prediccion4,Pima$type,positive="Yes")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  332  81
##        Yes  23  96
##                                           
##                Accuracy : 0.8045          
##                  95% CI : (0.7682, 0.8374)
##     No Information Rate : 0.6673          
##     P-Value [Acc > NIR] : 1.519e-12       
##                                           
##                   Kappa : 0.5203          
##                                           
##  Mcnemar's Test P-Value : 2.280e-08       
##                                           
##             Sensitivity : 0.5424          
##             Specificity : 0.9352          
##          Pos Pred Value : 0.8067          
##          Neg Pred Value : 0.8039          
##              Prevalence : 0.3327          
##          Detection Rate : 0.1805          
##    Detection Prevalence : 0.2237          
##       Balanced Accuracy : 0.7388          
##                                           
##        'Positive' Class : Yes             
## 

Permitiendo ahora, que el árbol se abra si y solo sí aumenta, al menos el 3% el nivel de clasificación, el árbol toma una forma mucho más amplia pero menos precisa, disminuyendo así más el estadístico Kappa y los demás estadísticos que muestran una desmejora en la capacidad de clasificación y acierto en la estimación de clasificación, reflejo esto de tener menos positivos verdaderos, pero no tanta pérdida en los positovos negativos.

En conclusión, con la configuración presentada, se puede observar que la distribución y clasificación más eficiente resultó ser aquella realizada de forma automática por el algoritmo del programa, ya que, al escoger de forma arbitrata los hiperparámetros Minsplit, Minibucket y el CP, se pudo obtener un árbol con menores agrupaciones y visualmente más comprensible a simple vista, pero por lo mismo, menos eficiente en la clasificación y en la estimación acertada de mujeres con y sin diabetes, para este caso.