Tema 7 - Introducción a R en RStudio

Gráficos con R Base

Utilizaremos código para representar datos en los 4 tipos de gráficos básicos identificados en el tema anterior: gráficos de dispersión /distribución, gráficos de barras, diagramas de tarta y gráficos de cajas y bigotes. Además resaltaremos algunos tipos de gráficos de especial interés en el análisis exploratorio de datos. Vamos a cargar un paquete de datos que se incluye en la distribución de R Base, mtcars

##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Gráficos exploratorios

Son gráficos que se utilizan para evaluar las características de una variable en un dataset. Vamos a revisar principalmente dos:

Histograma

Representa la frecuencia de la distribución de valores de una variable. El eje X representa los valores y el Y la frecuencia de aparición.

xh <- datos$mpg

hist(xh)

Se pueden añadir algunas opciones gráficas para mejorar la representación. Para mostrar la curva de densidad representaremos el histograma de frecuencias relativas.

xh <- datos$mpg

hist(xh, freq = FALSE, breaks = 12,
     main = "Histograma de consumo",
     xlab = "Consumo (millas/US galon)",
     ylab = "Frecuencia relativa")
lines(density(xh), lwd = 2, col = "red")

Gráficos cuantil-cuantil

Los gráficos cuantil-cuantil (Q-Q plot) son otra representación de la distribución de una variable. Nos indican el ajuste de la variable a una distribución de un tipo elegido (la distribución normal por defecto) mediante el ajuste de los resíduos de la función:

#Representación de los resíduos respecto a la normal
qqnorm(xh)

#Representación de la línea de ajuste
qqline(xh, col = "red")

Una de las representaciones más usadas es la que además muestra los intervalso de confianza de los errores. Esto es más complicado de representar en código base, por lo que se usan librerías. La más común y usada es la librería “car”. El gráfico que muestra indica también los valores extremos de la distribión (outliers):

library(car)

qqPlot(xh, ylab = "Consumo", xlab = "Cuantiles normales")

## [1] 20 18

Gráficos de dispersión

Biplot (Scatter plot)

Representan la posición de todos los casos de un dataset para dos características numéricas. Cada característica (variable) se representa en un eje.

# Definimos los argumentos previamente o los incluimos en la función
x <- datos$wt
y <- datos$mpg

plot(x, y)

A continuación vamos a añadirle algunas opciones al gráfico. Entre otras opciones, la distribución de puntos puede modelarse en función de líneas de tendencia.

# Definimos los argumentos previamente o los incluimos en la función
# Personalizar
plot(x, y,
     main = "Relación peso-consumo",
     xlab = "Peso (x1000 lbs)",
     ylab = "Consumo (millas/US galon)",
     pch = 16, col="blue")

# Añadir linea de tendencia
modelo <- lm(y~x, data=datos)
abline(modelo,
       col ="red",
       lty = 2)

#Añadir texto
summary(modelo) # Para ver los resultados del modelo lineal
## 
## Call:
## lm(formula = y ~ x, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.5432 -2.3647 -0.1252  1.4096  6.8727 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
## x            -5.3445     0.5591  -9.559 1.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared:  0.7528, Adjusted R-squared:  0.7446 
## F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10
text(4, 30, "mpg ~ 37.3 - 5.3wt")

Gráfico de tendencia

También se pueden utilizar líneas para mostrar la tendencia de grupos de puntos clasificados por valores finitos o factores. Veamos qué sucede si representamos esta serie de puntos:

x2 <- datos$cyl
plot(x2, y)

#Añadir líneas
lines(x2, y) 

A continuación vamos a utilizar el punto medio para representar la tendencia entre grupos

#Para representar la linea necesitamos valores unicos
medias <- aggregate(x=mtcars$mpg, by=list(mtcars$cyl), FUN=mean)
x3 <- medias$Group.1
y3 <- medias$x
plot(x2, y)
lines(x3, y3)

Vamos a personalizar la gráfica para que muestre más opciones:

#Gráfica personalizada, incluyendo grupos

transmision <- datos$am 

plot(x2, y,
     main = "Consumo y cilindrada",
     xlab = "Cilindros",
     ylab = "Consumo (millas/US galon)",
     pch = 16, col= c("blue", "green")[factor(transmision)],
     frame.plot = FALSE)
lines(x3, y3,
      col="red", pch=16, type="b")
legend(6, 35, legend=c("Automatico", "Manual", "Media"),
       col=c("blue", "green", "red"), pch=16, cex=0.8,
       box.lty=0)

Gráficos de valores

Gráficos de barras

Son gráficos de dos dimensiones que representan valores medios o valores absolutos de una variable en función de un factor. Por tanto, una de las variables ha de ser numérica (eje Y) y la otra categórica (eje X). Los histogramas que se vieron en la primera sección son un tipo de gráfico de barras.

# Necesitamos un factor en el eje x, y valores unicos en el eje y. Tabulamos los valores.
tabla1 <- table(mtcars$cyl)

barplot(tabla1) # ésto es equivalente a un histograma

Introduzcamos algunas opciones. Para representar factores hay que indicarlos en una tabla de doble entrada:

# Tabla cilindrada vs tipo de cambio
tabla2 <- table( mtcars$am, mtcars$cyl)

barplot(tabla2, main="Consumo por cilindrada \n y cambio",
        xlab = "Cilindros",
        ylab = "Consumo (millas/US galon)",
        col = c("blue", "green"),
        ylim = c(0, 20))

# Incluir leyenda
legend(0.1, 16, legend=c("Automatico", "Manual"),
       col=c("blue", "green"), pch=16, cex=1,
       box.lty=0)

Gráfico de sectores:

Son gráficos de una sola dimensión de datos, es decir, que representan los valores de una sola variable, aunque utilizan factores endógenos para comparar. Se utilizan para mostrar relaciones entre factores, sobre todo de tipo fraccional. La circunferencia representa el total de los casos estudiados y cada trozo o sector representa el peso sobre el total de los casos asociados a un determinado factor.

# Utilizamos los valores medios de consumo calculados para la gráfica de tendencias (frecuencia)

pie(y3, labels= c("26,67", "19,74", "15,10"),
    col = c("blue", "red", "green"),
    main = "Consumo por Numero de cilindros",
    cex = 0.8,
    border = "white")

legend(1, 1, legend=c("4", "6", "8"),
       col=c("blue","red", "green"), pch=16, cex=1,
       box.lty=0)

### Otros gráficos

Gráfico de cajas y bigotes

Son gráficos estadísticos que muestran al mismo tiempo características de dispersión de los datos representados, relaciones entre variables y evolución de los datos. Su correcta construcción e interpretación permite un conocimiento profundo de la estructura de los datos, lo que los convierte en una herramienta imprescindible en el análisis exploratorio de datos, pero también en otras metodologías de análisis estadístico más avanzadas, como la modelización. El eje X debe representar un factor, al igual que en el caso de los gráficos de barras, pero el eje Y representa los valores absolutos de todos los casos (valores numéricos, ordenados). Los “bigotes” (barras de error) representan el límite superior e inferior de los valores normalmente distribuidos (rango intercuartílco)

boxplot(x, horizontal = TRUE) # El valor por defecto del argumento horizontal es FALSE

#Podemos añadir la distribuciópn de puntos:
stripchart(x, method = "jitter", pch = 19, add=TRUE, col="blue")

Esta representación también sirve para analizar el comportamiento de una variable con un factor de varios niveles:

boxplot(y~x2,
        main = "consumo por cilindrada",
        xlab = "Cilindros",
        ylab = "Consumo (millas/US galon",
        col = c("blue", "green", "red"))

En ésta gráfica se puede observar si hay diferencias entre los valores medios de los factores con un solo vistazo.