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.
rmarkdownEl formato de respuesta es el siguiente:
El formato tiene un puntaje asignado dentro de la nota. 3 puntos
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:
age: Edad del paciente.sex: Sexo del paciente.cp: Chest pain. Tipo de dolor de pecho.
trtbps: Presión arterial en reposo (en mm Hg).chol: Colesterol en mg / dl obtenido a través del sensor de IMC.fbs: Variable dummy que indica si el azúcar en sangre en ayunas es mayor a 120 mg / dl
restecg: Resultados electrocardiográficos en reposo.
thalachh: Frecuencia cardíaca máxima alcanzada.exng: Variable dummy de angina inducida por ejercicio.
oldpeak: Peak anterior.slp: Pendiente.caa: Número de vasos principales del corazón (1-3)thall: Tasa de thal, proveniente de un trastorno sanguíneo llamado talasemia.output: Variable objetivo. Dummy de ataque al corazón.
Para comenzar con su análisis:
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!
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
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
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
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
Dada la charla del profesor Esteban Lopéz, explique brevemente, ¿Por qué es importante Spatial Analytics?
Mencioné tres ejemplos del machine learning, intesligencia artificial, que señaló el profesor Alexis Montecinos.