Ver Documentos útilizados en la práctica

Revisar documento pdf,csv y puedes cargar el archivo en R markdown Ir a enlace de recursos

Cargando libreria

library(caTools)
library(ROCR)
library(rpart)
library(rpart.plot)
library(caret, silent)
## Loading required package: lattice
## Loading required package: ggplot2
library(e1071, silent)

Cargando diabetes.csv

setwd("/home/jtorres/master/Actividad 2")
diabetes <- read.csv("diabetes.csv")

Aplicando regresión logística

Pregunta 1

¿Cuál es la precisión de nuestro modelo (valor entre 0 y 1)? Rpta: 0,7864583

indicadoresRegresionLogistica <- function(tableConfusion){
VN <- tableConfusion["0","FALSE"]
VP <- tableConfusion["1","TRUE"]
FP <- tableConfusion["0","TRUE"]
FN <- tableConfusion["1","FALSE"]  
precisionModel <- (VN+VP)/sum(tableConfusion)
sensibilidadModel <- VP/(FN+VP)
especificidadModel <- VN/(VN+FP)
cat("La precisión del modelo es: ",precisionModel,"\n")
cat("La sensibilidad del modelo es: ",sensibilidadModel,"\n")
cat("La especificidad del modelo es: ",especificidadModel,"\n")
}
set.seed(1000)
split <- sample.split(diabetes$Outcome,SplitRatio = 0.75)
train <- subset(diabetes,split==TRUE)
test <-  subset(diabetes,split==FALSE)
diabetesMrLogistico <- glm(Outcome~.,data=train,family="binomial")
# summary(diabetesMrLogistico)
predictTestDiabetes <- predict(diabetesMrLogistico,type="response",newdata=test)
confusionMatriz <- table(test$Outcome,predictTestDiabetes>0.5)
cat("Matriz de confusión","\n")
## Matriz de confusión
print(confusionMatriz)
##    
##     FALSE TRUE
##   0   111   14
##   1    27   40
indicadoresRegresionLogistica(confusionMatriz)
## La precisión del modelo es:  0.7864583 
## La sensibilidad del modelo es:  0.5970149 
## La especificidad del modelo es:  0.888

Pregunta 2

Pregunta 2.2: ¿Cuál es la sensibilidad del modelo (valor entre 0 y 1)? Rpta: 0,5970149

indicadoresRegresionLogistica(confusionMatriz)
## La precisión del modelo es:  0.7864583 
## La sensibilidad del modelo es:  0.5970149 
## La especificidad del modelo es:  0.888

Pregunta 3

Pregunta 2.3: Supongamos que, modificando el umbral del modelo, queremos un nuevo modelo con una especifidad de 0.80. Para que eso sea posible, ¿debemos aumentar o disminuido el umbral t? a) Debemos aumentar t para llegar a una especifidad de 0.80 b) Debemos disminuir t para llegar a una especifidad de 0.80

Rpta: a, debemos disminuir t de 0.5 a 0.3 y 0.1

Pregunta 4

Pregunta 2.4: ¿Qué valor(es) de t nos da(n) un mínimo de 0.8 de sensibilidad? (RESPUESTA MÚLTIPLE) a) 0.1 b) 0.3 c) 0.7 d) 0.9

Rpta: 0,3 y 0,1

pred <- prediction(predictTestDiabetes,test$Outcome)
ROC <- performance(pred, "tpr", "fpr")
plot(ROC, colorize=TRUE, print.cutoffs.at=seq(0,1,by=0.1 ), text.adj=c(1.2,-0.4))

print("correr el modelo con un t=0.1")
## [1] "correr el modelo con un t=0.1"
confusionMatrizt10 <- table(test$Outcome,predictTestDiabetes>0.1)
print(confusionMatrizt10)
##    
##     FALSE TRUE
##   0    54   71
##   1     0   67
indicadoresRegresionLogistica(confusionMatrizt10)
## La precisión del modelo es:  0.6302083 
## La sensibilidad del modelo es:  1 
## La especificidad del modelo es:  0.432
print("--------------------------------------------------")
## [1] "--------------------------------------------------"
print("correr el modelo con un t=0.3")
## [1] "correr el modelo con un t=0.3"
confusionMatrizt30 <- table(test$Outcome,predictTestDiabetes>0.3)
print(confusionMatrizt30)
##    
##     FALSE TRUE
##   0    97   28
##   1    12   55
indicadoresRegresionLogistica(confusionMatrizt30)
## La precisión del modelo es:  0.7916667 
## La sensibilidad del modelo es:  0.8208955 
## La especificidad del modelo es:  0.776
print("--------------------------------------------------")
## [1] "--------------------------------------------------"
print("correr el modelo con un t=0.7")
## [1] "correr el modelo con un t=0.7"
confusionMatrizt70 <- table(test$Outcome,predictTestDiabetes>0.7)
print(confusionMatrizt70)
##    
##     FALSE TRUE
##   0   120    5
##   1    41   26
indicadoresRegresionLogistica(confusionMatrizt70)
## La precisión del modelo es:  0.7604167 
## La sensibilidad del modelo es:  0.3880597 
## La especificidad del modelo es:  0.96
print("--------------------------------------------------")
## [1] "--------------------------------------------------"
print("correr el modelo con un t=0.9")
## [1] "correr el modelo con un t=0.9"
confusionMatrizt90 <- table(test$Outcome,predictTestDiabetes>0.9)
print(confusionMatrizt90)
##    
##     FALSE TRUE
##   0   124    1
##   1    57   10
indicadoresRegresionLogistica(confusionMatrizt90)
## La precisión del modelo es:  0.6979167 
## La sensibilidad del modelo es:  0.1492537 
## La especificidad del modelo es:  0.992
print("--------------------------------------------------")
## [1] "--------------------------------------------------"

Pregunta 5

Pregunta 2.5: ¿Qué valor AUC (Area Under the ROC curve) nos proporciona el modelo anterior?

Rpta: 0,873194

as.numeric(performance(pred,"auc")@y.values)
## [1] 0.873194

Cargando mammals.csv

setwd("/home/jtorres/master/Actividad 2")
mammals <- read.csv("mammals.csv")
set.seed(1000)
splitMammals <- sample.split(mammals$sleep_total, SplitRatio = 0.85)
trainMammals <- subset(mammals, splitMammals==TRUE)
testMammals <- subset(mammals, splitMammals==FALSE)
mammalsTree <- rpart(sleep_total ~.,data=trainMammals,method="class",minbucket=5)

Pregunta 6

Pregunta 2.6: Según el modelo, ¿cuántas horas duerme un animal herbívoro que tiene un peso de 40 para su cuerpo y 0.5 para su cerebro? Rpta: 5,3

prp(mammalsTree)

Pregunta 7

¿Cuál es el error absoluto medio de nuestro método? Rpta: 3,661538

MAE <- function(actual, predicted) { mean(abs(actual-predicted))}
mammalsPrediction <- predict(mammalsTree, newdata = testMammals, type = "class")
mammalsPrediction <- as.numeric(as.character(mammalsPrediction))
print(MAE(testMammals$sleep_total,mammalsPrediction))
## [1] 3.661538

Pregunta 8

Pregunta 2.8: ¿Qué valor cp nos indica el método como el mejor? Rpta: 0,05

numFolds <- trainControl( method = "cv", number = 10 )
cpGrid <- expand.grid( .cp = seq(0.01,0.1,0.005)) 
train(sleep_total ~ ., data = trainMammals, method = "rpart", trControl = numFolds,tuneGrid=cpGrid, na.action=na.pass )
## Warning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :
## There were missing values in resampled performance measures.
## CART 
## 
## 70 samples
##  3 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 62, 62, 63, 64, 63, 63, ... 
## Resampling results across tuning parameters:
## 
##   cp     RMSE      Rsquared   MAE     
##   0.010  3.742437  0.3853104  3.040054
##   0.015  3.734689  0.3879087  3.041145
##   0.020  3.658417  0.4076901  2.993368
##   0.025  3.611900  0.4201867  2.973273
##   0.030  3.611900  0.4201867  2.973273
##   0.035  3.611900  0.4201867  2.973273
##   0.040  3.611900  0.4201867  2.973273
##   0.045  3.611900  0.4201867  2.973273
##   0.050  3.611900  0.4201867  2.973273
##   0.055  3.674383  0.4190069  3.005381
##   0.060  3.674383  0.4190069  3.005381
##   0.065  3.698309  0.4127949  3.022645
##   0.070  3.698309  0.4127949  3.022645
##   0.075  3.784958  0.4096302  3.062983
##   0.080  3.784958  0.4096302  3.062983
##   0.085  3.784958  0.4096302  3.062983
##   0.090  3.784958  0.4096302  3.062983
##   0.095  3.834752  0.4186537  3.052363
##   0.100  3.846236  0.4249075  3.048872
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was cp = 0.05.

Pregunta 9

¿Cuál es ahora el error absoluto medio de nuestro método? Rpta: 3,046154

cp_optimo <- 0.05
mammalsTreeCV <- rpart(sleep_total~., data=trainMammals, method="class", cp=cp_optimo)

mammalsPredictionCV <- predict(mammalsTreeCV, newdata = testMammals, type = "class")
mammalsPredictionCV <- as.numeric(as.character(mammalsPredictionCV))
print(MAE(testMammals$sleep_total,mammalsPredictionCV))
## [1] 3.046154

Pregunta 10

En la instrucción randomForest(target ~ ., data = train, ntree=200, nodesize=25) el parámetro ntree= 200 indica que: a) Se generará un árbol de 200 niveles de profundidad. b) Se generarán 200 árboles aleatorios y se escogerá el que tenga el valor AUC (Area Under the ROC curve) más grande. c) Se generarán 200 árboles aleatorios y se escogerá el que tenga mejor precisión global. d) Se generarán 200 árboles aleatorios y se predecirá escogiendo el valor más repetido en la predicción de cada uno de ellos

Rpta: d