Revisar documento pdf,csv y puedes cargar el archivo en R markdown Ir a enlace de recursos
library(caTools)
library(ROCR)
library(rpart)
library(rpart.plot)
library(caret, silent)
## Loading required package: lattice
## Loading required package: ggplot2
library(e1071, silent)
setwd("/home/jtorres/master/Actividad 2")
diabetes <- read.csv("diabetes.csv")
¿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.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 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 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 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
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 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)
¿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 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.
¿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
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
http://adv-r.had.co.nz/Rcpp.html
https://www.youtube.com/watch?v=qcvAqAH60Yw
https://www.youtube.com/channel/UCtYLUTtgS3k1Fg4y5tAhLbw
https://github.com/StatQuest/roc_and_auc_demo/blob/master/roc_and_auc_demo.R
https://www.displayr.com/extracting-results-from-tables-as-r-outputs/
https://www.geeksforgeeks.org/convert-an-object-into-a-vector-in-r-programming-as-vector-function/
https://www.geeksforgeeks.org/convert-an-object-into-a-matrix-in-r-programming-as-matrix-function/
https://rpubs.com/Cesar_AHN/operaciones_con_vectores_aritmeticas_estadisticas_graficos