Caracas - Venezuela
Ing. de Sistemas
https://hectoreduardoramirez.com/
Git: https://github.com/eduardo846/proyectoMcDonals.git

Introducción

 El objetivo de este proyecto es utilizar el algoritmo PCA(Análisis de componentes principales) para la reducción de dimensiones en el conjunto de datos del menú de McDonald’s.
 El problema de los datos de alta dimensión ocurre cuando la dimensión del conjunto del conjunto de datos (cada variable numérica es una dimensión) es grande en comparación con el numero de observaciones. El objetivo de la reducción de dimensiones es disminuir el tamaño del conjunto de datos preservando tanta información como sea posible.

DataSet

  El conjunto de datos utilizado en este proyecto contiene valores nutricionales de 260 elementos del menú de McDonald’s. El conjunto de datos completo se puede encontrar el se sitio web de kaggle https://www.kaggle.com/mcdonalds/nutrition-facts. Cada elemento se describe mediante 8 variables: grasas saturadas, colesterol, sodio, carbohidratos, fibra dietética, azúcares y proteínas, Trans_Fat.
Estadisticas descriptivas:
summary(df)
##  Grasas saturadas   Colesterol         Sodio        Carbohidratos   
##  Min.   : 0.000   Min.   :  0.00   Min.   :   0.0   Min.   :  0.00  
##  1st Qu.: 1.000   1st Qu.:  5.00   1st Qu.: 107.5   1st Qu.: 30.00  
##  Median : 5.000   Median : 35.00   Median : 190.0   Median : 44.00  
##  Mean   : 6.008   Mean   : 54.94   Mean   : 495.8   Mean   : 47.35  
##  3rd Qu.:10.000   3rd Qu.: 65.00   3rd Qu.: 865.0   3rd Qu.: 60.00  
##  Max.   :20.000   Max.   :575.00   Max.   :3600.0   Max.   :141.00  
##  Fibra dietetica    Azucares        Proteinas       Trans_Fat     
##  Min.   :0.000   Min.   :  0.00   Min.   : 0.00   Min.   :0.0000  
##  1st Qu.:0.000   1st Qu.:  5.75   1st Qu.: 4.00   1st Qu.:0.0000  
##  Median :1.000   Median : 17.50   Median :12.00   Median :0.0000  
##  Mean   :1.631   Mean   : 29.42   Mean   :13.34   Mean   :0.2038  
##  3rd Qu.:3.000   3rd Qu.: 48.00   3rd Qu.:19.00   3rd Qu.:0.0000  
##  Max.   :7.000   Max.   :128.00   Max.   :87.00   Max.   :2.5000
Histogramas:
hist(df$`Grasas saturadas`, main = "Grasas Saturadas", xlab = "Grasa saturada", ylab = "Frecuencia")

hist(df$Trans_Fat, main = "Trans Fat", xlab = "Trans Fat", ylab = "Frecuencia")

hist(df$Colesterol,main = "Colesterol", xlab = "Colesterol", ylab = "Frecuencia")

hist(df$Sodio, main = "Sodio", xlab = "Sodio", ylab = "Frecuencia")

hist(df$Carbohidratos, main = "Carbohidratos", xlab = "Carbohidratos", ylab = "Frecuencia")

hist(df$`Fibra dietetica`, main = "Fibra Dietetica", xlab = "Fibra Dietetica", ylab = "Frecuencia")

hist(df$Azucares, main = "Azucares", xlab = "Azucares", ylab = "Frecuencia")

hist(df$Proteinas, main = "Proteinas",xlab = "Proteinas", ylab = "Frecuencia")

Dimensiones de menu.csv:
dim(df)
## [1] 260   8
  Antes del análisis posterior los datos se han normalizados.
preproc <- preProcess(df, method = c("center", "scale"))
df_norm <- predict(preproc,df)
Matriz de plots:
ggpairs(df_norm)

Matriz de correlacion:
cor<-cor(df_norm, method="pearson") 
corrplot(cor)

  En la matriz de correlación es visible que algunas variables están correlacionadas positivamente con las grasas saturadas. Además, la correlación entre azúcares y carbohidratos, así como proteínas y sodio, se puede detectar fácilmente.

PCA

pca <- prcomp(df_norm, center=FALSE, scale=FALSE)
  Las proyecciones de PCA se ha calculado utilizando la función prcomp que utiliza la descomposición de valores singulares.
  
pca$rotation
##                          PC1         PC2         PC3         PC4         PC5
## Grasas saturadas  0.43015581 -0.20009279 -0.24851949 -0.16854817  0.02562347
## Colesterol        0.38495069  0.09019691 -0.17808516 -0.77036509 -0.22396712
## Sodio             0.43534374  0.29004074  0.04388044  0.07805226  0.38904047
## Carbohidratos     0.28112075 -0.49009859  0.43369106 -0.03968195  0.12560935
## Fibra dietetica   0.34879197  0.26371707  0.52107052  0.23873634 -0.67274191
## Azucares         -0.01137713 -0.64401117  0.29283307 -0.08508928  0.05224139
## Proteinas         0.45131975  0.13134138  0.03844621  0.30426344  0.44714426
## Trans_Fat         0.26972412 -0.35490773 -0.59813586  0.46222382 -0.35609428
##                           PC6         PC7           PC8
## Grasas saturadas  0.754695383 -0.33459351 -0.0508323501
## Colesterol       -0.409813854  0.01980159 -0.0001305312
## Sodio             0.120147811  0.53703482  0.5139456870
## Carbohidratos    -0.005284034  0.43172477 -0.5375127853
## Fibra dietetica   0.072357358 -0.11878811  0.0914333823
## Azucares         -0.160991017 -0.25891590  0.6296380445
## Proteinas        -0.405816175 -0.53180480 -0.1938155433
## Trans_Fat        -0.228437310  0.22112893  0.0445791009

Elegir números de componentes

Hay 3 métodos mas comunes que se utilizan para seleccionar el numero de componentes:

  Kaiser rule (Regla de Kaiser) 
La regla de Kaiser se centra en los valores propios de los componentes. Un valor propio es un índice que indica qué tan bueno es un componente como un resumen de los datos (si un valor propio es igual a 1, significa que el componente contiene la misma cantidad de información que una sola variable). Este enfoque sugiere que solo se deben elegir componentes con valores propios superiores a 1.
df_norm.cov<-cov(df_norm)
df_norm.eigen<-eigen(df_norm.cov)
df_norm.eigen$values
## [1] 3.84428921 2.19472808 0.74712560 0.56469152 0.31383510 0.22552415 0.08849565
## [8] 0.02131069

Los valores propios que se muestran arriba indican que solo se deben elegir 2 componentes

  Scree plot
El segundo enfoque se basa en el diagrama de Scree plot. Esta gráfica visualiza los valores propios de los componentes en orden ascendente. El enfoque del gráfico de pantalla sugiere que el número apropiado de componentes es el número de barras que preceden al pliegue de la línea que conecta los valores propios.
fviz_eig(pca, choice='eigenvalue')

Este enfoque, así como la regla de Kaiser, indica que el número correcto de componentes es 2.

  Proporción de varianza (Proportion of variance explained)
El último enfoque sugiere que los componentes elegidos deberían explicar más de 2/3 de la varianza.
summary(pca)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     1.9607 1.4815 0.86436 0.75146 0.56021 0.47489 0.29748
## Proportion of Variance 0.4805 0.2743 0.09339 0.07059 0.03923 0.02819 0.01106
## Cumulative Proportion  0.4805 0.7549 0.84827 0.91885 0.95808 0.98627 0.99734
##                            PC8
## Standard deviation     0.14598
## Proportion of Variance 0.00266
## Cumulative Proportion  1.00000
fviz_eig(pca)

La proporción acumulada de la varianza explicada que se muestra arriba indica que 4 componentes pueden explicar más del 90% de la varianza. Significa que esta proporción de información se puede conservar después de reducir el número de variables a la mitad. Los primeros dos componentes pueden explicar más de 3/4 de la varianza, por lo que este número de componentes es suficiente. Significa que los resultados dados por los tres métodos son los mismos.

Análisis de componentes

El gráfico de “nube de puntos” muestra la calidad de representación de las observaciones individuales.

fviz_pca_ind(pca, col.ind="cos2", geom = "point", gradient.cols = c("green", "yellow", "red" ))

fviz_pca_var(pca, col.var = "red")

El gráfico que se muestra arriba muestra las relaciones entre las variables, así como la “calidad” de todos los factores. Las variables correlacionadas positivamente están próximas entre sí, mientras que las correlacionadas negativamente están en los sitios opuestos del gráfico. La “calidad” de la variable se presenta mediante la distancia desde el centro; las “mejores” variables son la proteína y el sodio. Con solo mirar este gráfico, es difícil distinguir claramente los componentes.

El porcentaje de la contribución a los dos primeros componentes se muestra en los gráficos que se muestran a continuación.

PC1 <- fviz_contrib(pca, choice = "var", axes = 1)
PC2 <- fviz_contrib(pca, choice = "var", axes = 2)
grid.arrange(PC1, PC2)

En la primera gráfica se puede ver que el primer componente está formado por proteínas, sodio, grasas saturadas y colesterol. El segundo está compuesto por azúcares y carbohidratos

Conclusiones

  La reducción de dimensiones simplemente se refiere al proceso de reducir el número de dimensiones en un conjunto de datos. El objetivo de este proceso es preservar la mayor cantidad de información posible reduciendo el número de funciones. La investigación realizada muestra que más del 90% de la varianza puede explicarse por solo la mitad de las variables y 2 de cada 8 variables pueden mantener más de 3/4 de la información incluida en el conjunto de datos original. Las técnicas de reducción de dimensiones son muy poderosas cuando se trata de análisis y almacenamiento de grandes conjuntos de datos.