EXPLORATORIOS EN R

Javier Rodríguez Barrios

MSc. Multivariados

Taller 2.1 Explor. Insectos

# Librerías requeridas
library(tidyverse)
library(dplyr)
library(kableExtra)   # Para la edición de tablas
library(readxl)       # Cargar bases de Excel
require(stats)        # No se requiere instalar
library(lattice)      # No se requiere instalar
library(ggrepel)      # insertar rótulos a los puntos
require(SciViews)     # Fig. dispersión con coef. de pearson
library(plotrix)      # Figuras de cajas con múltiples variables
library(corrplot)     # Figuras de elipses
library(psych)        # Matrices de correlación para figuras de elipses
library(reshape)      # Figuras de cajas con múltiples variables
library(reshape2)     # Figuras de cajas con múltiples variables 
library(gridExtra)    # Para figuras estadísticas (varios factores)
library(grid)         # Para figuras estadísticas (varios factores)
library(ggplot2)      # Paquete gráfico
library(forcats)      # Para manipulación de factores
library(viridis)      # Opciones de paletas de colores
#------------
datos <- read_excel("Insectos.xlsx")    # paquete "readxl" 
head(datos)

# Explorar estructura
# glimpse(datosl)
# summary(datos)

1. ELIPSES

# Elipses con colores
M <- cor(datos[,3:10])            # Matriz de Correlación (M)
# Elipses con colores
corrplot(M, method = "ellipse")  # Figura de correlaciones con elipses
# Elipses con colores
corrplot(M, method = "circle")   # Figura de correlaciones con circulos
# Elipses con colores
corrplot.mixed(M, upper="ellipse")

OPCIONES DE ELIPSES

# Figura de elipses con coeficientes de correlación
corrplot(M,  method = "circle",            # Correlaciones con circulos
         type = "lower", insig="blank",    # Forma del panel
         order = "AOE", diag = FALSE,      # Ordenar por nivel de correlación
         addCoef.col ="black",             # Color de los coeficientes
         number.cex = 0.8,                 # Tamaño del texto
         col = COL2("RdYlBu", 200))        # Transparencia de los circulos

2. DISPERSIÓN

# Correlaciones de Pearson
library(SciViews)

pairs(datos[,c(3,5,7,8,10)], diag.panel = panel.hist, 
      upper.panel = panel.cor, lower.panel = panel.smooth)

3. HISTOGRAMAS

# Frecuencias de abundancias por cuencas
ggplot(data = ..., aes(x = ..., color = ...)) +
  geom_density(aes(fill = ...), alpha = 0.5) +
  labs( y="Frecuencia", x="Abundancia") +
  theme_bw() +
  theme(panel.grid = element_blank()
  )
# Otra opción
ggplot(data = datos, aes(x = Ab, color = ...)) +
  geom_density(aes(fill = ...)) + 
  facet_wrap(~ ...) +
  theme_bw() +
  theme(panel.grid = element_blank()
  )

4. DISPERSIÓN X-Y

# Regresiones lineales (Esquema ggplot2) 
# ***Ejercicio*** Graficar la relación entre el pH y los efemerópteros
ggplot(datos, ...  ) +   
  geom_point(aes(color = cuenca), size = 3) +  
  geom_smooth(method= "lm") +
  theme(panel.grid = element_blank()
  )
# Regresiones suavizadas - Loess o Lowess (Esquema ggplot2) 
ggplot(datos,aes(x = pH, y = Efem)) +   
  geom_point(aes(color = cuenca), size = 3) +  
  geom_smooth() +
  theme_bw() +
  theme(panel.grid = element_blank()
  )
# Regresiones suavizadas (Loess)
ggplot(datos,aes(x = pH, y = Efem)) +   
  geom_point(aes(color = cuenca), size = 3) +  
  geom_smooth(se = FALSE, span = 0.4) +
  theme_bw() +
  theme(panel.grid = element_blank()
  )

CAJAS Y BIGOTES

Cajas con la biblioteca "ggplot2"

ggplot(..., aes(x=..., y=...)) + 
  geom_boxplot(aes(fill = ...)) +
  labs(x="Cuencas", y= "Abundancia de Insectos") +
  scale_fill_manual(values = c('#fc8d59','#ffffbf','#99d594','#377eb8')) +
  theme_bw() +
  theme(panel.grid = element_blank()
  )
# geom_boxplot(notch = T,... para las muescas.
# violin: como histograma acostado
ggplot(iris, aes(x = Species, y = Sepal.Length)) + 
  geom_violin(aes(fill = Species)) + 
  geom_jitter() +
  scale_fill_manual(values = c('#fc8d59','#ffffbf','#99d594')) +
  theme_bw() +
  theme(panel.grid = element_blank()
  )

Cajas con un factor: Cuencas.

Violines con un factor: Species.

# Figuras multivariadas de Cajas y bigotes
ggplot(melt(datos[,c(2,c(3,7,8,10))]), aes(x=variable, y=value)) + 
  geom_boxplot(aes(fill=cuenca)) + 
  scale_fill_manual(values = c('#fc8d59','#ffffbf','#99d594','#377eb8')) +
  labs(x="",y="Abundancia") + 
  facet_wrap(~ variable,scales="free") +
  theme_bw() +
  theme(panel.grid = element_blank()
  )

Cajas con multiples variables (melt).

# Coplot con líneas de ajuste suavizado (loess)
with(datos, {
  coplot(Efem~pH|temp,
         panel = panel.smooth)})

Coplot

# Categorización de la temperatura
datos <- 
  datos %>%
  mutate(clasetemp = case_when(
    ... <= quantile(..., 1/3, na.rm = TRUE) ~ "T.Baja",
    ... <= quantile(..., 2/3, na.rm = TRUE) ~ "T.Media",
    ... <= quantile(..., 3/3, na.rm = TRUE) ~ "T.Alta"
  ))

# Categorización del pH 
datos <- 
  datos %>%
  mutate(clasepH = case_when(
    pH <= quantile(pH, 1/3, na.rm = TRUE) ~ "pH.Bajo",
    pH <= quantile(pH, 2/3, na.rm = TRUE) ~ "pH.Medio",
    pH <= quantile(pH, 3/3, na.rm = TRUE) ~ "pH.Alto"
  ))

Cajas con variables contínuas categorizadas

# Cambiar etiquetas de Layers con recode_factor()
datos <- 
  datos %>%
  mutate(cuenca = recode_factor(cuenca, 
                                "cuen1" = "Cuenca1", 
                                "cuen2" = "Cuenca2",
                                "cuen3" = "Cuenca3",
                                "cuen4" = "Cuenca4"))

# Crear gráfico con etiquetas de valores atípicos redondeados
ggplot(datos, aes(x = factor(cuenca), y = Ab)) + 
  geom_boxplot(aes(fill = clasetemp)) +
  labs(
    x = "Cuencas", fill = "Temperatura",
    y = "Abundancia") +
  scale_color_viridis(discrete = TRUE) +
  facet_wrap(~ clasetemp, nrow = 1, strip.position = "top") + 
  theme_bw() +
  theme(
    panel.grid = element_blank(),
    axis.text.x = element_text(angle = 45, hjust = 1))

Cajas con variables contínuas categorizadas

7. FIGURAS CON ESTADÍSTICOS

# Resumen estadístico "datos_resum"
datos_resum <- datos %>% # Base de datos resumida
  group_by(...) %>%   # Factor o variable agrupadora
  summarise(datos.m   = ...(Ab),  # Media de cada grupo del factor
            datos.de  = ...(Ab), # Desviacioes est?ndar de cada grupo
            datos.var = ...(Ab), # Varianzas de cada grupo
            n.Ab = n(),  # Tamaño de cada grupo
            datos.ee = ...(Ab)/...(n())) # Error est?ndar de cada grupo
datos_resum
# Figura de promedios y errores estándar
DatosPlot<-
  ggplot(datos_resum, aes(cuenca, datos.m, dev.off())) + 
  geom_bar(stat="identity", col="blue", fill="lightblue") +  
  geom_errorbar(aes(ymin=datos.m-datos.ee, 
                    ymax=datos.m+datos.ee),width=0.2) 
# Imprimir la figura
print(DatosPlot + labs(y="Abundancia ± e.e.", x = "cuenca") + 
        theme_classic())
# Base de datos multifactorial (insectos1)
datos1<-read_csv2("Insectos2.csv")    # Formato *Tidyr
head(datos1)  # Encabezado de la base "datos1"
str(datos1)   # estructura de la base "datos1"
# Resumen estadístico "datos_resum"
datos_resum <- datos1 %>%        # Base de datos resumida
  group_by(...,...) %>%          # Factor o variable agrupadora
  summarise(datos.m   = ...(Biom),   # Media de cada grupo del factor
            datos.de  = ...(Biom),   # Desviacioes estándar de cada grupo
            datos.var = ...(Biom),   # Varianzas de cada grupo
            n.Biom = n(),            # Tamaño de cada grupo
            datos.ee = sd(Biom)/sqrt(n()))   # Error estándar de cada grupo
datos_resum
# Promedios y errores con colores automáticos (Figura p1)
p1<-
  ggplot(datos_resum, aes(x=GF, y=datos.m, fill=Lluvia)) + 
  geom_bar(stat="identity", col="black", position=position_dodge()) +  
  geom_errorbar(aes(ymin=datos.m, ymax=datos.m+datos.ee),width=0.2,
                position=position_dodge(.9)) +
  labs(x="Grupos Funcionales-GF", y ="Biomasa")
# Figura con definición de colores por periodo (figura p2)
p2 <-
  p1 +
  labs(title="Biomasa por GF",x="Grupos Funcionales-GF",y ="Biomasa") +
  theme_classic() +
  scale_fill_manual(values=c('#E69F00','#999999'))
# Impresión de un panel con las dos figuras (p1 y p2)
library(gridExtra)
grid.arrange (p1, p2, ncol=2)
# Inserción de las figuras en columna (figuras p1 y p2)
g2 <- ggplotGrob(p1)
g3 <- ggplotGrob(p2)
g <- rbind(g2, g3, size="first")
g$widths <- unit.pmax(g2$widths, g3$widths)
grid.newpage()
grid.draw(g)

OTRAS OPCIONES

Para la casa

6. COPLOT

# Coplot con líneas de ajuste suavizado (loess)
with(datos, {
  coplot(Efem~pH|temp,
         panel = panel.smooth)})
# Función para el coplot 
panel.lm = function(x, y, ...) {
  tmp<-lm(y~x,na.action=na.omit)
  abline(tmp, lwd = 1.5, col= 2)
  points(x,y, ...)}
# Cotplot con variables categorizadas
summary(datos[,2:8])

clasetemp <- cut(datos$temp,seq(15,20,1.2),include.lowest=T,
                 labels = c("t.baja", "t.media1","t.media2", "t.alta"))

clasepH <- cut(datos$pH,seq(5,8,1),include.lowest=T,
               labels = c("pH.bajo", "pH.medio","pH.alto"))
# Relación trivariada - Lineal
coplot(Efem~pH | clasetemp, pch=19,
   panel = panel.lm, data=datos)
# Relación trivariada - Suavizada
with(datos, {
  coplot(Efem~pH|clasetemp,
         panel = panel.smooth)})

4. FIGURAS ANIMADAS

library(ggplot2)
library(gganimate)
theme_set(theme_bw())   # Tema o fondo de la figura por default
library(gapminder)
# Edición de la figura
p <- ggplot(
  gapminder, 
  aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Life expectancy")
# Figura estática
p
# Figura animada
p + transition_time(year) +
  labs(title = "Year: {frame_time}")

TALLER DE ENTRENAMIENTO

Objetivo 1: Poner en práctica los conceptos vistos en el módulo de exploratorios multivariados, realizando las siguientes opciones gráficas en las bases de datos asignadas para los estdios de caso:

  1. Figuras de elipses

  2. Figuras de Dispersión por pares de variables (pairs)

  3. Histogramas

  4. Dispersión X-Y

  5. Cajas y Bigotes

  6. Coplot

  7. Figuras con estadísticos (promedios, errores, …)

TALLER DE ENTRENAMIENTO

Objetivo 2: Poner en práctica lo anterior con la base de datos de lirios `"data(iris)"`

  1. Figuras de elipses

  2. Figuras de Dispersión por pares de variables (pairs)

  3. Histogramas

  4. Dispersión X-Y

  5. Cajas y Bigotes

  6. Coplot

  7. Figuras con estadísticos (promedios, errores, …)

2.1 Exploratorios Insectos

By Javier Rodriguez

2.1 Exploratorios Insectos

  • 23