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. (1 punto)
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!

library(data.table)
library(ggplot2)
library(moderndive)
library(knitr)
library(jtools)
library(caret)
library(rpart.plot)
library(rpart)
library(factoextra)
library(dbscan)

heart <- fread("C:/Users/Constanza/Downloads/heart.csv")

P2

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.

heart[,trtbps:=as.numeric(trtbps)]
heart[,age:=as.numeric(age)]
heart[,sex:=as.factor(sex)]
heart[,chol:=as.numeric(chol)]

reg1 <- lm(trtbps ~ sex + chol , data = heart)
pred1<-predict(reg1) 
heart[,pred1:=predict(reg1)]

reg2 <- lm(trtbps ~ sex + chol + age, data = heart)
pred2<-predict(reg2) 
heart[,pred2:=predict(reg2)]

predicciones1<-data.table(RMSE=RMSE(pred1,heart$trtbps), MAE=MAE(pred1,heart$trtbps))
predicciones1
##        RMSE      MAE
## 1: 17.36621 13.45608
predicciones2<-data.table(RMSE=RMSE(pred2,heart$trtbps), MAE=MAE(pred2,heart$trtbps))
predicciones2
##        RMSE      MAE
## 1: 16.77065 12.88579

El modelo de regresión 2 presenta un menor RMSE y MAE, por lo tanto, este modelo tiene un menor error de predicción dentro de muestra y 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?. (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 ~ sex + chol,data=heart,method="lm",trControl= setupKCV, na.action = na.omit)

predkfolds2<-train(trtbps ~ sex + chol + age,data=heart,method="lm",trControl= setupKCV, na.action = na.omit)

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     
##   17.45799  0.01936538  13.54237
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds2)
## Linear Regression 
## 
## 303 samples
##   3 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 243, 241, 242, 243, 243 
## Resampling results:
## 
##   RMSE      Rsquared    MAE     
##   16.76537  0.08334449  12.98644
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Sí se mantienen las conclusiones anteriores. El modelo 2 presenta un menor RMSE y MAE, además de un R-cuadrado mayor, por lo que este modelo tiene un menor error de predicción dentro de muestra y predice 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. (5 puntos)
Pista1: Si existen outliers recuerde eliminarlos, para esto cree un nuevo objeto donde se encuentren estas dos variables.

heart[,trtbps:=as.numeric(trtbps)]
heart[,age:=as.numeric(age)]

datos<-heart[,.(age,trtbps)]

Ver y eliminar outliers.

ggplot(datos,  aes(x=age, y=trtbps)) + geom_point() + labs(title="Presión arterial")

datos <- datos[!trtbps>180,]

Hacer gráfico de codo.

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

Hacer cluster.

k1<-kmeans(x=datos,centers=5,nstart=25)

fviz_cluster(k1,data=datos,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é. (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.

Modelo 1

# Crear modelo 1
heart[,output:=as.integer(output)]
heart[,sex:=as.integer(sex)]
heart[,age:=as.integer(age)]
heart[,trtbps:=as.integer(trtbps)]

arbol1 <- rpart(output ~ age + sex + trtbps, data=heart, method = "class")
rpart.plot(arbol1, main = "Árbol de Clasificación 1: Ataque al corazón")

# Crear set de entrenamiento y prueba
set.seed(12345)
div <- createDataPartition(heart$output, times = 1, p = 0.8, list = F) 
train <- heart[div,] 
test <- heart[-div,]

# Graficar árbol considerando solo entrenamiento
arbol1_train <- rpart(output ~ age + sex + trtbps, data = train, method = "class")
rpart.plot(arbol1_train)

# Evaluar el modelo con los datos de prueba/testeo
prediccion_1 <- predict(arbol1_train, newdata = test, type = "class")
test$prediccion_1 <- prediccion_1

# Crear matriz de confusión
matriz <- table(test$output, prediccion_1)
matriz
##    prediccion_1
##      0  1
##   0 14 15
##   1  9 22
# Calcular precisión del modelo 1
precision <- sum(diag(matriz))/sum(matriz)
precision 
## [1] 0.6

Modelo 2

heart[,output:=as.integer(output)]
heart[,sex:=as.integer(sex)]
heart[,restecg:=as.integer(restecg)]
heart[,thalachh:=as.integer(thalachh)]
heart[,cp:=as.integer(cp)]

# Crear modelo 2
arbol2 <- rpart(output ~ sex + restecg + thalachh + cp, data=heart, method = "class")
rpart.plot(arbol2, main = "Árbol de Clasificación 2: Ataque al corazón")

# Crear set de entrenamiento y prueba
set.seed(12345)
div <- createDataPartition(heart$output, times = 1, p = 0.8, list = F) 
train <- heart[div,] 
test <- heart[-div,]

# Graficar árbol considerando solo entrenamiento
arbol2_train <- rpart(output ~ sex + restecg + thalachh + cp, data = train, method = "class")
rpart.plot(arbol2_train)

# Evaluar el modelo con los datos de prueba/testeo
prediccion_2 <- predict(arbol2_train, newdata = test, type = "class")
test$prediccion_2 <- prediccion_2

# Crear matriz de confusión
matriz <- table(test$output, prediccion_2)
matriz
##    prediccion_2
##      0  1
##   0 25  4
##   1 14 17
# Calcular precisión del modelo 2
precision <- sum(diag(matriz))/sum(matriz)
precision 
## [1] 0.7

Podemos concluir que el modelo 2 es mejor ya que gracias a la validación fuera de muestra podemos notar que su nivel de precisión es de un 70% mientras que la precisión del modelo 1 es sólo de 60%.

P6

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

Respuesta:
El Spatial Analytics es importante ya que permite cambiar el pradigma individualista que tenía la economía y otras ciencias, dándonos a entender que hay cosas de terceros que nos rodean y que afectan a cada individuo (externalidades espaciales) y que debemos comprender cómo afectan para poder analizar bien los datos. En otras palabras, el espacio es una variable más que es relevante para el análsis de los datos y que muchas veces no se toma en cuenta, pero el Spatial Analytics nos permite incluir esa variable y utilizarla paa entender mejor los datos.Un ejemplo dado por el profe fue que a veces en los histogramas vemos datos que parecen iguales pero al mostrar esos mismos datos en un mapa vemos cómo se diferencian.

P7

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

Respuesta:
Algunos de los ejemplos que mencionó el profesor Alexis Montecinos son:
1. Reconocimiento de imágenes en medicina (Ej. radiografía de neumonía tiene opacidades y el algoritmo es capaz de reconocerlo)
2. Reconocimiento de voz - Cocktail party problem (el algoritmo reconoce patrones de la voz y limpia el sonido)
3. Reinforcement learning (Se castiga/premia el algoritmo para que mejore su funcionamiento)