Parte 1

P1

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.

library(data.table)
library(jtools)
library(caret)
library(rpart)
library(rpart.plot)
library(factoextra)
library(dbscan)
library(ggplot2)
library(leaflet)
library(car)
heart = fread('/Users/hassansantiago/Downloads/heart.csv')
class(heart$age)
class(heart$trtbps)
class(heart$chol)
class(heart$sex)
class(heart$cp)
class(heart$restecg)
heart$cp = as.factor(heart$cp)
heart$sex = as.factor(heart$sex)
heart$age = as.numeric(heart$age)
heart$chol = as.numeric(heart$chol)
heart$restecg = as.factor(heart$restecg)
heart$trtbps = as.numeric(heart$trtbps)

P2

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

reg1 = lm(data = heart, formula = trtbps~ age+ chol)

summ(reg1)
## MODEL INFO:
## Observations: 303
## Dependent Variable: trtbps
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(2,300) = 13.44, p = 0.00
## R² = 0.08
## Adj. R² = 0.08 
## 
## Standard errors: OLS
## ------------------------------------------------
##                      Est.   S.E.   t val.      p
## ----------------- ------- ------ -------- ------
## (Intercept)         98.25   6.82    14.40   0.00
## age                  0.51   0.11     4.68   0.00
## chol                 0.02   0.02     1.17   0.24
## ------------------------------------------------
reg2 = lm(data = heart, formula = trtbps~ age+ chol+ sex+ cp+ restecg)
summ(reg2)
## MODEL INFO:
## Observations: 303
## Dependent Variable: trtbps
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(5,297) = 6.13, p = 0.00
## R² = 0.09
## Adj. R² = 0.08 
## 
## Standard errors: OLS
## -------------------------------------------------
##                       Est.   S.E.   t val.      p
## ----------------- -------- ------ -------- ------
## (Intercept)         100.25   7.88    12.72   0.00
## age                   0.50   0.11     4.58   0.00
## chol                  0.02   0.02     0.98   0.33
## sex                  -0.79   2.14    -0.37   0.71
## cp                    1.23   0.95     1.30   0.19
## restecg              -2.66   1.88    -1.41   0.16
## -------------------------------------------------
predic1<-predict(reg1)
heart[,predic1:=predict(reg1)]

predicciones1<-data.table(RMSE=RMSE(predic1,heart$trtbps),
                         MAE=MAE(predic1,heart$trtbps))
predicciones1
##        RMSE     MAE
## 1: 16.77357 12.8915
predic2<-predict(reg2)
heart[,predic2:=predict(reg2)]

predicciones2<-data.table(RMSE=RMSE(predic2,heart$trtbps),
                         MAE=MAE(predic2,heart$trtbps))
predicciones2
##        RMSE      MAE
## 1: 16.66968 12.80486

Dado los R cuadrado de las dos regresiones, se puede concluir que la regresión 2 (reg2) predice de mejor forma la estimación de la presión arterial en reposo con un 11% comparándolo al R cuadrado de la regresión 1 (reg1) que tiene un valor de 8%. Del mismo modo, al comparar las predicciones de las dos regresiones se observa que el segundo modelo es mejor dado que tiene un RMSE menor que el primer modelo; esto significa que la distancia entre lo observado y lo predicho es menor por ende predice mejor.

P3

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?

set.seed( 12345)
heart<-heart[!is.na(age)]
heart<-heart[!is.na(chol)]
heart<-heart[!is.na(sex)]
heart<-heart[!is.na(cp)]
heart<-heart[!is.na(trtbps)]
heart<-heart[!is.na(restecg)]
setupKCV = trainControl(method = 'cv', number = 5 )
pred1= train(trtbps~ age+ chol, data= heart, method= "lm", trControl= setupKCV)
pred2= train(trtbps~ age+ chol+ sex+ cp+ restecg, data= heart, method= "lm", trControl= setupKCV)
 print(pred1)
## 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.85443  0.08385918  12.96532
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(pred2)
## 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.7246  0.08859965  12.95651
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Sí, se mantienen las mismas conclusiones, la regresión 2 estima de mejor manera que la regresión 1, pero con una menor diferencia; con el método de cross validación el r cuadrado y el RMSE tienen una menor diferencia entre ellos. El modelo 2 sigue siendo mejor pero ya no tanto mejor.

P4

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.

dataheart = heart[,.(age,trtbps)]

ggplot(data=heart,aes(x=age, y=trtbps)) + geom_point()

fviz_nbclust(x = dataheart, FUNcluster = kmeans, method = "wss", k.max = 12, diss= get_dist(dataheart, method = "euclidean"), nstart = 50)

k1 = kmeans( x= dataheart, centers = 5, nstart= 80)
fviz_cluster(object = k1,data= dataheart, geom = "point")

P5

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é.

modelo 1

set.seed(12345)
arbol1= rpart(output~., data= heart, method = "class")
rpart.plot(arbol1, main = "arbol de clasificación: ataque al corazón")

div = createDataPartition(heart$output, times = 1, p= 0.8, list = F)

entrenamiento<- heart[div,] 
test<- heart[-div,]
arbol2 = rpart(output~., data = entrenamiento, method ="class")
rpart.plot(arbol2)

predccion1 = predict(arbol2, newdata= test, type = "class")
matriz= table(test$output, predccion1)
matriz
##    predccion1
##      0  1
##   0 20  3
##   1  5 32
precision = sum(diag(matriz))/sum(matriz)
precision
## [1] 0.8666667

El modelo tiene un porcetaje de acierto de 86,7%

modelo 2

set.seed(12345)
heart_2= heart[,c(6:14)]
arbol3= rpart(output~., data= heart_2, method = "class")
rpart.plot(arbol3, main = "arbol de clasificación: ataque al corazón")

div1 = createDataPartition(heart_2$output, times = 1, p= 0.8, list = F)

entrena<- heart_2[div,] 
test2<- heart_2[-div,]
arbol4 = rpart(output~., data = entrena, method ="class")
rpart.plot(arbol4)

predccion2 = predict(arbol4, newdata= test2, type = "class")
matriz2= table(test2$output, predccion2)
matriz2
##    predccion2
##      0  1
##   0 17  6
##   1  8 29
precision2 = sum(diag(matriz2))/sum(matriz2)
precision2
## [1] 0.7666667

El modelo 2 tiene un porcentaje de acierto de 76,67%. Por otro lado, el primer modelo explica con un mayor porentaje el riesgo de sufrir un atauqe al corazon (86.7% >76.67%)

parte 2

P6

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

La ciencia del Spatial Analytics nos ayuda a entender y a dar sentido a los datos los cuales tienen un componenete espacial, de esta manera se pueden realizar mapas, imágenes satelitales, datos de viviendas,toma de decisiones estratégicas respecto a la ubicación, entre muchas otras aplicaciones. Pero es mucho más que esto, porque provee un análisis explicativo de qué esta pasando, dónde esta pasando, por qué esta pasando y dónde debería estar pasando; ya que descubre patrones en la información (data) que otorgan una dimensión extra y da más profundidad sobre la data, sus causales y sus antecedentes.

P7

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

  1. Reconocimiento de imágenes en la medicina: el algoritmo reconoce la presencia de patrones que se asocian a enfermedades notables en las imágenes, ej.:neumonía.

  2. Reconocimiento de voz: el algoritmo reconoce diversos patrones en la voz y logra distinguir una de otra, filtrando, reconociendo y limpiando el sonido.

  3. Análisis y predicción de Retornos: analiza tendencias en la data estudiando momentos de alza y de baja y así poder predecir panoramas próximos. De esta manera maximiza el retorno de la empresa, minimizando los riesgos.