Análisis de correlaciones

Frutas y vegetales

Author

Edimer David Jaramillo

Bibliotecas R

Code
library(tidyverse) # Manipulación de datos y gráficosos
library(janitor)   # Edición automática de nombreses
library(visdat)    # Gráficos: en este caso lo usamos para ver NAss
library(corrplot)  # Gráfico de correlaciones: correlogramaa
library(corrr)     # otra opción gráfica de correlacioneses

Datos

Frutas

Code
frutas <- read_csv("fruits.csv", na = "-") %>%
  clean_names() %>%
  mutate(grupo = "Frutas") %>%
  select(-c(energy_kcal_k_j))

frutas %>% head()

Vegetales

Code
vegetales <- read_csv("vegetables.csv", na = "-") %>%
  clean_names() %>%
  mutate(grupo = "Vegetales") %>%
  select(-c(energy_kcal_k_j))

vegetales %>% head()

¿Cuántos NA?

Frutas

Code
frutas %>% 
  vis_miss()

Vegetales

Code
vegetales %>% 
  vis_miss()

Unión de datos

  • Para poder unir las dos tablas, una abajo de la otra, es necesario validar que el orden y nombre de columnas sea igual en ambas tablas.
Code
names(frutas) == names(vegetales)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
  • Unimos los datos para hacer el análisis comparativo de frutas vs vegetales:
Code
datos_completos <- bind_rows(frutas, vegetales) %>% 
  filter(!is.na(sugars_g)) %>% 
  filter(!is.na(vitamin_a_iu)) %>% 
  filter(!is.na(vitamin_b5_mg)) %>% 
  filter(!is.na(vitamin_e_mg))
datos_completos %>% head()
  • Verificamos si aún existen datos NA:
Code
datos_completos %>% 
  vis_miss()

¿Asociación de variables?

Multicolinealidad

Correlaciones

Opción 1

  • Correlación paramétrica de Pearson:
Code
datos_completos %>% 
  select(where(is.numeric)) %>% 
  cor() %>% 
  corrplot(
    type = "upper",
    diag = FALSE,
    method = "pie",
    tl.srt = 45,
    tl.cex = 0.7,
    tl.col = "black",
    order = "hclust"
  )

  • Correlación no paramétrica de Spearman:
Code
datos_completos %>% 
  select(where(is.numeric)) %>% 
  cor(method = "spearman") %>% 
  corrplot(
    type = "upper",
    diag = FALSE,
    method = "pie",
    tl.srt = 45,
    tl.cex = 0.7,
    tl.col = "black",
    order = "hclust"
  )

Opción 2

  • Correlación paramétrica de Pearson:
Code
datos_completos %>% 
  select(where(is.numeric)) %>% 
  correlate() %>% 
  network_plot()

  • Correlación no paramétrica de spearman:
Code
datos_completos %>% 
  select(where(is.numeric)) %>% 
  correlate(method = "spearman") %>% 
  network_plot()

Consideraciones

Cuarteto de Ascombe

¿Distribuciones?

  • ¿Cómo podemos graficar las distribuciones de todas las variables numéricas?
Code
datos_completos %>% 
  pivot_longer(cols = water_g:vitamin_e_mg,
               names_to = "variable",
               values_to = "valores") %>% 
  ggplot(aes(x = valores)) +
  facet_wrap(~variable, scales = "free") +
  geom_density()

  • ¿El mismo comportamiento para frutas y vegetales?
Code
datos_completos %>% 
  pivot_longer(cols = water_g:vitamin_e_mg,
               names_to = "variable",
               values_to = "valores") %>% 
  ggplot(aes(x = valores, color = grupo)) +
  facet_wrap(~variable, scales = "free") +
  geom_density()

  • ¿El mismo comportamiento para frutas y vegetales?
Code
datos_completos %>% 
  pivot_longer(cols = water_g:vitamin_e_mg,
               names_to = "variable",
               values_to = "valores") %>% 
  ggplot(aes(x = valores, color = grupo)) +
  facet_wrap(~variable, scales = "free") +
  geom_density() +
  scale_x_log10()

Dispersión

  • ¿Cómo quedan ubicados los grupos de frutas y vegetales si graficamos el contenido de azúcar y agua?
Code
datos_completos %>% 
  ggplot(aes(x = water_g, y = sugars_g, color = grupo)) +
  geom_point()

  • ¿Cuáles son el vegetal y la fruta “atípicos”?
Code
datos_completos %>% 
  filter(water_g < 50)
  • ¿Qué pasa si al gráfico anterior los transformamos con logaritmos?
Code
datos_completos %>% 
  ggplot(aes(x = water_g, y = sugars_g, color = grupo)) +
  geom_point() +
  scale_y_log10()

  • ¿Qué pasa si filtramos water_g por encima de 50?
Code
datos_completos %>% 
  filter(water_g > 50) %>% 
  ggplot(aes(x = water_g, y = sugars_g, color = grupo)) +
  geom_point() +
  scale_y_log10()

  • ¿Cómo podemos vincular una variable más? Por ejemplo la proteína:
Code
datos_completos %>% 
  ggplot(aes(x = water_g, y = sugars_g, color = protein_g)) +
  facet_wrap(~grupo, scales = "free") +
  geom_point() +
  scale_color_viridis_c()

Distancias

Code
vector_frutas <-
  datos_completos %>% 
  filter(grupo == "Frutas") %>% 
  pull(name)

dist_frutas <-
  datos_completos %>%
  filter(grupo == "Frutas") %>%
  select(where(is.numeric)) %>%
  dist(method = "euclidean") %>%
  as.matrix() %>%
  as_tibble() %>%
  set_names(vector_frutas) %>%
  clean_names() %>%
  mutate(fruta = vector_frutas) %>%
  relocate(fruta, everything())

dist_frutas
  • ¿Cómo podemos comprobar que es correcto?
Code
f1_f2 <- datos_completos %>%
  filter(grupo == "Frutas") %>%
  slice(1, 2)

dist(x = f1_f2 %>% select(where(is.numeric)))
         1
2 1895.625
  • Grafiquemos las distancias:
Code
dist_frutas %>% 
  pivot_longer(cols = -fruta) %>% 
  ggplot(aes(x = reorder(fruta, value), y = reorder(name, value), fill = value)) +
  geom_tile() +
  scale_fill_viridis_c() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "top") +
  labs(fill = "distancia")

Análisis Multivariado

  • ¿Cómo podemos analizar todas las variables juntas? ¿Es posible?