Cargue todos los paquetes que necesita para trabajar con data.table, modelos de predicción de regresión, CART, 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(caret)
library(rpart)
library(rpart.plot)
library(dbscan)
library(factoextra)
base <- fread("Mcdonalds.csv")
base<-as.data.table(base)
base$Grasas_totales<-as.numeric(base$Grasas_totales)
base$Grasas_saturadas<-as.numeric(base$Grasas_saturadas)
base$Grasas_trans<-as.numeric(base$Grasas_trans)
Realice dos modelos de regresión lineal para predecir las calorÃas de los alimentos ¿Cuál predice mejor dentro de muestra?. Observación: No obtendrá puntaje si compara un modelo de regresión de una variable.
reg1<-lm(formula=Calorias~Grasas_totales+Carbohidratos+Proteina+Colesterol,data=base)
summary(reg1)
##
## Call:
## lm(formula = Calorias ~ Grasas_totales + Carbohidratos + Proteina +
## Colesterol, data = base)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.0833 -2.6913 0.7658 3.4120 10.8311
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.102064 0.752238 -2.794 0.00564 **
## Grasas_totales 9.057554 0.053387 169.659 < 2e-16 ***
## Carbohidratos 3.976124 0.014374 276.621 < 2e-16 ***
## Proteina 4.049033 0.054978 73.649 < 2e-16 ***
## Colesterol -0.006896 0.005413 -1.274 0.20394
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.551 on 231 degrees of freedom
## (24 observations deleted due to missingness)
## Multiple R-squared: 0.9995, Adjusted R-squared: 0.9995
## F-statistic: 1.15e+05 on 4 and 231 DF, p-value: < 2.2e-16
reg2<-lm(formula=Calorias~Grasas_totales+Carbohidratos+Proteina+Grasas_saturadas+Colesterol,data=base)
summary(reg2)
##
## Call:
## lm(formula = Calorias ~ Grasas_totales + Carbohidratos + Proteina +
## Grasas_saturadas + Colesterol, data = base)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.5208 -3.1742 0.4894 3.8020 10.7904
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.091430 0.797169 -3.878 0.000143 ***
## Grasas_totales 8.886381 0.073531 120.852 < 2e-16 ***
## Carbohidratos 3.942266 0.017258 228.426 < 2e-16 ***
## Proteina 4.132007 0.062510 66.101 < 2e-16 ***
## Grasas_saturadas 0.579136 0.152834 3.789 0.000200 ***
## Colesterol -0.009919 0.005482 -1.810 0.071877 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.449 on 199 degrees of freedom
## (55 observations deleted due to missingness)
## Multiple R-squared: 0.9996, Adjusted R-squared: 0.9996
## F-statistic: 9.095e+04 on 5 and 199 DF, p-value: < 2.2e-16
pred1<-predict(reg1)
predicciones1<-data.table(RMSE=RMSE(pred1,base$Calorias),MAE=MAE(pred1,base$Calorias))
predicciones1
## RMSE MAE
## 1: 166.3149 107.9306
pred2<-predict(reg2)
predicciones2<-data.table(RMSE=RMSE(pred2,base$Calorias),MAE=MAE(pred2,base$Calorias))
predicciones2
## RMSE MAE
## 1: 277.5326 176.9549
# El primer modelo predice mejor la cantidad de calorÃas debido a que su RMSE y MAE son menores que el segundo modelo.
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? 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)
base1<-na.omit(base)
predkfolds1<-train(Calorias~Grasas_totales+Carbohidratos+Proteina+Colesterol,data=base1,method="lm",trControl= setupKCV)
print(predkfolds1)
## Linear Regression
##
## 179 samples
## 4 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 144, 143, 144, 143, 142
## Resampling results:
##
## RMSE Rsquared MAE
## 5.918641 0.9995044 4.668084
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
predkfolds2<-train(Calorias~Grasas_totales+Carbohidratos+Proteina+Grasas_saturadas+Colesterol,data=base1,method="lm",trControl= setupKCV)
print(predkfolds2)
## Linear Regression
##
## 179 samples
## 5 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 143, 143, 145, 142, 143
## Resampling results:
##
## RMSE Rsquared MAE
## 5.651828 0.999524 4.563516
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
# En este caso los el segundo modelo es mejor predictor que el primero, al contrario de la pregunta anterior. Esto se puede deber a la omisión de productos que contenÃan NA's en sus registros.
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.
datos<- base1[,.(Grasas_totales,Calorias)]
k1<-kmeans(x=datos,centers=3, nstart = 20)
fviz_cluster(k1,data=datos,geom="point")
Cree la variable cat2. Pista: La variable cat2 debe ser una variable factor.
base[Categoria=="Desayuno",cat2:="Desayuno"]
base[Categoria=="Café o té",cat2:="Desayuno"]
base[Categoria=="Carne de cerdo",cat2:="Almuerzo"]
base[Categoria=="Pollo y pescado",cat2:="Almuerzo"]
base[Categoria=="Ensaladas",cat2:="Almuerzo"]
base[Categoria=="Aperitivos",cat2:="Almuerzo"]
base[Categoria=="Postres",cat2:="Postres y LÃquidos"]
base[Categoria=="Bebidas",cat2:="Postres y LÃquidos"]
base[Categoria=="Batidos",cat2:="Postres y LÃquidos"]
base$cat2<-as.factor(base$cat2)
tabla<-base[,.(Categoria,cat2)]
Realice dos modelos de árboles de clasificación de la variable Clasificacion. 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é.
#Crear modelos
arb1<-rpart(cat2~Grasas_totales+Carbohidratos+Proteina,data=base,method="class")
rpart.plot(arb1)
arb2<-rpart(cat2~Calorias+Carbohidratos+Proteina+Azucar+Sodio,data=base,method="class")
rpart.plot(arb2)
# Entrenar el modelo
set.seed(12345)
ind<-createDataPartition(base[,cat2],times=1,p=0.8,list=F)
train<-data.frame(base)[ind,]
test<-data.frame(base)[-ind,]
arb3<-rpart(cat2~Grasas_totales+Carbohidratos+Proteina,data=train,method="class")
rpart.plot(arb3)
set.seed(12345)
ind2<-createDataPartition(base[,cat2],times=1,p=0.8,list=F)
train<-data.frame(base)[ind,]
test<-data.frame(base)[-ind,]
arb4<-rpart(cat2~Calorias+Carbohidratos+Proteina+Azucar+Sodio,data=train,method="class")
rpart.plot(arb4)
prec<-function(x,y,z){
pred<-predict(x,y,type="class")
matconf<-table(y[,z],pred)
prueba<-sum(diag(matconf))/sum(matconf)
}
prec(arb3,test,"cat2")
prec(arb4,test,"cat2")