01/07/21
Abstract
La teoría mencionada puede revisarse en el capítulo 1 de mis notas de clase que aparecen en el siguiente documento: 1.1. Estadística básica. En Rpubs:: toc se pueden ver otros documentos de posible interés.
Primero, debemos instalar y descargar las librerías que vamos a utilizar.
library(dplyr)
Recuerde que el data frame (básicamente una tabla) es en realidad solo un tipo específico de otra estructura de datos (la lista). Actualmente, es el formato de entrada de nuestros datos más frecuente para los análisis estadísticos (dentro de R, pero también para otros programas estadísticos y, por supuesto, para softwares de hojas de cálculo). Por esta razón, primero, es importante importar/cargar los datos antes de iniciar nuestro análisis. Esto ya se explicó en el documento Rpubs :: Importar datasets.
En los documentos Rpubs :: Examinar data frames y Rpubs :: Examinar data frames explicamos algunas funciones de R que nos permiten revisar propiedades de los data frames de las variables que contenidads en él. En Rpubs :: Recodificar variables describimos como recodificar las variables. Para más detalles relacionados con los data frames, se puede consultar el documento Rpubs :: data frames (generalidades).
Vamos a utilizar un conjunto de datos, que fueron recogidos aplicando una encuesta a una muestra de estudiantes universitarios. Es un data frame con 400 observaciones y 46 variables, las cuales se describen en este enlace (click aquí). En este documento, se importará la base de datos desde una dirección web (dos opciones):
Opción A (web, desde github): Para esta opción, se necesita cargar la librería “repmis”:
library(repmis)
source_data("https://github.com/hllinas/DatosPublicos/blob/main/Estudiantes.Rdata?raw=false")
datosCompleto <- Estudiantes
Opción B (web, desde Google Drive):
url.dat<- "http://bit.ly/Database-Estudiantes"
datosCompleto <- read.delim(url.dat)
Recuérdense las otras opciones, si tienen las bases de datos descargadas en su sesión de trabajo (ya sea en extensiones en Rdata, en excel o en otros formatos). Para más detalles, véase el documento RPubs :: Importar datasets básico. A manera de ejemplo:
Opción C (local, con archivo en Rdata):
load(file="Estudiantes.Rdata")
datosCompleto <- Estudiantes
Opción D (local, con archivo en excel):
datosCompleto <- read.delim('clipboard')
Definimos las variables que se utilizarán en este documento:
Sexo <- as.factor(datosCompleto$Sexo)
Fuma <- as.factor(datosCompleto$Fuma)
La función barplot crea un diagrama de barras con barras horizontales o verticales. Al dar click aquí, se pueden encontrar diferentes opciones gráficas. Por ejemplo:
Con border = “blue” y col = “orange”, puede cambiar los colores de las barras y de los bordes.
Cuando hay múltiples diagramas, puede utilizar la opción col=c(“darkblue”,“red”, “yellow”, “green”, “orange”, “violet”).
Con las = c(1,2,3), se seleccionan las orientaciones de los textos.
La opción horiz=TRUE crea un diagrama horizontal.
Los títulos de las etiquetas se pueden escribir así: xlab = expression(‘X’[2]), main = ’’, ylab="“, names.arg=c(”Primer nombre“,”Segundo nombre").
Los límites de los ejes se pueden modificar, por ejemplo, así: xlim = c(0, 1), ylim = c(0, 100).
Ejemplo 1 (diagrama para la variable Sexo)
Para crear un diagrama de barras, se necesita crear una tabla de frecuencias (con la función table) y luego aplicar la función barplot a esta tabla. El diagrama de barras es (observe que sale en escala de grises):
Cuentas1 <- table(Sexo) #A) Tabla de frecuencias no agrupadas para Sexo
barplot(Cuentas1, #B) Se aplica barplot a esa tabla
main="TITULO GENERAL", #C) Título principal
xlab="Eje X", #D) Tíulo del eje X
ylab="Eje Y", #E) Título del eje Y
legend = rownames(Cuentas1), #F) Mostrar las leyendas
ylim = c(0, 300) #G) Ajustar límites en eje Y
) #H) No olvidar cerrar el paréntesis
Ejemplo 2 (colorear barras en diagrama para Sexo)
Al “jugar” con algunas opciones gráficas, obtenemos:
Cuentas1 <- table(Sexo) #A) Tabla de frecuencias no agrupadas para Sexo
barplot(Cuentas1, #B) Se aplica barplot a esa tabla
main="TITULO GENERAL", #C) Título principal
xlab="Eje X", #D) Tíulo del eje X
ylab="Eje Y", #E) Título del eje Y
legend = rownames(Cuentas1), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("pink","blue") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesis
Ejemplo 3 (Más opciones en diagrama para Sexo)
Otras opciones gráficas son:
Se cambia la textura de la barra con los argumentos density, angle y col. El primero se utiliza para trazar líneas dentro de las barras (código I). Para la intensidad, se le asignan valores 1, 2, 3, etc. Con el segundo se indica el ángulo de estas líneas (código J). Recuerde que el tercer argumento, se selecciona el color o los colores del interior de las barras. Ver este ejemplo y también el 7.
Cambiar las propiedades de las leyendas (códigos K, L, M y N):
La posición de la leyenda también puede ser especificada usando los sigientes argumentos: bottomright, bottom, bottomleft, left, topleft, top, topright, right y center.
title: El título de la leyenda.
text.font: Un entero especifica el estilo de la fuente del texto de la leyenda. Los posibles valores son: 1=normal, 2=negrilla, 3=itálica, 4=negrilla e itálica.
bg: Color del fondo de la caja de la leyenda.
Se agregan las frecuencias en la parte superior de las barras con text y se modifican las etiquetas en el eje X con axis. Ver ejemplo 8.
Cuentas1 <- table(Sexo) #A) Tabla de frecuencias no agrupadas para Sexo
barplot(Cuentas1, #B) Se aplica barplot a esa tabla
main="Diagrama de barra", #C) Título principal
xlab="Sexo", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
#legend = rownames(Cuentas1), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("pink","blue"), #H) Colorear las barras
density = c(5, 20), #I) Para dar intensidades dentro de las barras
angle = c(45, 90) #J) Para el ángulo de la intensidad
#col = "brown" #K) Para el color de las líneas densas
) #L) No olvidar cerrar el paréntesis
legend("topleft", #M) Leyenda en parte superior izquierda
c("Female","Male"), #N) Las leyendas
fill = c("pink","blue"), #O) Colores de las leyendas
title = "Género", #P) Título de la leyenda]
text.font = 4, #Q) Fuente del texto de la leyenda
bg='lightblue' #R) Color del fondo de la caja de la leyenda
) #S) No olvidar cerrar el paréntesis
A manera de ejemplo, supongamos que se quiere analizar la distribución de las personas según una variable 1 (variable auxiliar de interés), dentro de cada grupo de los niveles de una variable 2 (grupo de referencia). Para construir el diagrama se procede como antes, con la diferencia que la función table se utiliza así:
table("variable1", "variable2")
Hay dos formas de presentar estos diagramas:
Diagrama de barras apiladas (stacked bar plot).
Diagrama de barras agrupadas (grouped bar plot). Para ello, se utiliza la opción beside=TRUE.
Ejemplo 3 (Distribución de Sexo dentro de cada nivel de Fuma)
La distribución de las personas según el género (variable 1=SEXO), dentro de cada grupo de los fumadores (Variable 2=FUMA), se puede visualizar en la tabla siguiente:
Cuentas2 <- table(Sexo, Fuma); Cuentas2 #A) Tabla de frecuencias no agrupadas para Sexo y Fuma
## Fuma
## Sexo No Si
## Femenino 116 95
## Masculino 109 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas2, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Fuma", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas2), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("pink","blue") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesis
Ejemplo 4 (Distribución de Fuma dentro de cada nivel de Sexo)
La distribución de las personas fumadoras (variable 1=FUMA), dentro de cada grupo de género (Variable 2=SEXO), se puede visualizar en la tabla siguiente:
Cuentas3 <- table(Fuma, Sexo); Cuentas3 #A) Tabla de frecuencias no agrupadas para Sexo y Fuma
## Sexo
## Fuma Femenino Masculino
## No 116 109
## Si 95 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas3, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Sexo", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas3), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("yellow","brown") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesis
Ejemplo 5 (Distribución de Sexo dentro de cada nivel de Fuma)
La distribución de las personas según el género (variable 1=SEXO), dentro de cada grupo de los fumadores (Variable 2=FUMA), se puede visualizar en la tabla siguiente:
Cuentas4 <- table(Sexo, Fuma); Cuentas2 #A) Tabla de frecuencias no agrupadas para Sexo y Fuma
## Fuma
## Sexo No Si
## Femenino 116 95
## Masculino 109 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas2, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Fuma", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas2), #F) Mostrar las leyendas
ylim = c(0, 200), #G) Ajustar límites en eje Y
col=c("moccasin","mediumseagreen"), #H) Colorear las barras
beside=TRUE #I) Para agrupar las barras
) #J) No olvidar cerrar el paréntesis
Ejemplo 6 (Distribución de Fuma dentro de cada nivel de Sexo)
La distribución de las personas fumadoras (variable 1=FUMA), dentro de cada grupo de género (Variable 2=SEXO), se puede visualizar en la tabla siguiente:
Cuentas5 <- table(Fuma, Sexo); Cuentas5 #A) Tabla de frecuencias no agrupadas para Sexo y Fuma
## Sexo
## Fuma Femenino Masculino
## No 116 109
## Si 95 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas3, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Sexo", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas3), #F) Mostrar las leyendas
ylim = c(0, 200), #G) Ajustar límites en eje Y
col=c("Indianred1","lightslateblue"), #H) Colorear las barras
beside=TRUE #I) Para agrupar las barras
) #J) No olvidar cerrar el paréntesis
Ejemplo 7 (density, angle, col)
Observe el código de abajo (las descripciones de cada línea del código se deja al lector). Se cambia la textura de la barra con los argumentos density y angle.
set.seed(0) #A)
Datos <- data.frame(Letra=letters[1:6], Valor=sample(seq(3,20),6)) #B)
barplot(height=Datos$Valor, name=Datos$Letra, density=c(5,10,20,30,7,18) , #C)
angle=c(0,45,90,11,36,43) , col="darkblue", ylim = c(0, 30)) #D)
Ejemplo 8 (text, axis)
Observe el código de abajo (las descripciones de cada línea del código se deja al lector). Se agregan las frecuencias en la parte superior de las barras con text y se modifican las etiquetas en el eje X con axis.
ylim <- c(0, 1.5*max(Datos$Valor)) #A)
barra <- barplot(height=Datos$Valor, name=Datos$Letra, density=c(5,10,20,30,7,18) , #B)
angle=c(0,45,90,11,36,43) , col="darkblue", xlab = '', ylim=ylim) #C)
text(x=barra, y = Datos$Valor, label = Datos$Valor, pos = 3, cex = 0.8, col = "red") #D)
axis(1, at=barra, labels=Datos$Letra, tick=FALSE, las=2, line=-0.5, cex.axis=0.5) #E)
Ejemplo 9: Control de espacio (con space)
Observe el código de abajo (las descripciones de cada línea del código se deja al lector).
ylim <- c(0, 1.6*max(Datos$Valor))
colores <- c("Indianred1","lightslateblue", "yellow", "blue", "orange", "brown")
barplot(height=Datos$Valor, name=Datos$Letra, col=colores, ylim=ylim,
space=c(0.3, 0.1, 1.6, 3, 0.2, 2.1) )
Ejemplo 10: Control de ancho (con width)
Observe el código de abajo (las descripciones de cada línea del código se deja al lector).
ylim <- c(0, 1.6*max(Datos$Valor))
colores <- c("Indianred1","lightslateblue", "yellow", "blue", "orange", "brown")
barplot(height=Datos$Valor, name=Datos$Letra, col=colores, ylim=ylim,
width=c(0.3, 0.1, 1.6, 3, 0.2, 2.1) )
Ejemplo 11: Control de ancho (con width)
El objetivo de este ejemplo es ilustrar otras opciones que se pueden aplicar a un diagrama de barras, como añadir una línea con abline; cambiar la orientación de las etiquetas de los ejes con las; añadir un text con text; y añadir una leyenda con legend.
#A) Creando una semilla
set.seed(0)
#B) Creando el data frame
datos <- data.frame(
Letras = c("A","AA","BB","AC" ,"B","BB","BA","BC" ,"C","CC","CA","CB" ),
Promedio = sample(seq(1,9) , 12 , replace=T),
Frecuencia = sample(seq(3,40) , 12 , replace=T)
)
#C) Aumentando el margen inferior
par(mar=c(6,4,4,4))
#D) El diagrama de barras
ylim <- c(0, 1.7*max(datos$Promedio))
barra <- barplot(datos$Promedio , border=F , names.arg=datos$Letras ,
las=2 ,
col=c("darkgreen", "bisque", "darkorange", "darkorange") ,
ylim=ylim ,
main="Diagrama de barras"
)
#E) Añadiendo una línea
abline(v=c(4.9 , 9.7) , col="black")
#F) Añadiendo un texto
text(barra, datos$Promedio + 0.5 , paste("n= ", datos$Frecuencia, sep="") ,cex=1)
#G) Ajustando la leyenda
legend("top", legend = c("Letra sola","Letra repetida","Letra diferente" ) ,
col = c("darkgreen", "bisque", "darkorange") ,
bty = "n", pch=20 , pt.cex = 2, cex = 0.8, horiz = FALSE, inset = c(0.05, 0.05))
R permite unir varios diagramas en una sola gráfica. Para ellos se pueden utilizar las funciones par() o layout().
Esta función tiene 72 parámetros y son:
par(xlog, ylog, adj, ann, ask, bg, bty, cex, cex.axis, cex.lab,
cex.main, cex.sub, cin, col, col.axis, col.lab, col.main,
col.sub, cra, crt, csi, cxy, din, err, family, fg, fig, fin,
font, font.axis, font.lab, font.main, font.sub, lab, las,
lend, lheight, ljoin, lmitre, lty, lwd, mai, mar, mex, mfcol,
mfg, mfrow, mgp, mkh, new, oma, omd, omi, page, pch, pin,
plt, ps, pty, smo, srt, tck, tcl, usr, xaxp, xaxs, xaxt, xpd,
yaxp, yaxs, yaxt, ylbias)
Para conocer los valores que tienen por defecto cada uno de estos parámetros se puede utilizar el siguiente código:
par()
Explicaremos, brevemente, solo dos de ellos:
La opción mfrow=c(i,j) se incluye con el fin de crear una matriz de gráficos de ixj que se completan por fila.
La opción mfcol=c(i,j) que completa la matriz por columnas.
Más detalles al respecto, se pueden encontrar en el documento Función par.
Ejemplo 12 (con par)
Por ejemplo, dos figuras en la primera fila y dos, en la segunda fila es:
par(mfrow=c(2,2), oma=c(0, 0, 4, 0))
barplot(Cuentas1, main="Diagrama simple (sin color) ", xlab="Eje X", ylab="Eje Y",
ylim = c(0, 400))
barplot(Cuentas2, main="Diagrama simple (a color)", xlab="Eje X", ylab="Eje Y", col=c("pink","blue"),
ylim = c(0, 400))
barplot(Cuentas3, main="Barras apiladas", xlab="Eje X", ylab="Eje Y", col=c("yellow","brown"),
legend = rownames(Cuentas3), ylim = c(0, 400))
barplot(Cuentas4, main="Barras agrupadas", xlab="Eje X", ylab="Eje Y", col=c("green","red"),
legend = rownames(Cuentas4), ylim = c(0, 400), beside=TRUE)
mtext(side=3, line=0, cex=1.2, outer=T,"Unión de diagramas de barras con par()")
También se puede utilizar la función layout() para unir gráficas. Esta función tiene la forma layout(A,i,j), siendo A=c(1,2,3,…,N) un objeto matricial que especifica la ubicación de todas las N figuras que se van a unir.
Ejemplo 13 (con layout: gráfica sin título)
Por ejemplo, \(i=2\) figuras en la primera fila y \(j=2\), en la segunda fila es:
B <- layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
#layout.show(B)
barplot(Cuentas1, main="Diagrama simple (sin color) ", xlab="Eje X", ylab="Eje Y",
ylim = c(0, 400))
barplot(Cuentas2, main="Diagrama simple (a color)", xlab="Eje X", ylab="Eje Y", col=c("pink","blue"),
ylim = c(0, 400))
barplot(Cuentas3, main="Barras apiladas", xlab="Eje X", ylab="Eje Y", col=c("yellow","brown"),
legend = rownames(Cuentas3), ylim = c(0, 400))
barplot(Cuentas4, main="Barras agrupadas", xlab="Eje X", ylab="Eje Y", col=c("green","red"),
legend = rownames(Cuentas4), ylim = c(0, 400), beside=TRUE)
Con layout.show(B) se obtiene una vista previa del diseño resultante.
Ejemplo 14 (con layout: gráfica con título)
def.par <- par(no.readonly = TRUE)
par(oma = c(0, 0, 3, 0))
B <- layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
#layout.show(B)
barplot(Cuentas1, main="Diagrama simple (sin color) ", xlab="Eje X", ylab="Eje Y",
ylim = c(0, 400))
barplot(Cuentas2, main="Diagrama simple (a color)", xlab="Eje X", ylab="Eje Y", col=c("pink","blue"),
ylim = c(0, 400))
barplot(Cuentas3, main="Barras apiladas", xlab="Eje X", ylab="Eje Y", col=c("yellow","brown"),
legend = rownames(Cuentas3), ylim = c(0, 400))
barplot(Cuentas4, main="Barras agrupadas", xlab="Eje X", ylab="Eje Y", col=c("green","red"),
legend = rownames(Cuentas4), ylim = c(0, 400), beside=TRUE)
mtext(side=3, line=0, cex=1.2, outer=T,"Unión de histogramas con layout()")
par(def.par)
Con la librería ggplot2 es posible obtener diagramas de barras a partir de un proceso de acumulación de capas o layers. Tiene un cierto nivel de complejidad pero se obtienen resultados muy profesionales. Estos procedimientos no se explicarán en este documento, pero en RPubs :: diagramas de barras univariados y RPubs :: diagramas de barras por grupos se pueden encontrar documentos relacionados.
Crear un nuevo documento R Markdown, realizando las siguientes actividades:
Crear un diagrama de barras simple con otras variables categóricas.
Crear un diagrama de barras apiladas (stacked bar plot).
Crear un diagrama de barras agrupadas (grouped bar plot).
Una los gráficos con la función par().
Una los gráficos con la función layout().
En todos los casos, interpete los resultados y diagramas resultantes.
LLinás, H., Rojas, C. (2005); Estadística descriptiva y distribuciones de probabilidad. Barranquilla: Editorial Universidad del Norte.
Consultar el documento RPubs :: Enlace y materiales de ayuda.
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.