Control 3: Métodos estadísticos en DS

Este control tiene como finalidad evaluar la utilización de distintos métodos estadísticos enseñados en clases (Regresión Lineal, CV, Cluster, CART). Se evaluará la correcta ejecución del código y el uso eficiente de las herramientas de codificación entregadas.

Formato de rmarkdown

El formato de respuesta es el siguiente:

  1. Antes de la respuesta debes agregar un encabezado de tercer nivel (###) con P y el número de pregunta.
  2. Abajo del encabezado, debe estar escrita la pregunta.
  3. Agregar la linea de código.
  4. Agregar el output de ser necesario.
  5. Si requieres agregar alguna respuesta analítica, agregar al final de la pregunta (después del output).
  6. El nombre del archivo .rmd debe tener la siguiente forma: Control 3 - Apellido.
  7. Todos los integrantes del grupo deben enviar tanto el Rmarkdown como el link de Rpubs.
  8. En la parte de autor deben ir los nombres de todos los integrantes del grupo.

El formato tiene un puntaje asignado dentro de la nota. 3 puntos

Parte 1: Predicción ataques cárdiacos

Suponga que Ud. trabaja como analista en conjunto con médicos del área cardiovascular. Estos médicos le entregan una base de datos cuyas observaciones corresponde a personas que han tenido o no un ataque al corazón.

Cuenta con el siguiente diccionario de variable:

Para comenzar con su análisis:

  1. Cargue todos los paquetes que necesita para trabajar con data.table, modelos de predicción de regresión, árboles de decisión, cluster y Cross-Validation. Además, cargue la base de datos. (1 punto)
library(data.table)
library(caret)
library(rpart)
library(rpart.plot)
library(factoextra)
library(leaflet)

base <- fread("heart.csv")

Importante: Verifique la clase (class) de las variables que vaya a utilizar en todos sus modelos y si es necesario transformarla a numérica o factor, hágalo!

  1. Realice dos modelos de regresión lineal multiple para predecir la Presión arterial en reposo ¿Cuál predice mejor dentro de muestra?. (8 puntos)

Observación: No obtendrá puntaje si compara un modelo de regresión de una variable.

str(base)
## Classes 'data.table' and 'data.frame':   303 obs. of  14 variables:
##  $ age     : int  63 37 41 56 57 57 56 44 52 57 ...
##  $ sex     : int  1 1 0 1 0 1 0 1 1 1 ...
##  $ cp      : int  3 2 1 1 0 0 1 1 2 2 ...
##  $ trtbps  : int  145 130 130 120 120 140 140 120 172 150 ...
##  $ chol    : int  233 250 204 236 354 192 294 263 199 168 ...
##  $ fbs     : int  1 0 0 0 0 0 0 0 1 0 ...
##  $ restecg : int  0 1 0 1 1 1 0 1 1 1 ...
##  $ thalachh: int  150 187 172 178 163 148 153 173 162 174 ...
##  $ exng    : int  0 0 0 0 1 0 0 0 0 0 ...
##  $ oldpeak : num  2.3 3.5 1.4 0.8 0.6 0.4 1.3 0 0.5 1.6 ...
##  $ slp     : int  0 0 2 2 2 1 1 2 2 2 ...
##  $ caa     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ thall   : int  1 2 2 2 2 1 2 3 3 2 ...
##  $ output  : int  1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, ".internal.selfref")=<externalptr>
base$fbs<-as.factor(base$fbs)
base$sex<-as.factor(base$sex)
base$cp<-as.factor(base$cp)
base$restecg<-as.factor(base$restecg)
base$exng<-as.factor(base$exng)
base$slp<-as.factor(base$slp)
base$caa<-as.factor(base$caa)
base$thall<-as.factor(base$thall)
base$output<-as.factor(base$output)
reg1<-lm(data=base,formula = trtbps~age+sex)
summary(reg1)
## 
## Call:
## lm(formula = trtbps ~ age + sex, data = base)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -38.016 -11.174  -0.813  10.526  66.744 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 103.3614     6.2298  16.591  < 2e-16 ***
## age           0.5338     0.1075   4.965 1.16e-06 ***
## sex1         -1.1123     2.0955  -0.531    0.596    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.89 on 300 degrees of freedom
## Multiple R-squared:  0.0789, Adjusted R-squared:  0.07276 
## F-statistic: 12.85 on 2 and 300 DF,  p-value: 4.425e-06
reg2<-lm(data=base,formula = trtbps~age+sex+chol +fbs +thalachh)
summary(reg2)
## 
## Call:
## lm(formula = trtbps ~ age + sex + chol + fbs + thalachh, data = base)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.810 -11.848  -1.483  10.108  60.817 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 90.48869   11.85487   7.633 3.15e-13 ***
## age          0.52476    0.12008   4.370 1.72e-05 ***
## sex1        -0.82973    2.11866  -0.392  0.69561    
## chol         0.02011    0.01936   1.039  0.29969    
## fbs1         7.15431    2.72727   2.623  0.00916 ** 
## thalachh     0.04783    0.04613   1.037  0.30062    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.71 on 297 degrees of freedom
## Multiple R-squared:  0.1074, Adjusted R-squared:  0.09234 
## F-statistic: 7.144 on 5 and 297 DF,  p-value: 2.492e-06
pred1<-predict(reg1)

predicciones1<-data.table(RMSE=RMSE(pred1,base$trtbps),
                         MAE=MAE(pred1,base$trtbps))
pred2<-predict(reg2)

predicciones2<-data.table(RMSE=RMSE(pred2,base$trtbps),
                         MAE=MAE(pred2,base$trtbps))
predicciones1
##        RMSE     MAE
## 1: 16.80423 12.9211
predicciones2
##        RMSE      MAE
## 1: 16.54257 12.84766
  1. Realice validación cruzada (CV) a los modelos de la pregunta anterior por el método K-folds con 5 folds. ¿Se mantienen las conclusiones anteriores?. (8 putos)

Pista1: Recuerde setear la semilla set.seed(12345).

Pista2: Si existen variables con NA recuerde que puede excluirlas esas observaciones del análisis, pero no las elimine.

set.seed(12345)
setupKCV <- trainControl(method = "cv" , number = 5)

predkfolds1<-train(trtbps~age+sex,data=base,method="lm",na.action = 'na.exclude',trControl= setupKCV)

predkfolds2<-train(trtbps~age+sex+chol+fbs+thalachh,data=base,na.action = 'na.exclude',method="lm",trControl= setupKCV)

print(predkfolds1)
## Linear Regression 
## 
## 303 samples
##   2 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 242, 242, 242, 244, 242 
## Resampling results:
## 
##   RMSE      Rsquared    MAE     
##   16.86589  0.08178795  12.95736
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds2)
## Linear Regression 
## 
## 303 samples
##   5 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 243, 241, 242, 243, 243 
## Resampling results:
## 
##   RMSE     Rsquared   MAE     
##   16.6171  0.1091958  13.07795
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
  1. Proponga dos variables sobre las cuales segmentar la muestra, en orden de hacer análisis de clusters con el método de kmeans. Muestre sus resultados gráficamente. (5 puntos)

Pista1: Si existen outliers recuerde eliminarlos, para esto cree un nuevo objeto donde se encuentren estas dos variables.

base2<-base[,.(trtbps,chol)]

k1<-kmeans(x=base2,centers=3,nstart=25)

fviz_cluster(k1,data=base2,geom = "point")

base$clkme<-k1$cluster
  1. Realice dos modelos de árboles de clasificación de la variable output. Pruebe cuál modelo clasifica mejor con validación cruzada. Entrene el modelo con un 80% de la muestra y testee con el 20% restante. Explicite qué modelo es mejor y porqué. (12 puntos)

Importante: Recuerde setear la semilla set.seed(12345).

Observación: No obtendrá puntaje si compara un modelo de clasificación de una variable.

set.seed(12345)
ind<-createDataPartition(base$output,times = 1,p = 0.8,list = F)

train<-data.frame(base)[ind,]
test<-data.frame(base)[-ind,]

arb1<-rpart(output~sex+age,data = train,method = "class")
arb2<-rpart(output~. ,data = train,method = "class")
rpart.plot(arb1)

rpart.plot(arb2)

prec<-function(x,y,z) {
  pred <- predict(x, y, type = "class")
  matconf <- table(y[,z], pred)
  test<- sum(diag(matconf)) / sum(matconf)
  test
}

prec(arb1,test,"output")
## [1] 0.6666667
prec(arb2,test,"output")
## [1] 0.8

Parte 2: Charla

  1. Dada la charla del profesor Esteban Lopéz, explique brevemente, ¿Por qué es importante Spatial Analytics?

  2. Mencioné tres ejemplos del machine learning, intesligencia artificial, que señaló el profesor Alexis Montecinos.