Preliminares

Este curso presenta un acercamiento a R con el objetivo de que aprendas a manejar datos y poder hacer representaciones visuales de la estadística.

En lugar de presentar los conceptos de R de manera lineal, iré presentando distintos aspectos de R conforme se vayan necesitando; es decir, no vamos a presentar R como un lenguaje de programación sino como una herramienta para hacer análisis estadísticos.

Muchas de las infnormaciones que aquí se reflejan están extraidas del trabajo realizado por Iosu Paradinas y Orlando Joaqui-Barandica

¿Qué es R?

R es un lenguaje de programación y un entorno para el análisis estadístico y gráfico.

Es multiplataforma: está disponible para Windows, Macintosh y GNU/Linux.

R fue inicialmente creado por R. Ihaka y R.Gentleman de la Universidad de Auckland en 1993, pero actualmente, el entorno R es el resultado de la colaboración de toda una comunidad de usuarios.

A partir de 1997 el desarrollo del código fuente (o base-R) de R es llevado por un grupo de programadores conocido como “The R-core team”.

La página web oficial de R se llama: The R Project for Statistical Computing. Allí podrás encontrar toda la información oficial acerca de R.

Podemos ver la documentación oficial de R con help.start(). ¿Hace falta leerla? No

¿Por qué R?

Programa gratuito y muy potente para hacer análisis de datos.

No es R en si, sino su comunidad la que hace de R un programa tan potente.

Como consecuencia R (junto con sus paquetes) puede implementar una gran variedad de técnicas estadísticas y gráficas.

Entre las empresas que usan R están: Google, Facebook, Twitter, Microsoft, IBM, Uber, Ford, Airbnb,

Pues descargar R desde CRAN.R. Desde esta página web puedes descargar tanto R como RStudio :

https://posit.co/download/rstudio-desktop/

R base y extensiones mediante paquestes

Todas las funciones, datos y utilidades de R disponibles para ser utilizadas están almacenados en paquetes (PACKAGES en inglés).

Cuando abrimos RStudio, se cargan automáticamente 7 paquetes: son los paquetes de R-base. Podemos ver sus nombres tecleando en la consola loadedNamespaces()

Con los 7 packages de R-base se pueden hacer análisis estadísticos completos, pero hay miles de paquetes que podemos instalar de manera gratuita que nos permitirá extender las funcionalidades de R.

Podemos ver los paquetes que tenemos instalados con library().

El repositorio oficial de packages de R está en The Comprehensive R Archive Network o CRAN

Para tener una idea de lo dinámica que es la comunidad R os recomiendo que sigáis el foro R-bloggers.

RStudio

¿Qué es RStudio?

La interfaz de usuario de R no es muy amigable por lo que lo más común es usar R a través de RStudio.

RStudio es un programa que nos facilitar trabajar con R.

En términos más técnicos, RStudio es más que una GUI (interfaz), es un entorno de desarrollo integrado para R, en inglés ‘integrated development environment’ o IDE.

Entorno de trabajo de RStudio

Si abrimos RStudio vamos a ver algo parecido a lo que se muestra en la siguiente imagen:

Como podemos ver, RStudio está (normalmente) dividido en 4 paneles.

Consola

Por defecto, la consola se encuentra en el panel inferior-izquierdo. ¿Vemos la pestaña que pone Console? Inmediatamente debajo aparece un texto informativo y, finalmente, el símbolo “>”. Aquí es donde R espera que le demos instrucciones. Para ejecutarlas y obtener el resultado pulsamos Enter.

Hagamos este ejemplo:

1+3
## [1] 4
99 / 3^2
## [1] 11
(1+3)*99 / 3^2
## [1] 44
sqrt(9)
## [1] 3

Script

El script es lo más parecido a un cuaderno de trabajo. Es en donde realizaráas la practica totalidad de las acciones en R.

Para crear un script nuevo seleccionamos la siguiente ruta de menús: File > New File > R script

El panel del script se sitúa, habitualmente, en la parte superior-izquierda de RStudio. Ahora podemos escribir las instrucciones línea por línea. Las instrucciones las podemos ejecutar una a una o las podemos seleccionar y ejecutar en bloque. Para ejecutar las instrucciones tenemos varias alternativas:

  • Hacemos clic en el botón Run (botón situado en la parte derecha de las opciones del panel de script).
  • Pulsamos Ctrl + r o Ctrl + Enter.

En el script podemos escribir como si fuera un cuaderno, o también podemos copiar pedazos de código. Ahora, escribir o copiar de arriba las siguientes líneas y correr las diferentes líneas del script:

El panel, llamémoslo, de entorno esta compuesto de cuatro pestañas: Environment, History, Connections y Tutorial.

En el Environment se irán registrando los objetos que vayamos creando en la sesión de trabajo. También tenemos la opción de cargar y guardar una sesión de trabajo, importar datos y limpiar los objetos de la sesión. Estas opciones están accesibles a través de la cinta de opciones de la pestaña.

Para guardar el script:

  • File > Save as y seleccionar la ruta donde se quiere guardar el fichero.
  • Hacer clic en el botón Guardar que se encuentra en la parte izquierda de la cinta de opciones del script.

Entorno

El panel, llamémoslo, de entorno esta compuesto de cuatro pestañas: Environment, History, Connections y Tutorial.

  • En el Environment se irán registrando los objetos que vayamos creando en la sesión de trabajo. También tenemos la opción de cargar y guardar una sesión de trabajo, importar datos y limpiar los objetos de la sesión. Estas opciones están accesibles a través de la cinta de opciones de la pestaña.

En la pestaña History se registran las instrucciones ejecutadas. Como opciones, podemos cargar y guardar el historial de la sesión, seleccionar una o más instrucciones y enviarlas bien a la consola bien al script, y limpiar el historial.

En la pestaña Connections podemos conectar R a diferentes fuentes de datos, como por ejemplo ODBC, Spark, Oracle, SQLServer, Hive, Impala, etc.

  • En la pestaña Tutorial podemos obtener ayuda para los diversos paquetes.

Figuras y archivos

Este panel se encuentra en la parte inferior-derecha del escritorio de RStudio.

En este panel cabe destacar las siguientes pestañas, cada una con diferentes opciones:

  • Files: es una especie de explorador de ficheros.
  • Plots: donde se visualizan los gráficos que creamos. Entre las opciones disponibles se encuentran:
    • Zoom: para agrandar el gráfico y verlo en otra ventana.
    • Export: para exportar/guardar el gráfico. Se puede guardar el gráfico como imagen, pdf o copiarlo al portapapeles.
  • Packages: proporciona un listado de los paquetes instalados en R y los que han sido cargados en la sesión. A través de las opciones de esta pestaña podemos instalar nuevos paquetes o actualizar los existentes.
  • Help: Para obtener ayuda sobre una determinada función o paquete.

Instalar y cargar paquetes

R está compuesto por un sistema base, pero para extender su funcionalidad es necesario instalar paquetes adicionales.

Podemos instalar paquetes de varias formas:

  • A través del menú: Tools > Install packages …
  • Utilizando la función install.packages(). El nombre del paquete que queremos instalar debe ir entre comillas.
install.packages("dplyr") # Fíjate que para instalar el paquete ponemos el nombre entre comillas
  • En ocasiones, para nuestra sesión de trabajo necesitamos instalar varios paquetes.
install.packages(c("dplyr","ggplot2","data.table"))  
  • En el escritorio de RStudio: Packages/Install. Vemos los paquetes que tenemos actualmente instalados y aquellos que se encuentran cargados.

Una vez instalado el paquete debemmos cargarlo. Para ello, o bien en el menu anterior presionamos en los recuadros, bien a través de una instruccion como esta:

library(dplyr) # Par cargar el paquete no es necesario poner el nombre entre comillas.  

Primeros pasos en R

Vamos a hacer este ejercicio para ir incorporando ciertos conceptos de R. Vamos a crear algunos vectores(objetos). Estos son la unidad base de R. No te preocupes, es algo sencillo y en seguida definiremos mejor lo que es un vector:

1+3
## [1] 4
99 / 3^2
## [1] 11
(1+3)**99 / 3^2
## [1] 44
a  <-  1+3 # con este simbolo <-  creamos un vector compuesto por lo que hay después de él
a      # "a" es un vector de un solo componente, que es 4
## [1] 4
b  <-  99 / 3^2 
b      # "b" es un vector de un solo componente, que es 11
## [1] 11
a*b    # hemos hecho una multiplicación entre dos vectores
## [1] 44
ejemplo  <-  c(a,b,a*b) # hemos creado un vector
ejemplo
## [1]  4 11 44
mean(ejemplo) # mean es la forma  de calcular la media. Fíjate que lo que queremos calcular está entre parentésis
## [1] 19.66667
media <- mean(ejemplo)
media
## [1] 19.66667
sd(ejemplo) # sd es la forma de calcular la deviación estándar.
## [1] 21.36196
desviación_estandar <- sd(ejemplo)
desviación_estandar
## [1] 21.36196

Recapitulando algunos concpetos importantes:

  • R utiliza funciones para realizar operaciones. Una función es, por ejemplo, mean(). Para utilizar una función deben especificarse unos argumentos, que es lo que escribimos dentro de los paréntesis.

  • El símbolo “<-” es el operador para asignar. También se puede utilizar “=” , aunque es preferible utilizar el “<-”.

  • El símbolo “#” se utiliza para introducir un comentario. Todo lo que quede a la derecha de “#” no se ejecutará.

  • Cuando se realiza una asignación se obtiene un objeto (vector). Podemos ver el resultado o contenido de un objeto de varias formas. Por ejemplo, para ver qué es el objeto a podemos escribir en la consola:

    • a
    • print(a)
    • (a <- 3+4)

También lo podemos ver en el panel de entorno del escritorio de RStudio (arriba a la derecha en Rstudio por defecto).

Qué es un vector

Ya has trabajado con vectores, pero ahora vamos a apliarlo. Un vector es el objeto más sencillo de R. La mayoría de operaciones y funciones en R trabajan de forma vectorial. Veamos que puede querer decir esto.

Para crear un vector se utiliza la función c().

a <- c(9,-7,3,1,0,-2)
a     # a es un vector con 6 componentes
## [1]  9 -7  3  1  0 -2
b <- 1:6
b     # ":" crea un vector que resulta de la secuencia entre el primer número y el segundo. 
## [1] 1 2 3 4 5 6

Una cosa muy imortante que tienes que tener en cuenta es que un vector puede tener distintos elementos, pero no se pueden juntar en ese mismo vector. Los más habituales son: - Numéricos - Caracter

```r
a <- c(1,2,3,4)    # creamos el vector "a"
class(a)           # devuelve el tipo de objeto
## [1] "numeric"
b <- c("X","Y")
class(b)
## [1] "character"
```

Los Data Frame

Los data.frame se usan para almacenar datos en forma de tablas (filas y columnas), como estas habituado en Excel y/o similares. Los data.frame se componen de diferentes vectores, que pueden almacenar objetos/datos de distinto tipo: numérico, carácter, etc. y son almacenados por columnas. Recordad que en las matrices todos los elementos tienen que ser enteros o numéricos.

Los data.frame pueden entenderse como un tipo especial de lista donde cada elemento de la lista tiene que tener la misma longitud. Cada elemento de la lista sería una columna y la longitud de cada elemento de la lista serían las filas.

R incluye algunos data.frame que se usan habitualmente para prácticar, como por ejemplo mtcarso iris. Prueba a abrirlos.

Abrir una base de datos

Para abrir una base de datos con el que después poder trabaajar tienes dos opciones:

  • A Importarlo directamente con la opción Import Dataset que tienes en la ventana de Entorno

  • (opción recomendada) Escribir la ruta de acceso. Para ello tienes que descargar tabién un paquete que te permita leerlo directaamente.Por ejemplo:

    library(readxl)
    Violencia_dataset_ <- read_excel("Violencia (dataset).xlsx")

Observar una base de datos

Algunas instrucciones te permitirán hacer un primer análisis de la base de datos. Como ejericio, empieza por abrir la bse de datos “Violencia” que yaa has trabajado en esta asigntura y pruba las siguientes instrucciones.

library(readxl)
Violencia_dataset_ <- read_excel("Violencia (dataset).xlsx")
violencia <- Violencia_dataset_
names (violencia)
summary(violencia)
table(violencia$`País de origen`) # Para haacer referenca a una columna concreta hay que introducir el símbolo del dolar despues del nombre de la base de datos
table(violencia$`País de origen`, 
      violencia$`Parejas previas`)
mean(violencia$Edad)
sd(violencia$Edad)

ggplot2

Es indiscutible que, hoy en día, la mayoría de las representaciones gráficas en R pasan por el package ggplot2.

Un gráfico realizado con ggplot2 presenta, al menos, tres elementos:

  • Datos (Data) que queremos representar (que serán un data frame).
  • Características estéticas (aesthetic mappings) que describen cómo queremos que los datos se vean en el gráfico. Como luego veremos, se introducen con la función aes() y se refieren a:
    • posición (en los ejes)
    • color exterior (color)
    • color de relleno (fill)
    • forma de puntos (shape)
    • tipo de línea (linetype)
    • tamaño (size)
  • Objetos geométricos (Geom) representan lo que vemos en un gráficos (puntos, líneas, etc.). Todo gráfico tiene, como mínimo, una geometría. La geometría determina el tipo de gráfico:
    • geom_point (para puntos)
    • geom_lines (para lineas)
    • geom_histogram (para histograma)
    • geom_boxplot (para boxplot)
    • geom_bar (para barras)
    • geom_smooth (líneas suavizadas)
    • geom_polygons (para polígonos en un mapa)
    • etc. (si ejecutáis el comando help.search(“geom_”, package = “ggplot2”) podéis ver el listado de objetos geométricos)
    Ten en cuenta que o todos los tipos de datos admiten todos los objetos geométricos.

Por tanto, para construir un gráfico con ggplot2 comenzamos con la siguiente estructura de código, usando + como nexo entre argumentos:

ggplot(datos, aes() ) + geom_tipo()

A partir de esta estructura básica puede mejorarse la presentación de los gráficos introduciendo, por ejemplo, características estéticas en los objetos geométricos, rotulando los gráficos, etc.

Otros elementos que conviene tener presente en un gráfico de ggplot2 son:

  • Stat (Stat), transformaciones estadísticas para, generalmente, resumir datos (por ejemplo: contar frecuencias, número de intervalos en los histogramas, etc.).
  • Escalas (Scale). Las escalas, por ejemplo, convierten datos en características estéticas (colores, etc.), crean leyendas… .
  • Coordenadas (coord): sistema de coordenadas cartesianas, polares, proyecciones, etc.
  • Faceting (Faceting), permite representar gráficos separados para subconjuntos de los datos originales.

Vamos a realizar algunos gráficos con ggplot2. Para ello, cargamos la librería.

library(readxl)
violencia  <- read_excel("Violencia (dataset).xlsx")

Si no está instalado el paquete lo instalamos.

if(!require(ggplot2)) {
    install.packages("ggplot2")
    library(ggplot2)} 
## Loading required package: ggplot2

En los ejemplos que siguen tratamos de ir introduciendo poco a poco distintos elementos y argumentos para mejorar la apariencia de los gráficos.

Gráficos univariados

Histogramas

No confundas un histograma con un diagrama de barras. Un diagrama de barras da un valor para cada grupo de una variable categórica.

Veamos la distribución de condenas en función del año de la agresión juzgada. Para ello usamos la instrucción geom_istogram()

ggplot(violencia, aes(x = violencia$`Año agresión juzgada`)) +
  geom_histogram() 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Podemos aañaadir el nombre de los ejes con la instrucción labs()

ggplot(violencia, aes(x = violencia$`Año agresión juzgada`)) +
  geom_histogram() + labs(x = "Año agresión juzgada", y = "recuento")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Los colores se pueden modificar fácilmente con la instrucción fill (color de de relleno) y color (color del borde).

ggplot(violencia, aes(x = violencia$`Año agresión juzgada`)) +
  geom_histogram(fill = "blue", color = "red") + labs(x = "Año agresión juzgada", y = "recuento")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Una de las opciones de histograma más importantes es bins, que controla el número de contenedores en los que se divide la variable numérica (es decir, el número de barras en el gráfico). El valor predeterminado es 30, pero es útil probar números cada vez más pequeños para tener una mejor impresión de la forma de la distribución. Fíjate que también añado un título a la figura y un subtítulo

ggplot(violencia, aes(x = violencia$`Año agresión juzgada`)) +
  geom_histogram(fill = "blue", color = "red", bins = 10) + labs(x = "Año agresión juzgada", y = "recuento", title = "Año de la agresión jugada", subtitle = "bins  = 10")

Con el histrogma también podemos realizar comparaciones. A modo de ejemplo, usaremos un nuevo paquete (dplyr) que nos permitirá moificar la base de datos y reducir el número de paises con los que trabajemos. Tabién necesitaremos instalarhrbrthemes y viridis

if(!require(dplyr)) {
    install.packages("dplyr")
    library(dplyr)} 
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
violencia2 <-  violencia %>%
  filter(violencia$`País de origen` %in% c("Italia", "Malta", "Paises Bajos"))

if(!require(hrbrthemes)) {
    install.packages("hrbrthemes")
    library(hrbrthemes)}
## Loading required package: hrbrthemes
if(!require(viridis)) {
    install.packages("viridis")
    library(viridis)}
## Loading required package: viridis
## Loading required package: viridisLite

Una vez cargaados los paquetes podemos realizar la instrucción

violencia2 %>%
  ggplot( aes(x=violencia2$`Año agresión juzgada`)) +
  geom_histogram(fill="#69b3a2", color="#e9ecef", alpha=0.8, bins = 15) +
  facet_wrap(~violencia2$`País de origen`, scale="free_x") +
  theme_ipsum() +
  theme(
    panel.spacing = unit(0.1, "lines"),
    axis.title.x=element_blank(),
    axis.text.x=element_blank(),
    axis.ticks.x=element_blank())

Diagrama de barraas

Analizemos cuantas deuncias hay por pais.

ggplot(violencia2, aes(x = violencia2$`País de origen`)) + 
  geom_bar()

Al igal que antes, añadiremos color y texto.

ggplot(violencia2, aes(x = violencia2$`País de origen`)) + 
  geom_bar(fill = "cornflowerblue", 
           color="black") +
  labs(x = "Paises", 
       y = "Número de denuncias", 
       title = "Denuncias por pais")

Barras apiladas

Al trazar la relación entre dos variables categóricas, normalmente se utilizan gráficos de barras apiladas, agrupadas o segmentadas.

ggplot(violencia2, 
       aes(x = violencia2$`Año agresión juzgada`, 
           fill = violencia2$`País de origen`)) + 
  geom_bar(position = "stack") +
  labs ( x = "Año de la agresión", y = "Recuento", fill = "País")

Esta opción tiene variaciones al modificar la instricción position.

ggplot(violencia2, 
       aes(x = violencia2$`Año agresión juzgada`, 
           fill = violencia2$`País de origen`)) + 
  geom_bar(position = "dodge") +
  labs ( x = "Año de la agresión", y = "Recuento", fill = "País")

ggplot(violencia2, 
       aes(x = violencia2$`Año agresión juzgada`, 
           fill = violencia2$`País de origen`)) + 
  geom_bar(position = "fill") +
  labs ( x = "Año de la agresión", y = "Recuento", fill = "País")

Gráficos bivariados

Diagramas de dispersión

La visualización más simple de dos variables cuantitativas es un diagrama de dispersión, con cada variable representada en un eje. Por ejemplo, podemos observar la relaación entre la edad y el sueldo bruto anual únicamete en el caso de España.

violencia3 <-  violencia %>%
  filter(violencia$`País de origen` %in%
   c("España"))
           
ggplot(violencia3, 
       aes(x = violencia3$Edad, 
           y = violencia3$`Sueldo bruto anual`)) +
  geom_point()

Las opciones se pueden utilizar para cambiar el geom_point().

  • color - color de punto
  • size - tamaño de punto
  • shape - forma de punto
  • alpha - transparencia de punto (va de 0 a 1) (0: transparente, 1: opaco)

Por ejemmplo:

ggplot(violencia3, 
       aes(x = violencia3$Edad, 
           y = violencia3$`Sueldo bruto anual`)) +
  geom_point(color = "blue", size = 3, alpha = 0.4) +
  labs (x = "Edad", y = "Sueldo bruto anual")

Linea de ajuste

A menudo es útil resumir la relación que se muestra en el diagrama de dispersión, utilizando una línea de mejor ajuste. Se admiten muchos tipos de líneas, incluidas las lineales polinomiales y no paramétricas (loess). De forma predeterminada, se muestran los límites de confianza del 95% para estas líneas.

ggplot(violencia3, 
       aes(x = violencia3$Edad, 
           y = violencia3$`Sueldo bruto anual`)) +
  geom_point(color = "blue", size = 3, alpha = 0.4) +
  labs (x = "Edad", y = "Sueldo bruto anual") +
  geom_smooth(color = "red", size = 2)
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

Diagramaas de caja o Boxplot

Un diagrama de caja ofrece un buen resumen de una o más variables numéricas. Un diagrama de caja se compone de varios elementos:

  • La línea que divide el cuadro en 2 partes representa la mediana de los datos. Si la mediana es 10, significa que hay el mismo número de puntos de datos por debajo y por encima de 10.
  • Los extremos del cuadro muestran los cuartiles superior (Q3) e inferior (Q1) . Si el tercer cuartil es 15, significa que el 75% de las observaciones son inferiores a 15.
  • La diferencia entre los cuartiles 1 y 3 se llama rango intercuartil (IQR).
  • La línea extrema muestra Q3 + 1.5xIQR a Q1-1.5xIQR (el valor más alto y más bajo excluyendo los valores atípicos).
  • Los puntos (u otros marcadores) más allá de la línea extrema muestran valores atípicos potenciales.
violencia4 <-  violencia %>%
  filter(violencia$`País de origen` %in%
   c("España", "Italia", "Francia", "Inglaterra"))
ggplot(violencia4, 
       aes(x = violencia4$`País de origen`, 
           y = violencia4$`Años de condena`)) +
  geom_boxplot() +
  labs (x = "País", y = "Años de condena")

Vaos a mejorar un poco la estética de este gráfico:

ggplot(violencia4, 
         aes(x = violencia4$`País de origen`, 
             y = violencia4$`Años de condena`, fill = violencia4$`País de origen`)) +
    geom_boxplot() +
    theme(legend.position="none") +
    labs (x = "País", y = "Años de condena")

La opción jitternos dará mucha más información:

ggplot(violencia4, 
       aes(x = violencia4$`País de origen`, 
           y = violencia4$`Años de condena`, fill = violencia4$`País de origen`)) +
  geom_boxplot() +
  geom_jitter(color="black", size=1, alpha=0.1) +
  theme(legend.position="none") +
  labs (x = "País", y = "Años de condena")

Existen otras opciones muy llamativas cuando la muestra es muy grande, como la siguiente:

ggplot(violencia4, 
       aes(x = violencia4$`País de origen`, 
           y = violencia4$`Sueldo bruto anual`, fill = violencia4$`País de origen`)) +
  geom_violin(width=0.3) +
  geom_boxplot(width=0.1, color="grey", alpha=0.2, width=2.8) +
  theme(legend.position="none") +
  labs (x = "País", y = "Años de condena")

Gràficos multivariados

En la agrupación, los valores de las dos primeras variables se asignan a la x y Y ejes. Luego, las variables adicionales se asignan a otras características visuales como el color, la forma, el tamaño, el tipo de línea y la transparencia. La agrupación te permite trazar los datos de varios grupos en un solo gráfico. Por ejemplo, si retomamos el diagrama de disepersión que hicimos antes, podemos añadir el dato de los paises

ggplot(violencia4, 
       aes(x = violencia4$Edad, 
           y = violencia4$`Sueldo bruto anual`, color = violencia4$`País de origen`)) +
  geom_point( size = 3, alpha = 0.6) +
  labs (x = "Edad", y = "Sueldo bruto anual", color = "Pais de origen")

Para seguir con R

Tienes mucha información sobre R, códigos, paquetes, etc en cualqueir buscador. En cualquier caso, durante las clases de esta asignatura irás viendo y experimentando con nuevas propuestas.