P1 Instale y cargue todos los paquetes que necesita para trabajar con data.table, modelos de predicción de regresión y CART y Cross-Validation.
rm(list=ls())
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.4 ✓ purrr 0.3.4
## ✓ tibble 3.1.1 ✓ dplyr 1.0.5
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(data.table)
##
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
##
## between, first, last
## The following object is masked from 'package:purrr':
##
## transpose
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(dbscan)
library(ggplot2)
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
library(rpart)
library(rpart.plot)
library(moderndive)
library(knitr)
library(jtools)
P2 Cargar base de datos Chile que viene en el paquete car. Recuerde que la base debe transofrmarse a data.table y que con ?Chile puede ver más detalles de esta base.
Chile= Chile
?Chile
class(Chile)
## [1] "data.frame"
Chile=as.data.table(Chile)
class(Chile)
## [1] "data.table" "data.frame"
P3 Cree una muestra de la base que solo contenga los votos Yes y No. A partir de ahora todo el trabajo se realizará con esa base!
Chile2=Chile[!vote=="NA"]
Chile2=Chile2[!vote=="U"]
P4 Plantee dos modelos de predcción distintos que logren predecir en ingreso de las personas. (recuerde eliminar las observaciones que tengan NA en las variables de interés)
Chile2=Chile2[!income=="NA"]
Chile2=Chile2[!education=="NA"]
Chile2=Chile2[!sex=="NA"]
reg_sex <- lm(income~sex , data = Chile2)
reg_education <- lm(income~education , data = Chile2)
get_regression_table(reg_sex) %>% kable()
| term | estimate | std_error | statistic | p_value | lower_ci | upper_ci |
|---|---|---|---|---|---|---|
| intercept | 34737.418 | 1391.629 | 24.962 | 0.000 | 32008.12 | 37466.717 |
| sexM | 3376.617 | 1939.933 | 1.741 | 0.082 | -428.03 | 7181.264 |
P5 Evalue cuál modelo predice mejor el ingreso. Sea claro/a con su criterio de evaluación. Recuerde que no es lo mismo predecir dentro de muestra que fuera de muestra.
pred <- predict(reg_sex)
Chile2[,prediccion:=predict(reg_sex)]
prediccion_1 <- data.table(RMSE=RMSE(pred, Chile2$income), MAE=MAE (pred,Chile2$income))
prediccion_1
## RMSE MAE
## 1: 42049.98 27304.49
pred2 <- predict(reg_education)
prediccion_2 <- data.table (RMSE=RMSE(pred2, Chile2$income), MAE=MAE (pred2, Chile2$income))
prediccion_2
## RMSE MAE
## 1: 37573.43 24119.36
P6 Ahora queremos predecir el voto de una persona en el plebiscito, es decir, si el computador es premium yes o no utilizando árboles de decisión.
str(Chile2)
## Classes 'data.table' and 'data.frame': 1883 obs. of 9 variables:
## $ region : Factor w/ 5 levels "C","M","N","S",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ population: int 175000 175000 175000 175000 175000 175000 175000 175000 175000 175000 ...
## $ sex : Factor w/ 2 levels "F","M": 2 2 1 1 1 1 2 1 2 2 ...
## $ age : int 65 29 38 49 23 28 26 24 41 64 ...
## $ education : Factor w/ 3 levels "P","PS","S": 1 2 1 1 3 1 2 3 1 1 ...
## $ income : int 35000 7500 15000 35000 35000 7500 35000 15000 15000 15000 ...
## $ statusquo : num 1.01 -1.3 1.23 -1.03 -1.1 ...
## $ vote : Factor w/ 4 levels "A","N","U","Y": 4 2 4 2 2 2 2 2 2 4 ...
## $ prediccion: num 38114 38114 34737 34737 34737 ...
## - attr(*, ".internal.selfref")=<externalptr>
arbol_1 <- rpart(vote~ region + sex + education, data=Chile2, method = "class")
rpart.plot(arbol_1, main = "Árbol de Clasificación: Votos")
P7 Explique los resultados de su modelo. Ahora utilizaremos el método de validación cruzada para estimar la precisión de su modelo.
En cuanto a las personas que tienen educacion la probabilidad de que voten que no es de un 62%, en cuanto a las personas que no presentan educacion el 38% votara que si, de los cuales los que viven en region solo un 19% votara si y de los que viven en Santiago un 20%.Las personas del sexo femenino votaran que no con probabilidad de un 9% y que si con 10%.
P8 Cree el set de entrenamiento y de prueba. Utilice set.seed(1234). Muestre los resultados del set de entrenamiento.
set.seed(1234)
div <- createDataPartition(Chile2$vote,times = 1, p=0.8, list=F)
## Warning in createDataPartition(Chile2$vote, times = 1, p = 0.8, list = F): Some
## classes have no records ( U ) and these will be ignored
train <- Chile2[div,]
test <- Chile2[-div,]
arbol2 <- rpart(vote~sex+education+region, data=train, method = "class")
rpart.plot(arbol2)
P9 Calcule la predicción del modelo
prediccion <- predict(arbol2, newdata = test, type = "class")
P10 Calcule la matriz de confusión y la precisión del modelo. Muestre y explique ambos.
matriz <- table(test$vote, prediccion)
matriz
## prediccion
## A N U Y
## A 0 21 0 14
## N 0 120 0 53
## U 0 0 0 0
## Y 0 77 0 90
precision <- sum(diag(matriz))/sum(matriz)
precision
## [1] 0.56