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:

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.

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:
  1. Hacemos clic en el botón Run (botón situado en la parte derecha de las opciones del panel de script).
  2. 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:

Para guardar el script:

  1. File > Save as y seleccionar la ruta donde se quiere guardar el fichero.
  2. 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 está 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.

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.  

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

Para trabajar la apariencia del gráfico, ggplotnos ofrecen multitud de colores. Los más habituales són estos:

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

if(!require(ggplot2)) {
    install.packages("ggplot2")
    library(ggplot2)} 

También cargaremos la base de datos. Para ello necesitaremos en primer lugar la librería readxl

 library(readxl)

Para cargar la base de datos usaremos la siguiente instrucción:

ejemplo <- read_excel("JCR_Tecnología Educativa.xls")

En tu caso puedes usar:

NOMBRE <- read_excel("NOMBRE Y LOCALIZACIÓN DEL ARCHIVO EXCEL")

Una foorma rápida de saber laas distintas variables de nuestra base de datos es a través de la instrucción names().

names(ejemplo)
##  [1] "Authors"                    "Author Full Names"         
##  [3] "Article Title"              "Source Title"              
##  [5] "Abstract"                   "Times Cited, WoS Core"     
##  [7] "Times Cited, All Databases" "Publication Year"          
##  [9] "Volume"                     "Issue"                     
## [11] "Special Issue"              "Start Page"                
## [13] "End Page"                   "DOI Link"                  
## [15] "IA"                         "Estudiantes"               
## [17] "N_Autores"                  "Cuantitativo"

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 (o partiendo de una única variable)

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 artículos en función del año. Para ello usamos la instrucción geom_istogram().

ggplot(ejemplo, aes(x = `Publication Year`)) +
  geom_histogram() 
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

En vuestro caso, podéis adaptar el código en función de las variables y de la base de datos que deseéis analizar.

ggplot(NOMBRE DE LA BAASE DE DATOS, aes(x = `VARIABLE`)) + 
  geom_histogram()

Podemos añadir el nombre de los ejes con la instrucción labs().

ggplot(ejemplo, aes(x = `Publication Year`)) +
   geom_histogram() + labs(x = "Año de publicación", y = "Recuento")
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

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

ggplot(ejemplo, aes(x = `Publication Year`)) +
   geom_histogram(fill = "blue", color = "red") + labs(x = "Año de publicación", y = "Recuento")
## `stat_bin()` using `bins = 30`. Pick better value `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(ejemplo, aes(x = `Publication Year`)) +
   geom_histogram(fill = "blue", color = "red", bins = 10) + 
  labs(x = "Año de publicación", y = "Recuento", title = "Publicaciones por año", subtitle = "bins  = 10")

Con el histrogma también podemos realizar comparaciones.Veamos que pasa con los estudiantes.

ggplot(ejemplo, aes(x = `Publication Year`)) +
   geom_histogram(fill = "blue", color = "red", bins = 15) + 
  facet_wrap(~ Estudiantes) +
  labs(x = "Año de publicación", y = "Recuento", title = "Publicaciones por año", subtitle = "bins  = 15")

O, en vez de verlo en dos gráficos, usar líineas que nos permitan ver la tendencia.

ggplot(ejemplo, aes(x = `Publication Year`)) +
  geom_histogram(bins = 15, fill = "grey", color = "white") +
  geom_freqpoly(aes(color = Estudiantes), bins = 15, linewidth = 1) +
  labs( x = "Año de publicación", y = "Recuento",
    title = "Publicaciones por año",
    subtitle = "Publicaciones sobre estudiantes")

Diagrama de barras

Los diagramas de barras (geom_bar) nos permiten ver la frecuencia de una o más variables. Por ejemplo, si queremos saber cuantos artículos usaron una metodología cuantitativa podemos usar la siguiente función.

ggplot(ejemplo, aes(x = `Cuantitativo`)) + 
  geom_bar()

En vuestro caso, podéis adaptar el código en función de las variables y de la base de datos que deseéis analizar.

ggplot(NOMBRE DE LA BAASE DE DATOS, aes(x = `VARIABLE`)) + 
  geom_bar()

Al igual que antes, podemos mejorar la apariencia del gráfico.

ggplot(ejemplo, aes(x = `Cuantitativo`)) +
   geom_bar(fill = "darkmagenta", color = "black") + 
  labs(x = "Artículos que usan una metodología cuantitativa", y = "Recuento", title = "Meetodología de los artículos")

También podemos usar las barras apiladas para mostrar tendencias.

ggplot(ejemplo, aes(x = Cuantitativo, fill = `Estudiantes`)) +
  geom_bar(color = "black", position = "stack") +
  labs(x = "Artículos que usan metodología cuantitativa",  y = "Recuento",
    title = "Metodología de los artículos", 
    subtitle = "Distribución en función de si se tiene en cuenta al alumnado")

La instrucción position = “stack” nos muestraa las barras apiladas en función del recuento. Si loos grupoos son muy desiguales podemos usar otro tipo de barras apiladas, como por ejemplo con position = “fill” que nos mostrará las disferencias porcentuales.

ggplot(ejemplo, aes(x = IA, fill = `Cuantitativo`)) +
  geom_bar(color = "black", position = "fill") +
  labs(x = "Artículos que tranta la IA",  y = "Porcentual",
    title = "Metodología de los artículos que tratan la IA")

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 relación entre el numero de citas y el número de autores.

ggplot(ejemplo, 
       aes(x = `N_Autores`, y = `Times Cited, All Databases`)) +
  geom_point()

En vuestro caso, podéis adaptar el código en función de las variables y de la base de datos que deseéis analizar.

ggplot(NOMBRE DE LA BAASE DE DATOS, aes(x = `VARIABLE 1`, y = `VARIABLE 2`)) + 
  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)

Vamos a ver un ejempplo teniendo en cuenta el año de publicación y las citaciones.

ggplot(ejemplo, 
       aes(x = `Publication Year`, 
           y = `Times Cited, All Databases`)) +
  geom_point(color = "darkmagenta", size = 5, alpha = 0.3) +
  labs (x = "Año de publicación", y = "Veces citado")

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(ejemplo, 
       aes(x = `Publication Year`,
           y = `Times Cited, All Databases`)) +
  geom_point(color = "black", size = 3, alpha = 0.4) +
  labs (x = "Año de publicación", y = "Número de citas") +
  geom_smooth(color = "darkmagenta", size = 1)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

A modo de ejemplo, y solo para que sea pueda apreciar mejor la tendencia, trabajaremos con los artículos que tienen menos de 50 citas

ejemplo2 <- read_excel("JCR_Tecnología Educativa - copia.xls")
ggplot(ejemplo2, 
       aes(x = `Publication Year`,
           y = `Times Cited, All Databases`)) +
  geom_point(color = "blue", size = 4, alpha = 0.2) +
  labs (x = "Año de publicación", y = "Número de citas") +
  geom_smooth(color = "red", size = 2)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

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.

A modo de ejemplo, trabajaremos solo con los artíuculos firados por un máximo de cuatro autores (fijaros que he pasado la variable autores a “texto”)

ejemplo3 <- read_excel("JCR_Tecnología Educativa - copia2.xls")
ggplot(ejemplo3, 
       aes(x = `N_Autores`, y = `Times Cited, All Databases`)) +
  geom_boxplot() 

En vuestro caso, podéis adaptar el código en función de las variables y de la base de datos que deseéis analizar.

ggplot(NOMBRE DE LA BAASE DE DATOS, aes(x = `VARIABLE 1`, y = `VARIABLE 2`)) + 
  geom_boxplot()

Como en ocasiones anteriores, se puede mejorar bastante la estética del gráfico.

ggplot(ejemplo3, aes(x = factor(`N_Autores`),
                     y = `Times Cited, All Databases`,
                     fill = `N_Autores`)) +
  geom_boxplot(color = "black") +
  scale_fill_brewer(palette = "Set2") +
  labs(x = "Número de autores", y = "Citas") 

La opción jitter nos dará mucha más información ya que podremos ver cómo se situaban las citas.

ggplot(ejemplo3, aes(x = factor(`N_Autores`),
                     y = `Times Cited, All Databases`,
                     fill = `N_Autores`)) +
  geom_boxplot(color = "black") +
  geom_jitter(color="black", size=1, alpha=0.1) +
  scale_fill_brewer(palette = "Set2") +
  labs(x = "Número de autores", y = "Citas") 

Existen otras opciones muy llamativas cuando la muestra es muy grande usando geom_violin

ggplot(ejemplo3, aes(x = factor(`N_Autores`),
                       y = `Times Cited, All Databases`,
                       fill = factor(`N_Autores`))) +
    geom_violin (width=0.3)+
    geom_boxplot(width=0.6, color="grey", alpha=0.4, width=0.5) +
    scale_fill_brewer(palette = "Set2") +
    labs(x = "Número de autores", y = "Citas") 
## Warning: Duplicated aesthetics after name standardisation: width

Gràficos multivariados

En la agrupación, los valores de las dos primeras variables se asignan a los ejes X e Y. A continuación, las variables adicionales se asignan a otras características visuales, como el color, la forma, el tamaño, el tipo de línea o la transparencia. La agrupación permite representar los datos de varios grupos en un único gráfico. Por ejemplo, vamos a observar la relación entre las citas en WoS, las citas enn JCR y la metodología usada.

ggplot(ejemplo, 
         aes(x = `Times Cited, All Databases`, y = `Times Cited, WoS Core`, color = Cuantitativo)) +
    geom_point( size = 4, alpha = 0.4) +
    labs (x = "Citas en WoS", y = "Citas en JCR", color = "Cuantitativo")

Para seguir con R

Tienes mucha información sobre R, códigos, paquetes, etc. en cualquier buscador.