Formación ASEPELT. Universidad de Granada
Orientación:
Datos, modelización estadística, R
Filosofía:
Probemos primero el pastel
Objetivo 1:
Fundamentos teóricos
Objetivo 2:
R como herramienta de análisis estadístico.
R y RStudio
Saber qué es la consola de R y la interfaz gráfica RStudio.
Conocer lo imprescindible para trabajar con R como lenjuage de programación.
Obtener información de los datos, utilizando herramientas y técnicas de programación modernas: Rstudio.
Obtener información de los datos, utilizando herramientas y técnicas de programación modernas y de forma reproducible: Quarto.
Descargar e instalar R: https://cloud.r-project.org/
Descargar e instalar Rstudio: https://www.rstudio.com/products/rstudio/download/
Iconos de R (izquierda) y Rstudio (derecha)
¿Qué más estará programado?
¡Y mucho más!
🙋
::
::
# sirve para comentar:<- asigna a la parte izquierda lo que hay en la derecha:$ accede a variables dentro de un conjunto de datos:En el propio programa con la función help() y el operador ?
+ Ayuda de conjunto de datos:
Las Cheatsheets: https://posit.co/resources/cheatsheets/
Libros y manuales: https://cran.r-project.org/manuals.html
Google:
Stack Overflow
Rpubs
GitHub
Fuente Ismay and Kim (2019)
Fuente: Ismay and Kim (2019)
Warning
R es un lenguaje de programación que ejecuta cálculos, mientras que RStudio es un entorno de desarrollo integrado (IDE) que proporciona una interfaz y agrega muchas funciones y herramientas útiles.
Diseño de Rstudio
Warning
La posición relativa de cada panel pueden personalizarse desde el menú: Tools \> Global Options \> Pane Layout
Analogía entre R y los paquetes. Fuente: Ismay and Kim (2019)
Warning
R es como un teléfono móvil nuevo: si bien tiene una cierta cantidad de funciones cuando lo usamos por primera vez, no tiene todo.
Los paquetes son como las aplicaciones que podemos descargar en el teléfono desde la App Store de Apple o Google Play de Android.
Un proyecto es un directorio de trabajo (carpeta) que contiene todo lo necesario para trabajar en un análisis de datos (proyecto) específico. Tipos de proyectos: documentos, presentaciones, paquetes, Webs,…
Creación de un proyecto Quarto
File > New proyect >
Creación de Quarto Project
Creación de Proyectos Quarto
Aunque podemos tener todos los archivos en la carpeta del proyecto (para proyectos pequeños) lo ideal es crear siempre una estructura.
📂 data: contiene los archivos de datos.
📁 img: contiene las imágenes.
📁 exer: ejercicios, practicas.
Más personal:
old: documentos que ya no necesito, pero por si acaso…Compilación de documentos
Growth in a Time of Debt (2010)
Un famoso artículo académico de 2010, en el que se basan los grandes políticos para reforzar los argumentos a favor de los recortes de austeridad, contenía errores significativos:
De código (excluyeron a cinco países con una importante deuda y alto crecimiento).
De manipulación de los datos (excluyeron del cómputo algunos países y algunos años).
De cálculo estadístico (errores en las ponderaciones).
Warning
Estos errores se debieron al mal uso de una hoja de cálculo de Excel.
(otro lenguaje). Entonces, empecemos viendo primero Markdown… 🤔
Your data tells a story. Tell it with R Markdown. Turn your analyses into high quality documents, reports, presentations and dashboards. https://rmarkdown.rstudio.com/
Warning
Sintaxis Markdonw
Help > Markdown Quick Reference
https://rmarkdown.rstudio.com/
Cheatseets
Un nuevo marco de escritura para ciencia de datos, que combina código, resultados y comentarios. Se nutre de la experiencia de RMarkdown.
Los documentos de Quarto (*.qmd) son completamente reproducibles y soportan docenas de formatos de salida tales como PDFs, archivos de Word, presentaciones, artículos científicos,…
¿Qué incluye?
código y ecuaciones LaTeX
resultados en la salida de las diapositivasPDF, HTML
Más información: https://quarto.org.
Estructura del documento
Render
A. MeencantalaciudaddeSevilla
B. Me encanta la cuidad de Sevilla
La guía completa se encuentra en: The tidyverse style guide
snake_case: para nombres de objetos y funciones debe usarse minúscula, números y _ guión bajo para separar palabras dentro del nombre.tidyverse
Conocer qué es el tidyverse y los datos tidy
Descubrir las acciones (verbos) de {dplyr}.
Aprender a visualizar datos con {ggplot2}.
Imagen tomada de: iStock
Imagen adaptada de: iStock
Cada variable forma una columna.
Cada observación forma una fila.
Cada tipo de unidad de observación forma una tabla.
Fuente: Wickham and Grolemund (2016)
Es una colección de paquetes coehrentes, que comparten gramática, filosofía y estructura y están diseñados para realizar juntos como una canalización completa (pipeline). Todos se basan en la idea de tidy data propuesta por Hadley Wickham Hadley (2014) y pueden instalarse con un único comando en R:
Los paquetes que forman parte del tidyverse son:
{readr}, para importación de datos.
{dplyr}, para manipulación de datos.
{tidyr}, para ordenar datos.
{ggplot2}, para visualización de datos.
{purrr}, para programación.
{tibble}, para tibbles, un nuevo formato de data frames.
{stringr}, para caracteres.
{forcats}, para factores.
En programación, un pipe (tubo) es una técnica que permite pasar información de un proceso a otro.
Fuente: https://static-bcrf.biochem.wisc.edu/courses/Tabular-data-analysis-with-R-and-Tidyverse/book/8-tidyverseanotherRuniverse.html
Imagina la siguiente secuencia:
Expresado como un cojunto de funciones anidadas y pseudo-código R podría ser así:
Utilizando pipes la lectura se hace más fácil y natural:
dplyr
filas:
filter() filtra casos en función de sus valores.
arrange() cambia el orden de las filas.
columnas:
select() elige variables en función de sus nombres.
transformación:
summarise() reduce múltiples valores a un solo resumen.
mutate() agrega nuevas variables que son funciones de variables existentes.
agrupación:
group_by() agrupa datos por una o más variables.Fuente: https://posit.co/resources/cheatsheets/
Note
Nosotros vamos a contar historias con los datos usando el software estadístico R por lo que es necesario conocer algunos paquetes y funciones para poder manipular y represenar los datos.
¿Qué hay en un conjunto de datos?
Mapa del universo observable con los objetos astronómicos notables conocidos en la actualidad. Fuente: Wikipedia.
starwars
Fuente: https://datasciencebox.org
# A tibble: 87 × 14
name height mass hair_color skin_color eye_color birth_year sex gender
<chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
1 Luke Sk… 172 77 blond fair blue 19 male mascu…
2 C-3PO 167 75 <NA> gold yellow 112 none mascu…
3 R2-D2 96 32 <NA> white, bl… red 33 none mascu…
4 Darth V… 202 136 none white yellow 41.9 male mascu…
5 Leia Or… 150 49 brown light brown 19 fema… femin…
6 Owen La… 178 120 brown, gr… light blue 52 male mascu…
7 Beru Wh… 165 75 brown light blue 47 fema… femin…
8 R5-D4 97 32 <NA> white, red red NA none mascu…
9 Biggs D… 183 84 black light brown 24 male mascu…
10 Obi-Wan… 182 77 auburn, w… fair blue-gray 57 male mascu…
# ℹ 77 more rows
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
# vehicles <list>, starships <list>
¿Cuántas columnas (variables) tiene?
¿Cuántas filas (observaciones) tiene?
¿Cuál es la dimensión del dataset?
data.frames)¿Cómo son las primeras observaciones del dataset?
# A tibble: 3 × 14
name height mass hair_color skin_color eye_color birth_year sex gender
<chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
1 Luke Sky… 172 77 blond fair blue 19 male mascu…
2 C-3PO 167 75 <NA> gold yellow 112 none mascu…
3 R2-D2 96 32 <NA> white, bl… red 33 none mascu…
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
# vehicles <list>, starships <list>
Note
El operador <- asigna al “símbolo” que hay a su izquierda el resultado de la expresión que hay a su derecha. El operador = funciona igual que <-.
starwars
De un vistazo (con la función glimpse()):
| Name | starwars |
| Number of rows | 87 |
| Number of columns | 14 |
| _______________________ | |
| Column type frequency: | |
| character | 8 |
| list | 3 |
| numeric | 3 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| name | 0 | 1.00 | 3 | 21 | 0 | 87 | 0 |
| hair_color | 5 | 0.94 | 4 | 13 | 0 | 11 | 0 |
| skin_color | 0 | 1.00 | 3 | 19 | 0 | 31 | 0 |
| eye_color | 0 | 1.00 | 3 | 13 | 0 | 15 | 0 |
| sex | 4 | 0.95 | 4 | 14 | 0 | 4 | 0 |
| gender | 4 | 0.95 | 8 | 9 | 0 | 2 | 0 |
| homeworld | 10 | 0.89 | 4 | 14 | 0 | 48 | 0 |
| species | 4 | 0.95 | 3 | 14 | 0 | 37 | 0 |
Variable type: list
| skim_variable | n_missing | complete_rate | n_unique | min_length | max_length |
|---|---|---|---|---|---|
| films | 0 | 1 | 24 | 1 | 7 |
| vehicles | 0 | 1 | 11 | 0 | 2 |
| starships | 0 | 1 | 16 | 0 | 5 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| height | 6 | 0.93 | 174.60 | 34.77 | 66 | 167.0 | 180 | 191.0 | 264 | ▂▁▇▅▁ |
| mass | 28 | 0.68 | 97.31 | 169.46 | 15 | 55.6 | 79 | 84.5 | 1358 | ▇▁▁▁▁ |
| birth_year | 44 | 0.49 | 87.57 | 154.69 | 8 | 35.0 | 52 | 72.0 | 896 | ▇▁▁▁▁ |
Fuente: https://datasciencebox.org
# A tibble: 1 × 14
name height mass hair_color skin_color eye_color birth_year sex gender
<chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
1 Luke Sky… 172 77 blond fair blue 19 male mascu…
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
# vehicles <list>, starships <list>
ggplot2}Hexbin plot (starwars data)
“The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey
library(datasauRus)
library(dplyr)
datasaurus_dozen |>
group_by(dataset) |>
summarize(
mean_x = mean(x),
mean_y = mean(y),
std_dev_x = sd(x),
std_dev_y = sd(y),
corr_x_y = cor(x, y)
)# A tibble: 13 × 6
dataset mean_x mean_y std_dev_x std_dev_y corr_x_y
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 away 54.3 47.8 16.8 26.9 -0.0641
2 bullseye 54.3 47.8 16.8 26.9 -0.0686
3 circle 54.3 47.8 16.8 26.9 -0.0683
4 dino 54.3 47.8 16.8 26.9 -0.0645
5 dots 54.3 47.8 16.8 26.9 -0.0603
6 h_lines 54.3 47.8 16.8 26.9 -0.0617
7 high_lines 54.3 47.8 16.8 26.9 -0.0685
8 slant_down 54.3 47.8 16.8 26.9 -0.0690
9 slant_up 54.3 47.8 16.8 26.9 -0.0686
10 star 54.3 47.8 16.8 26.9 -0.0630
11 v_lines 54.3 47.8 16.8 26.9 -0.0694
12 wide_lines 54.3 47.8 16.8 26.9 -0.0666
13 x_shape 54.3 47.8 16.8 26.9 -0.0656
Note
Otros ejemplos clásicos son el cuarteto de Anscombe y la paradoja de Simpson.
Imagen adaptada de https://datasciencebox.org
ggplot}Imagen adaptada de https://datasciencebox.org
{ggplot2} es un paquete tidyverse para visualización de datos.
gg en ggplot2 hace referencia a Grammar of Graphics.
Inspirado en el libro Grammar of Graphics, Wilkinson (2012).
ggplot() de {ggplot2}?ggplot2()
ggplot()
Ayuda con ggplot2: ggplot2.tidyverse.org y Cheatsheets.
ggplot()
Empezamos con el data.frame starwars2
Empezamos con el data.frame starwars2
ponemos height en el eje-x
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
añadimos el subtítulo “by gender”
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
añadimos el subtítulo “Género de los personajes de starwars2”
etiquetamos los ejes x e y como “x =”Height (cm)“, y =”Weight (kg)“, respectivamente
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
añadimos el subtítulo “Género de los personajes de starwars2”
etiquetamos los ejes x e y como “x =”Height (cm)“, y =”Weight (kg)“, respectivamente
etiquetamos la leyenda “Species”
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
añadimos el subtítulo “Género de los personajes de starwars2”
etiquetamos los ejes x e y como “x =”Height (cm)“, y =”Weight (kg)“,
etiquetamos la leyenda”Gender”
añadimos la fuente de los datos.
Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y
representamos cada observación con un punto
y la variable gender para el color de cada punto.
Añadimos título al gráfico: “Mass vs. height of Starwars characters”
añadimos el subtítulo “Género de los personajes de starwars2”
etiquetamos los ejes x e y como “x =”Height (cm)“, y =”Weight (kg)“,
etiquetamos la leyenda”Gender”
añadimos la fuente de los datos.
Finalmente, usamos paleta con una escala de colores discreta que está diseñada para ser percibida por espectadores con formas comunes de daltonismo.
Árbol de clasificación de gráficos según el tipo de datos
Lo básico de R.
El entorno de RStudio.
Crear proyectos (Quarto o no): créate uno para cada análisis que hagas.
Sintaxis Markdown y Quarto.
Hacer informes reproducibles.
El “estilo” de código.
Nociones básicas para manipular datos en R: tidyverse
Visualización de datos con {ggplot2}.
Recuerda que ni la IA ni los ordenadores actualmente no son inteligentes.
Filosofía: copy, paste, and tweak
La mejor forma de aprender código es haciéndolo.
La práctica es la clave