Introducción al software estadístico R

Formación ASEPELT. Universidad de Granada

👩‍🎓 Gema Fernández-Avilés

Universidad de Castilla-La Mancha

¿Dónde estamos?

Curso presencial


Orientación:

Datos, modelización estadística, R


Cake icon

Filosofía:

Probemos primero el pastel

Sobre modelización estadística con R


Code icon

Objetivo 1:

Fundamentos teóricos


Code icon with R logo

Objetivo 2:

R como herramienta de análisis estadístico.

PARTE I 🎯

¿Cuál de las siguientes tres descripciones le da una mejor idea del producto final?

Ingredientes

Libro de recetas

Tarta

Empecemos probando el pastel

PARTE II 🎯: 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.

  • Recomendar bibliografía:

    • 📖 Wickham and Grolemund (2016)

    • 📖 Ismay and Kim (2019)

    • 📖 Fernández-Avilés and Montero (2024).

Resultados esperados 🏅

Consola de RInterfaz gráfica de Rstudio

Conceptos clave 📄

Antes de comenzar: R, Rstsudio y Latex

  1. Descargar e instalar R: https://cloud.r-project.org/

  2. Descargar e instalar Rstudio: https://www.rstudio.com/products/rstudio/download/

Iconos de R (izquierda) y Rstudio (derecha)

  1. Opcional: Instalar Latex. Abre R y copia y pega estas dos órdenes en la consola.
install.packages('tinytex')
tinytex::install_tinytex()

Lo imprescindible y necesario

Consola de R.

¿Qué más estará programado?

¡Y mucho más!

🙋 

Paquetes

  • Instalación de paquetes (sólo se hace una vez).
install.packages("HistData")
  • Lectura de paquetes (se repite cada vez que se usa).
library("HistData")
  • Llamada de funciones dentro de un paquete con ::
dplyr::filter()
  • Llamada de datos dentro de un paquete con ::
HistData::Nightingale

Muy importante

  • R distingue MAYÚSCULAS y minúsculas:
Var
#> Error: object 'Var' not found
  • La almohadilla # sirve para comentar:
2+2  # esto es una suma
[1] 4
  • El operador <- asigna a la parte izquierda lo que hay en la derecha:
x <- 2 + 2
x
[1] 4
  • El operador $ accede a variables dentro de un conjunto de datos:
Nightingale$Army

¿Dónde encontrar ayuda?

  • En el propio programa con la función help() y el operador ?

    • Ayuda de funciones:
help(rnorm)
?rnorm # Equivalente
+  Ayuda de conjunto de datos:
help("iris")
?iris # Equivalente

The R Project for Statistical Computing

Rstudio: la clave 📜

RStudio

Fuente Ismay and Kim (2019)

¿Cuál es la diferencia entre R y RStudio?

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

Diseño de Rstudio

Warning

La posición relativa de cada panel pueden personalizarse desde el menú: Tools \> Global Options \> Pane Layout

¿Qué son los paquetes de R?

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.

Paquetes: instalación y carga

Instalación de paquetes
  1. Click Packages.

  2. Click Install.

  3. Escribe el nombre del paquete “Packages”. Por ejemplo, ggplot2.

  4. Click Install.

Lectura de paquetes

library(ggplot2)

Warning

La instalación de paquetes sólo se hace una. La lectura se realiza cada vez que se utilizan los paquetes.

Proyectos en RStudio 📤

Proyectos en RStudio

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

Creación de Proyectos Quarto

Estructura básica de poyectos

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…

Estructura de proyecto

Compilación de documentos

Compilación de documentos

Informes reproducibles 🤔

¿Por qué informes reproducibles?

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.

¿Qué es Quarto? 🤔

Quarto es un lenguaje que tiene como base Markdown

(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/

R Markdown. Artwork by Allison Horst

Warning

Sintaxis Markdonw

Help > Markdown Quick Reference

https://rmarkdown.rstudio.com/

Cheatseets

Entonces, ¿qué es Quarto?

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?

  • Presentación de código y ecuaciones LaTeX
  • Inclusión de resultados en la salida de las diapositivas
  • Fondos de imagen, video e iframe
  • Transiciones y animaciones elegantes
  • Impresión a PDF, HTML

Más información: https://quarto.org.

Quarto (fuente)

Estructura del documento

Quarto (resultado)

Render

Styler: estilo de código 🔣

¿Qué interior te gusta más?

Imagen tomada de: https://www.hola.com/hola-living/20200213160462/isabel-preysler-decoracion-terraza-invierno/

Imagen tomada de: https://es.123rf.com/imagenes-de-archivo/casa_desordenada.html

¿Qué interior te gusta más?

Imagen adaptada de: https://www.hola.com/hola-living/20200213160462/isabel-preysler-decoracion-terraza-invierno/

Imagen adaptada de: https://es.123rf.com/imagenes-de-archivo/casa_desordenada.html

La guía de estilo tidyverse

A. MeencantalaciudaddeSevilla

B. Me encanta la cuidad de Sevilla

La guía completa se encuentra en: The tidyverse style guide

Nombre de ficheros

fit_models.R
utility_functions.R

fit models.R           # espacios
fitmodels.r            # todo junto y r   
utility.Functions.R    # otros estilos anteriores

Sintaxis

  • snake_case: para nombres de objetos y funciones debe usarse minúscula, números y _ guión bajo para separar palabras dentro del nombre.

PARTE III 🌍 tidyverse

  • Conocer qué es el tidyverse y los datos tidy

  • Descubrir las acciones (verbos) de {dplyr}.

  • Aprender a visualizar datos con {ggplot2}.

Tidy data 📃

¿Qué significa tidy? ¿Cuál de estas dos imágenes es más tidy?

Imagen tomada de: iStock

¡Acertaste!

Imagen adaptada de: iStock

Características de los datos tidy

  • 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)

The grammar of data wrangling: {tidyverse} 🚧

Fuente: Allison Horst

Fuente: https://r4ds.had.co.nz/

Tidyverse:

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:

install.packages("tidyverse")

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.

El operador pipe 📝

¿Qué es un pipe?

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

¿Cómo funciona el pipe de forma intuitiva?

Imagina la siguiente secuencia:

(i) find keys, (ii) unlock car, (iii) start car, (iv) drive to work y (v) park.

Expresado como un cojunto de funciones anidadas y pseudo-código R podría ser así:

park(drive(start_car(unlock(find("keys"))), to = "work"))

Utilizando pipes la lectura se hace más fácil y natural:

find("keys") |>
  unlock_car() |>
  start_car() |>
  drive(to = "work") |>
  park()

Transformación de datos con dplyr

Fuente: https://dplyr.tidyverse.org/
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.

Importante: Cheatsheets en R

Cheatsheets

Fuente: https://posit.co/resources/cheatsheets/

Manos a la obra

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.

El conjunto de datos starwars

Fuente: https://datasciencebox.org

Terminología (común)

  • Cada fila es una observación
  • Cada columna es una variable
  • La forma más común de las tablas de datos: data.frame
library("dplyr")
starwars
# 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>

Algunas cuestiones básicas

¿Cuántas columnas (variables) tiene?

ncol(starwars)
[1] 14

¿Cuántas filas (observaciones) tiene?

nrow(starwars)
[1] 87

¿Cuál es la dimensión del dataset?

dim(starwars)
[1] 87 14

Tablas de datos (data.frames)

¿Cómo son las primeras observaciones del dataset?

head(starwars, 3)
# 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>
sw_name<-starwars$name

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 <-.

Exploración del dataset starwars

De un vistazo (con la función glimpse()):

skimr::skim(starwars)
Data summary
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 ▇▁▁▁▁

Una observación (el bueno): Luke Skywalker

Fuente: https://datasciencebox.org

¿Qué conozco sobre Luke Skywalker (el bueno)?

# tidy
starwars|>
  filter(name=="Luke Skywalker")
# 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>

PARTE IV. 📊 Gráficos con {ggplot2}

Resultados esperados 🏅

Hexbin plot (starwars data)

Conceptos clave 📄

¿Por qué es importante la visualización? 🖼

“The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey

DatasauRus

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

DatasauRus

Note

Otros ejemplos clásicos son el cuarteto de Anscombe y la paradoja de Simpson.

¿Cómo describirías la relación entre la masa y la altura de los personajes de Starwars?

library(tidyverse)
ggplot(data = starwars, mapping = aes(x = height, y = mass)) +
  geom_point() 

¿Quién es el outlier? Jabba Desilijic Tiure

Imagen adaptada de https://datasciencebox.org

“The grammar of graphics”: {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).

¿Cómo visualizar con la función ggplot() de {ggplot2}?

  • Cargamos la librería ggplot2()
library(ggplot2)
  • Utilizamos la función ggplot()
ggplot(data = [dataset], 
       mapping = aes(x = [x-variable], y = [y-variable])) +
   geom_xxx() +
   otras opciones

Ayuda con ggplot2: ggplot2.tidyverse.org y Cheatsheets.

Mi primer plot con ggplot()

library(ggplot2)
library(dplyr)  #cargamos los datos 'starwars'
# se crea un nuevo data.frame sin el outlier (que se elimina)
starwars2 <- filter(starwars, name != "Jabba Desilijic Tiure")
ggplot(data = starwars2, mapping = aes(x = height, y = mass)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       x = "Height (cm)", y = "Weight (kg)")

Fuente: Wikipedia

Paso a paso 🐾

Paso a paso:

Empezamos con el data.frame starwars2

ggplot(data = starwars2) 

Paso a paso:

Empezamos con el data.frame starwars2
ponemos height en el eje-x

ggplot(data = starwars2,
       mapping = aes(x = height))

Paso a paso:

Empezamos con el data.frame starwars2
ponemos height en el eje-x
ponemos mass en el eje-y

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass)) 

Paso a paso:

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

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass)) + 
  geom_point() 

Paso a paso:

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

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) + 
  geom_point()

Paso a paso:

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”

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour =gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters")

Paso a paso:

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”

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       subtitle = "by gender")  

Paso a paso:

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

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       subtitle = "by gender",  
       x = "Height (cm)", y = "Weight (kg)")

Paso a paso:

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”

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       subtitle = "by gender",  
       x = "Height (cm)", y = "Weight (kg)",
       colour = "Gender") 

Paso a paso:

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.

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       subtitle = "by gender",  
       x = "Height (cm)", y = "Weight (kg)",
       colour = "Gender",
       caption = "Source: dplyr package") 

Paso a paso:

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.

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = gender)) +
  geom_point() +
  labs(title = "Mass vs. height of Starwars characters",
       subtitle = "by gender",  
       x = "Height (cm)", y = "Weight (kg)",
       colour = "Gender",
       caption = "Source: dplyr package")  +
  scale_colour_viridis_d()

Aesthetics (estética) 🎯

ggplot(data = starwars2,
       mapping = aes(x = height,
                     y = mass,
                     colour = xxxxx,
                     shape = xxxxx,
                     size = xxxxx,
                     alpha = xxxxx)
       ) +
  geom_point() 

¿Cuál es la mejor representación gráfica? 🎯

¿Cómo son mis datos? 🤔

Un mundo de posibilidades 🤔

From data to viz project

Árbol de clasificación de gráficos según el tipo de datos

Recursos interesantes

https://r-graph-gallery.com/boxplot.html

The R graph gallery

https://r-charts.com/

R charts

https://exts.ggplot2.tidyverse.org/gallery/

Extensiones {ggplot2}

¿Qué hemos aprendido? 📖

  • 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}.

Nuestra filosofía 📖: learning by doing

  • 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

Referencias

Fernández-Avilés, G, and JM Montero. 2024. Fundamentos de Ciencia de Datos Con R. McGraw-Hill.
Hadley, Wickham. 2014. “Tidy Data.” Journal of Statistical Software 59 (10): 1–23.
Ismay, Chester, and Albert Y Kim. 2019. Statistical Inference via Data Science: A ModernDive into r and the Tidyverse. CRC Press.
Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. " O’Reilly Media, Inc.".
Wilkinson, Leland. 2012. The Grammar of Graphics. Springer.