Lectura de datos

library(readxl)
encuesta <- read_excel("encuesta_depurada.xlsx")
encuesta

Estructura interna de datos

library(dplyr)
glimpse(encuesta)
## Rows: 30
## Columns: 10
## $ promedio_academico    <dbl> 3.53, 3.80, 4.02, 4.39, 3.99, 3.80, 3.83, 3.80, ~
## $ color_favorito        <chr> "Verde", "Amarillo", "Rojo", "Negro", "Azul", "V~
## $ horas_estudiar        <dbl> 30, 12, 45, 60, 50, 25, 28, 40, 40, 36, 32, 35, ~
## $ horas_dormir          <dbl> 7.0, 6.0, 6.0, 6.0, 8.0, 2.0, 2.0, 6.0, 6.0, 7.0~
## $ redes_sociales        <dbl> 4, 9, 3, 2, 9, 5, 2, 4, 4, 5, 4, 3, 4, 4, 5, 5, ~
## $ redsocial_favorita    <chr> "Youtube", "Facebook", "Facebook", "Facebook", "~
## $ bachiller_universidad <chr> "1 Año", "Menos de 1 año", "1 Año", "Menos de 1 ~
## $ lectura               <chr> "Muy poco", "Frecuentemente", "Frecuentemente", ~
## $ horas_internet        <dbl> 20, 3, 42, 90, 56, 40, 30, 80, 80, 10, 14, 80, 6~
## $ trabajo               <chr> "Sí", "Sí", "No", "No", "No", "No", "No", "Sí", ~

Media del promedio académico

mean(encuesta$promedio_academico)
## [1] 3.699

Descriptivo general

library(skimr)
skim(encuesta)
Data summary
Name encuesta
Number of rows 30
Number of columns 10
_______________________
Column type frequency:
character 5
numeric 5
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
color_favorito 0 1 4 10 0 9 0
redsocial_favorita 0 1 4 9 0 4 0
bachiller_universidad 0 1 5 14 0 4 0
lectura 0 1 4 14 0 3 0
trabajo 0 1 2 2 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
promedio_academico 0 1 3.70 0.25 3.3 3.5 3.74 3.82 4.39 ▆▃▇▂▁
horas_estudiar 0 1 27.47 16.93 2.0 10.0 29.50 39.50 60.00 ▇▂▇▃▃
horas_dormir 0 1 6.02 1.98 1.0 6.0 6.50 7.00 8.00 ▂▁▂▅▇
redes_sociales 0 1 4.17 1.76 1.0 3.0 4.00 5.00 9.00 ▃▇▅▁▁
horas_internet 0 1 32.20 26.49 3.0 10.5 26.00 48.75 90.00 ▇▂▃▂▂

Resumen descriptivo agrupado

Trabajo

  • Ctrl + Shift + M: obtener operador de tubería
# library(dplyr)
encuesta %>% 
  group_by(trabajo) %>%
  summarise(
    promedio = mean(promedio_academico),
    desv_estandar = sd(promedio_academico),
    promedio_dormir = mean(horas_dormir),
    promedio_estudiar = mean(horas_estudiar),
    total = n()
  )
  • ¿Cuántos trabajan y cuántos no trabajan?
encuesta %>% 
  count(trabajo)

Trabajo y lectura

encuesta %>% 
  group_by(trabajo, lectura) %>%
  summarise(
    promedio = mean(promedio_academico),
    desv = sd(promedio_academico),
    minimo = min(promedio_academico),
    maximo = max(promedio_academico),
    mediana = median(promedio_academico),
    p75 = quantile(promedio_academico, probs = 0.75),
    cv = (desv / promedio) * 100,
    total = n()
  )

Visualizaciones

Cantidades

library(ggplot2)
encuesta %>%
  ggplot(mapping = aes(x = color_favorito)) +
  geom_bar(fill = "blue", color = "black") +
  labs(x = "Color", y = "Frecuencia",
       title = "Frecuencia absoluta por color favorito")

  • Podemos darle interactividad al gráfico anterior a través de la función ggplotly() del paquete plotly:
library(plotly)
ggplotly(
  encuesta %>%
  ggplot(mapping = aes(x = color_favorito)) +
  geom_bar(fill = "blue", color = "black") +
  labs(x = "Color", y = "Frecuencia",
       title = "Frecuencia absoluta por color favorito")
)
  • Representando cantidad (promedio) con barras:
encuesta %>% 
  group_by(trabajo) %>% 
  summarise(promedio_estudiar = mean(horas_estudiar)) %>% 
  ggplot(mapping = aes(x = trabajo, y = promedio_estudiar)) +
  geom_col()

  • Representando cantidades agrupadas:
encuesta %>% 
  group_by(trabajo, lectura) %>% 
  summarise(promedio_estudiar = mean(horas_estudiar)) %>% 
  ggplot(mapping = aes(x = trabajo, y = promedio_estudiar, fill = lectura)) +
  geom_col(position = "dodge")

Distribuciones

  • Regla de Sturges: 1 + log2(N). Donde N = número de datos (en este caso N = 30). Resultado 5.90
encuesta %>% 
  ggplot(mapping = aes(x = horas_estudiar)) +
  geom_histogram(bins = 6, color = "black")

encuesta %>% 
  ggplot(mapping = aes(x = horas_estudiar)) +
  geom_density()

  • Distribución por trabajo:
encuesta %>%
  ggplot(mapping = aes(x = trabajo, y = promedio_academico)) +
  geom_boxplot()

  • Gráfico cuantil-cuantil:
encuesta %>% 
  ggplot(mapping = aes(sample = promedio_academico)) +
  geom_qq() +
  geom_qq_line()

  • Gráfico cuantil-cuantil por trabajo:
encuesta %>% 
  ggplot(mapping = aes(sample = promedio_academico)) +
  facet_wrap(facets = ~trabajo) +
  geom_qq() +
  geom_qq_line()

Proporciones

encuesta %>% 
  count(lectura) %>% 
  mutate(proporcion = n / sum(n)) %>% 
  ggplot(mapping = aes(x = lectura, y = proporcion)) +
  geom_col() +
  geom_label(mapping = aes(label = round(proporcion, digits = 2)))

Relaciones X-Y

Diagramas de dispersión

  • se: error estándar (TRUE o FALSE)
encuesta %>% 
  ggplot(mapping = aes(x = horas_internet, y = horas_estudiar)) +
  geom_point() +
  geom_smooth(se = FALSE) +
  geom_smooth(method = "lm", se = FALSE, color = "red")

  • Gráfico anterior de forma interactiva:
ggplotly(
  encuesta %>% 
  ggplot(mapping = aes(x = horas_internet, y = horas_estudiar)) +
  geom_point() +
  geom_smooth(se = FALSE) +
  geom_smooth(method = "lm", se = FALSE, color = "red")
)

Correlograma

  • Matriz de correlaciones:
encuesta %>% 
  select(where(is.numeric)) %>% 
  cor()
##                    promedio_academico horas_estudiar horas_dormir
## promedio_academico         1.00000000     0.48931047  -0.05009997
## horas_estudiar             0.48931047     1.00000000   0.07964348
## horas_dormir              -0.05009997     0.07964348   1.00000000
## redes_sociales             0.06089997    -0.25220762   0.20204993
## horas_internet             0.57131241     0.69717791   0.09742587
##                    redes_sociales horas_internet
## promedio_academico     0.06089997     0.57131241
## horas_estudiar        -0.25220762     0.69717791
## horas_dormir           0.20204993     0.09742587
## redes_sociales         1.00000000    -0.27683278
## horas_internet        -0.27683278     1.00000000
  • Gráfico inicial:
library(corrplot)
encuesta %>% 
  select(where(is.numeric)) %>% 
  cor() %>% 
  corrplot()

  • Gráfico mejorado:
encuesta %>% 
  select(where(is.numeric)) %>% 
  cor() %>% 
  corrplot(
    diag = FALSE,
    type = "lower",
    tl.srt = 25,
    tl.col = "black",
    method = "pie"
  )

Incertidumbre

Barras

encuesta %>%
  group_by(trabajo) %>% 
  summarise(
    promedio = mean(promedio_academico),
    de = sd(promedio_academico)
  ) %>% 
  ggplot(mapping = aes(x = trabajo, y = promedio)) +
  geom_col() +
  geom_errorbar(mapping = aes(ymin = promedio - de,
                              ymax = promedio + de),
                width = 0.05)

Puntos

encuesta %>%
  group_by(trabajo) %>% 
  summarise(
    promedio = mean(promedio_academico),
    de = sd(promedio_academico)
  ) %>% 
  ggplot(mapping = aes(x = trabajo, y = promedio)) +
  geom_point() +
  geom_errorbar(mapping = aes(ymin = promedio - de,
                              ymax = promedio + de),
                width = 0.05) +
  coord_flip()

Ejemplo homicidios

library(readr)
homicidios1 <- read_csv("homicidios.csv")

homicidios1 %>% 
  group_by(year) %>% 
  summarise(
    promedio = mean(homicidios)
  ) %>% 
  ggplot(mapping = aes(x = year, y = promedio)) +
  geom_line()

homicidios1 %>% 
  ggplot(mapping = aes(x = year, y = homicidios, color = Municipio)) +
  geom_line()

library(plotly)
ggplotly(
  homicidios1 %>% 
  ggplot(mapping = aes(x = year, y = homicidios, color = Municipio)) +
  geom_line()
)

Tablas de frecuencias

Frecuencias absolutas

table(encuesta$color_favorito)
## 
##   Amarillo       Azul     Blanco       Gris      Negro       Rojo     Rosado 
##          1          4          2          1          9          4          1 
##      Verde Vino tinto 
##          7          1
encuesta %>% 
  count(color_favorito) %>% 
  arrange(desc(n))
xtabs(formula = ~encuesta$color_favorito)
## encuesta$color_favorito
##   Amarillo       Azul     Blanco       Gris      Negro       Rojo     Rosado 
##          1          4          2          1          9          4          1 
##      Verde Vino tinto 
##          7          1
table(encuesta$lectura, encuesta$trabajo)
##                 
##                  No Sí
##   Frecuentemente  6  3
##   Muy poco       11  8
##   Nada            2  0

Frecuencias relativas

prop.table(table(encuesta$color_favorito))
## 
##   Amarillo       Azul     Blanco       Gris      Negro       Rojo     Rosado 
## 0.03333333 0.13333333 0.06666667 0.03333333 0.30000000 0.13333333 0.03333333 
##      Verde Vino tinto 
## 0.23333333 0.03333333
prop.table(table(encuesta$color_favorito)) * 100
## 
##   Amarillo       Azul     Blanco       Gris      Negro       Rojo     Rosado 
##   3.333333  13.333333   6.666667   3.333333  30.000000  13.333333   3.333333 
##      Verde Vino tinto 
##  23.333333   3.333333
  • Con la biblioteca janitor:
library(janitor)
tabyl(encuesta$color_favorito)

Gráfico con gplots

tabla <- table(encuesta$trabajo, encuesta$lectura)

library(gplots)
balloonplot(tabla)

balloonplot(prop.table(tabla))

Biblioteca esquisse

library(esquisse)
# esquisser(viewer = "browser")

Funciones auxiliares