Objetivos

  1. Continuar utilizando las funciones del conjunto de librerías tidyverse para la manipulación y análisis de datos, y la librería flextable para la presentación de resultados.

  2. Aprender a leer archivos csv.

  3. Aprender a construir histogramas con ggplot: geom_histogram()

  4. Aprender a hacer gráficas para grupos de datos: facet_wrap()

  5. Aprender a construir tablas de frecuencias: función tabyl() en el paquete janitor.

  6. Aprender a construir diagramas de barras a partir de tablas de frecuencias: geom_col()

  7. Aprender a construir y representar gráficamente tablas de frecuencias cruzadas.

 

 

 

 

Preliminares: carga de las librerías que utilizaremos en esta práctica.

 

 

 

 

1. Lectura de archivos csv

 

Abrir el archivo .Rmd de la práctica 3 y sustituir la lectura del archivo de datos datosP1-1920.xlsx por el archivo tortugas.csv que tiene la muestra completa de algo más de 1200 tortugas.

 

Los archivos .csv(comma separated values) son archivos de texto en los que los valores de las variables están separados por comas (en los archivos csv versión inglesa) o por punto y coma (en versión española). Asimismo, en los archivos en versión inglesa, el separador decimal es un punto, mientras que en la versión española el separador decimal es una coma.

Para realizar esta práctica debemos descargar el archivo tortugas.csv de la web. Este archivo se encuentra en dos versiones (ambas exactamente con el mismo contenido) dependiendo del sistema operativo (Windows o Mac) que se utilice. La única diferencia es la codificación de los caracteres no ingleses (la ñ, las vocales con tilde, la c con cedilla, etc), que se realiza de modo diferente en ambos sistemas; Windows se ajusta al estándar ISO8859-1 y Mac al estandar UTF-8.

En ambos casos, podemos abrir el archivo con algún editor de texto (el Bloc de Notas en Windows o el TextEdit en Mac) y comprobar que el archivo csv está en el estándar español, con puntos y comas separando los valores numéricos, y la coma como símbolo decimal:

 

Para leer este archivo utilizaremos la función read_csv2() (si el archivo estuviera en el estándar inglés usaríamos read_csv()):

Para repetir la práctica 3 con estos nuevos datos, lo único que tenemos que hacer es abrir el archivo anterior y buscar la linea donde se leía el archivo de datos:

La borramos y la sustituimos por la anterior.

 

 

 

 

2. Procesamiento (knitting) de un archivo Rmd.

 

Procesar el archivo de la practica con los datos de todas las tortugas.

 

La práctica anterior se realizó con los datos de 20 nidos de tortugas. Una vez que hemos cambiado el archivo con los datos como se ha indicado en el punto anterior (en lugar de leer “datosP1-1920.xlsx”, ahora leemos “tortugas.csv”), podemos procesar de nuevo el archivo de la práctica (pinchando en el botón knit en Rstudio) y se rehacen automáticamente todas las tablas y gráficos elaboradas en dicha práctica, de forma que ahora se obtienen resultados para los 1277 nidos que componían el estudio original. Aquí está el archivo .Rmd de la práctica anterior modificado, y aquí el resultado obtenido al procesarlo.

 

 

 

 

3. Gráficos con ggplot: histogramas geom_hist()

 

Construye histogramas de las variables LCC, distancia y profNido.

 

  • LCC

La sintaxis para construir un histograma con ggplot es:

Obsérvese que solo hay que especificar en aes() la variable cuyo histograma queremos construir. ggplot() calcula automáticamente las alturas de las barras. La función que construye el histograma es geom_histogram() y podemos especificar el color del borde de las barras (color) y el color del relleno (fill)

 

  • Distancia desde el nido hasta la orilla

 

  • Profundidad del nido

 

 

 

 

4. Gráficos con ggplot: gráficos por grupos de datos

 

Representa la profundidad del nido frente a la distancia a la orilla, dando un color distinto a cada playa.

 

4.1. Todas las playas en la misma gráfica

En este caso basta con indicar en la estética del gráfico (aes()) que se va a asignar un color a cada playa:

 

4.2. Una gráfica distinta para cada playa.

Si queremos representar cada playa no solo con un color distinto, sino en una gráfica distinta, utilizaremos facet_wrap(), indicando el número de columnas (ncol) o de filas (nrow) que queremos que salgan en la gráfica:

 

 

 

 

5. Tablas de frecuencias

 

Construye una tabla de frecuencias con el número de nidos que hay en cada playa, así como con el porcentaje del total de nidos que representa cada playa.

 

En R hay varias funciones que permiten construir tablas de frecuencias. La función que mejor interactúa con el resto de funciones del tidyverse es la función tabyl() del paquete janitor. Para construir una tabla de frecuencias que nos indique cuántos nidos hay en cada playa procedemos del siguiente modo:

##           playa   n   percent
##         Calheta 196 0.1534847
##         Ervatao 419 0.3281128
##     Ponta Cosme 498 0.3899765
##  Porto Ferreiro 164 0.1284260

Podemos mejorar, como siempre, la presentación de la tabla usando flextable():

playa

n

percent

Calheta

196

0.1534847

Ervatao

419

0.3281128

Ponta Cosme

498

0.3899765

Porto Ferreiro

164

0.1284260

 

Como vemos, por defecto, la columna percent muestra los datos en proporciones; si queremos que los muestre en forma de porcentaje, la librería janitor ofrece la opción de utilizar la función adorn_pct_formatting(). Además utilizamos a continuación el tema theme_box() de la librería flextable() que permite formatear la tabla de otra manera:

playa

n

percent

Calheta

196

15.3%

Ervatao

419

32.8%

Ponta Cosme

498

39.0%

Porto Ferreiro

164

12.8%

 

Si además utilizamos la función adorn_totals("row"), nos añade una fila adicional a la tabla con el total de la suma de todas las filas anteriores:

playa

n

percent

Calheta

196

15.3%

Ervatao

419

32.8%

Ponta Cosme

498

39.0%

Porto Ferreiro

164

12.8%

Total

1277

100.0%

 

 

 

 

6. Tablas de frecuencias: Representación gráfica con ggplot

 

Representa el número de tortugas por playa en un diagrama de barras.

 

Para construir un diagrama de barras con ggplot debemos usar uan geometría de columnas, geom_col(). Para ello necesitamos partir de una tabla que contenga las frecuencias que queremos representar; si nos fijamos en la tabla construida en el punto anterior, la frecuencia observada para cada playa se recoge en la variable n. El diagrama de barras se construye entonces mediante:

Como en la estética del gráfico hemos puesto fill=playa, cada playa se pinta de un color distinto, y se genera una leyenda a la derecha con el color que corresponde a cada playa. En realidad la leyenda es prescindible, toda vez que el nombre de cada playa aparece ya debajo de cada columna. Como la leyenda corresponde al color de relleno fill podemos eliminarla añadiendo guides(fill=FALSE). Si además queremos poner un título al gráfico y etiquetar los ejes con otros nombres, podemos usar la función labs():

Otro adorno que suele ser interesante para este tipo de gráficos, es añadir el valor numérico de la frecuencia encima de cada barra; para ello se usa la función geom_text():

 

La gráfica anterior representa las frecuencias absolutas (número de observaciones); si queremos representar las frecuencias relativas (proporción de nidos en cada playa), basta con darse cuenta de que en la tabla de frecuencias la frecuencia relativa se recoge en la variable percent, y lo único que habrá que hacer es indicar que la altura (y) de cada barra viene dada por percent, poniendo y=percent en la declaración estética aes() de la gráfica:

Obviamente el valor numérico de las proporciones queda bastante feo en la gráfica anterior. Podemos arreglarlo mediante:

 

 

 

 

7. Tablas cruzadas

 

¿La presencia/ausencia de cangrejos en los nidos difiere entre las distintas playas? Construye una tabla cruzada de cangrejos frente a playa.

 

Para responder a esta pregunta debemos averiguar qué proporción de nidos están infestados de cangrejos en cada playa. Para ello podemos construir inicialmente una tabla que nos indique, para cada playa, cuántos nidos tienen cangrejos y cuántos no. Ello se consigue fácilmente con tabyl:

##  cangrejos Calheta Ervatao Ponta Cosme Porto Ferreiro
##          0      45     131          98             31
##          1      97     159         258             81
##         NA      54     129         142             52

 

Si no queremos que nos muestre los valores perdidos (NA) correspondientes a nidos que no se revisaron y por tanto no se sabe si tienen o no cangrejos, usamos la opción show_na=FALSE:

cangrejos

Calheta

Ervatao

Ponta Cosme

Porto Ferreiro

0

45

131

98

31

1

97

159

258

81

 

Ahora, para calcular en cada playa qué proporción de nidos tienen cangrejos y qué proporción no los tienen, habremos de calcular la proporción por columnas en la tabla anterior; ello se consigue mediante adorn_percentages("col"):

cangrejos

Calheta

Ervatao

Ponta Cosme

Porto Ferreiro

0

0.3169014

0.4517241

0.2752809

0.2767857

1

0.6830986

0.5482759

0.7247191

0.7232143

 

Podemos añadir los porcentajes globales (para todas las playas), y mostrar los resultados en forma de porcentaje:

cangrejos

Calheta

Ervatao

Ponta Cosme

Porto Ferreiro

Total

0

31.7%

45.2%

27.5%

27.7%

33.9%

1

68.3%

54.8%

72.5%

72.3%

66.1%

 

Si queremos, además, que junto a cada porcentaje se muestre además el número de nidos a que corresponde ese porcentaje, usamos adorn_ns():

## Warning: `as_data_frame()` is deprecated as of tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.

cangrejos

Calheta

Ervatao

Ponta Cosme

Porto Ferreiro

Total

0

31.7% (45)

45.2% (131)

27.5% (98)

27.7% (31)

33.9% (305)

1

68.3% (97)

54.8% (159)

72.5% (258)

72.3% (81)

66.1% (595)

 

 

 

 

8. Tablas cruzadas: representación gráfica con ggplot.

 

Representa gráficamente la tabla cruzada anterior.

 

Representar la tabla cruzada con ggplot es un poco más difícil, ya que ggplot necesita que haya una única columna (variable) que contenga los valores de frecuencia, tal como hemos visto en el punto 6. Para ello lo único que hay que hacer es utilizar la función pivot_longer(), que convierte datos de formato “ancho” a formato “largo”. La tabla en formato “ancho” es la que ya tenemos:

##  cangrejos Calheta Ervatao Ponta Cosme Porto Ferreiro
##          0      45     131          98             31
##          1      97     159         258             81

y la tabla en formato “largo” se obtiene a partir de ésta mediante:

## # A tibble: 8 x 3
##   cangrejos playa              n
##       <dbl> <chr>          <dbl>
## 1         0 Calheta           45
## 2         0 Ervatao          131
## 3         0 Ponta Cosme       98
## 4         0 Porto Ferreiro    31
## 5         1 Calheta           97
## 6         1 Ervatao          159
## 7         1 Ponta Cosme      258
## 8         1 Porto Ferreiro    81

 

En esta sintaxis le hemos indicado a R que pase a formato largo todas las columnas menos la primera (es lo que significa cols= -1), ya que la primera columna simplemente indica si hay o no cangrejos, pero no contiene ningún valor de frecuencia.

Ahora, para hacer la gráfica debemos convertir la variable cangrejos en factor (ya que en otro caso R consideraría que es una variable numérica) y a continuación utilizar ggplot y geom_col indicando position="dodge" si se quieren poner las columnas presencia/ausencia de cangrejos una junto a otra:

También podemos poner las colummas presencia/ausencia de cangrejos una encima de otra utilizando position="stack":

 

 

Si en lugar de representar frecuencias absolutas queremos representar frecuencias relativas, utilizamos la tabla que contiene los datos en proporciones y la pasamos de formato ancho a formato largo; además creamos la variable porcentaje multiplicando la proporción por 100:

## # A tibble: 8 x 4
##   cangrejos playa          proporcion porcentaje
##       <dbl> <chr>               <dbl>      <dbl>
## 1         0 Calheta             0.317       31.7
## 2         0 Ervatao             0.452       45.2
## 3         0 Ponta Cosme         0.275       27.5
## 4         0 Porto Ferreiro      0.277       27.7
## 5         1 Calheta             0.683       68.3
## 6         1 Ervatao             0.548       54.8
## 7         1 Ponta Cosme         0.725       72.5
## 8         1 Porto Ferreiro      0.723       72.3

Y ahora creamos la gráfica del mismo modo que antes:

Si queremos superponer el valor numérico del porcentaje a cada columna añadimos geom_text():