library(readxl)
Propietarios <- read_excel("Propietarios.xlsx")

K-vecinos más cercanos

Propietarios <- data.frame(Propietarios)
library(dplyr)
Propietarios <- Propietarios%>%
    mutate(Clase = as.factor(Clase))
library(caret)
folds         <- createFolds(Propietarios$Clase, k = 4)
entrenamiento <- Propietarios[c(folds$Fold1,folds$Fold2,folds$Fold3),]
prueba        <- Propietarios[folds$Fold4,]
library(kknn)
modelo <- train.kknn(Clase ~ ., data = entrenamiento, kmax = 4)
modelo
## 
## Call:
## train.kknn(formula = Clase ~ ., data = entrenamiento, kmax = 4)
## 
## Type of response variable: nominal
## Minimal misclassification: 0.05555556
## Best kernel: optimal
## Best k: 4
library(stats)
Pres     <- predict(modelo, entrenamiento[,-4])
tt       <- table(entrenamiento[,4],Pres)
tt
##                 Pres
##                  No propietario Propietario
##   No propietario              9           0
##   Propietario                 0           9
TA <- (sum(diag(tt)))/sum(tt)
round(TA,2)
## [1] 1

Se puede observar una precisión del 100% y un error del 0%.

Pred    <- predict(modelo, prueba[,-4])
table   <- table(prueba[,4],Pred)
table
##                 Pred
##                  No propietario Propietario
##   No propietario              3           0
##   Propietario                 0           3
clas    <- (sum(diag(table)))/sum(table)
clas
## [1] 1

Encontramos que el modelo logra predecir un 67% los datos de prueba.

plot(Propietarios[,1:2],main="Propietarios",xlab="Ingreso", ylab="Tamano ",col=Propietarios$Clase,pch=24)
 legend("topright",legend=c("1","2"),pch=19,col=c(1,2,3))

Árboles de decisión

data    <- Propietarios
N       <- nrow(data)
n       <- round(N*0.83)
set.seed(2468)
indices       <- sample(1:N,n)
entrenamiento <- data[indices,]
prueba        <- data[-indices,]
library(rpart)
modelo1 <- rpart(Clase ~ ., data = entrenamiento)
modelo1
## n= 20 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 20 10 No propietario (0.5000000 0.5000000)  
##   2) Hogar>=12.5 10  0 No propietario (1.0000000 0.0000000) *
##   3) Hogar< 12.5 10  0 Propietario (0.0000000 1.0000000) *
library(rpart.plot)     
rpart.plot(modelo1)

Se pudo observar que utilizando la variable Clase (Propietario y No Propietario), y cuando Hogar es mayor que 13 todos los datos son propietario.

pred<- predict(modelo1,entrenamiento[,-4],type="class")
tt<- table(pred,entrenamiento[,4])
tt
##                 
## pred             No propietario Propietario
##   No propietario             10           0
##   Propietario                 0          10
TA <- (sum(diag(tt)))/sum(tt) 
round(TA,2)
## [1] 1

La tassa de acierto es de un 100%. Puede significar que el modelo ha predicho correctamente todas las instancias en el conjunto de datos de prueba “perfectamente”, pero este caso es porque hay muy pocos datos.

Pred1    <- predict(modelo1, prueba[,-4],type="class")
table    <- table(prueba[,4],Pred1)
table
##                 Pred1
##                  No propietario Propietario
##   No propietario              2           0
##   Propietario                 0           2
(sum(diag(table)))/sum(table)
## [1] 1
library(C50)
modelo2 <- C5.0(Clase ~ ., data = entrenamiento)
modelo2
## 
## Call:
## C5.0.formula(formula = Clase ~ ., data = entrenamiento)
## 
## Classification Tree
## Number of samples: 20 
## Number of predictors: 3 
## 
## Tree size: 2 
## 
## Non-standard options: attempt to group attributes
plot(modelo2)