hllinas

1 Introducción

Primero, debemos instalar y descargar las librerías que vamos a utilizar.

library(dplyr)
library(agricolae)

2 Data frame

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

3 Nuestro data frame

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')

4 La librería agricolae

El paquete agricolae ofrece una amplia funcionalidad en el diseño de experimentos, especialmente para experimentos en la agricultura y mejoramientos de plantas, los cuales pueden también ser usados para otros propósitos. En especial, para construir tablas de frcuencias, histogramas, polígonos, ojivas, entre otros. Para más detalles sobre el uso de este paquete, se puede consultar el manual de referencia y documentos html, los cuales pueden ser revisados desde el menú de R.

5 La función hist

La función hist crea un histograma con barras horizontales o verticales. Al dar click aquí, se pueden encontrar diferentes opciones gráficas. Por ejemplo:

  1. Con border = “blue” y col = “orange”, puede cambiar los colores de las barras y de los bordes.

  2. Cuando hay múltiples diagramas, puede utilizar la opción col=c(“darkblue”,“red”, “yellow”, “green”, “orange”, “violet”).

  3. Con las = c(0, 1,2,3), se seleccionan las orientaciones de los textos: las=0 (paralelo a los ejes, por defecto), las=1 (horizontal), las=2 (perpendicular) y las=3 (vertical).

  4. La opción horiz=TRUE crea un diagrama horizontal.

  5. Los títulos de las etiquetas se pueden escribir así: xlab = expression(‘X’[2]), main = ’’, ylab="“, names.arg=c(”Primer nombre“,”Segundo nombre").

  6. Los límites de los ejes se pueden modificar, por ejemplo, así: xlim = c(0, 1), ylim = c(0, 100).

  7. Con la opción breaks se da un valor con el cual se indica el número aproximado de intervalos de clases o un vector cuyos elementos indican los puntos límites entre las clases o intervalos.

  8. Con las opciones prob=TRUE, freq= F, freq=FALSE o freq=cumsum(F), el gráfico se construye con frecuencias relativas.

6 Valores de retorno de hist

La función hist() retorna una lista con 6 valores, como se indica a continuación:

  1. breaks muestra los puntos donde ocurren los puntos de corte de los intervalos.

  2. counts son las correspondientes frecuencia absolutas.

  3. density entrega las frecuencias relativas.

  4. mids son las marcas de clase (los puntos medios de los intervalos).

  5. xname es el nombre la variable.

  6. equidist es un valor lógico que indica si los breaks están o no igualmente espaciados.

Ejemplo 1 (valores de retorno)

En el siguiente ejemplo se muestran los valores de retorno de hist cuando se tiene en cuenta la variable Edad.

h <- hist(Edad) 
h$breaks     #1) Sale: 12  14  16  18  20  22  24  26  28  30
h$counts     #2) Sale: 1   1  145  135  114   0   1   1   2
h$density    #3) Sale: 0.00125 0.00125 0.18125 0.16875 0.14250 0.0 0.00125 0.00125 0.00250
h$mids       #4) Sale: 13  15  17  19  21  23  25  27  29
h$xname      #5) Sale: "Edad"
h$equidist   #6) Sale: TRUE

7 Tablas de frecuencias agrupadas

En esta sección se construye una tabla de frecuencias agrupadas para una variable continua. Para ello, se utilizará la función table.freq de la librería agricolae. Esta función encuentra las frecuencias absolutas, relativas y acumuladas con los intervalos de clase definidos a partir de un histograma previamente calculado por la función hist de R. La línea de comando base es:

"Nombre" <- hist("variable", plot=FALSE)
table.freq("Nombre")
  1. El objeto table.freq(…) entrega una lista con los siguientes componentes:

    1. Lower (límite de clase inferior).

    2. Upper (límite de clase superior).

    3. Main (marca de clase o punto medio del intervalo).

    4. Frequency (frecuencia de clase).

    5. Percentage (porcentaje).

    6. CF (Frecuencia acumulada).

    7. CPF (porcentaje acumulado).

  2. El objeto table.freq(hist(…)) estrega la tabla con los valores de estos componentes. Con la opcion plot=TRUE se imprime también el histograma correspondiente.

  3. Con polygon.freq se grafica el polígono de frecuencias correspondiente.

  4. Con stat.freq se listan algunas medidas estadísticas.

Ejemplo 2 (tablas de frecuencias)

Supongamos que se quiere construir una tabla de frecuencias agrupadas para la variable Edad. Al aplicar las funciones hist y table.freq, obtenemos la tabla deseada.

Edad <- as.numeric(datosCompleto$Edad)

h <- hist(Edad,plot=FALSE)
Tabla <- table.freq(h); Tabla     
Lower Upper Main Frequency Percentage CF CPF
12 14 13 1 0.2 1 0.2
14 16 15 1 0.2 2 0.5
16 18 17 145 36.2 147 36.8
18 20 19 135 33.8 282 70.5
20 22 21 114 28.5 396 99.0
22 24 23 0 0.0 396 99.0
24 26 25 1 0.2 397 99.2
26 28 27 1 0.2 398 99.5
28 30 29 2 0.5 400 100.0

8 Construyendo histogramas

Ejemplo 3 (histograma)

Un histograma para la variable Edad se puede construir de dos maneras diferentes, como se muestra abajo. Observe que los resultados son los mismos.

Edad <- as.numeric(datosCompleto$Edad)   

# A) Primera forma
h <- hist(Edad,plot=FALSE)     
plot(h, col="red", main="A) plot=FALSE")

#B) Segunda forma
h <- hist(Edad, plot=TRUE, col="darkblue", main="A) plot=TRUE")     

Ejemplo 4 (otro histograma)

Compare los dos histogramas de frecuencias de abajo.

h1<-with(datosCompleto, hist(as.numeric(Edad),border=FALSE, col="skyblue", xlab="Edad", main="A) Con hist"))
h2<-with(datosCompleto, graph.freq(as.numeric(Edad),frequency=2, col="green", xlab="Edad", main="B) Con graph.freq"))

9 Combinar histogramas

R permite unir varios diagramas en una sola gráfica. Para ellos se pueden utilizar las funciones par() o layout().

9.0.1 Con par()

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:

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

  2. 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 5 (con par)

Por ejemplo, dos figuras en la primera fila y dos, en la segunda fila es:

Edad <- as.numeric(datosCompleto$Edad)

par(mfrow=c(2,2), oma=c(0, 0, 4, 0))
hist(Edad, main="", ylab="Frecuencia",  col="darkkhaki", ylim=c(0,200))  #A) Frecuencias absolutas
hist(Edad, main="", ylab="", col="deepskyblue", ylim=c(0,200), las=2)    #B) Frec. absolutas con las=2
hist(Edad, main="", ylab="Frec. relativa", col="darkorange", freq = FALSE, ylim=c(0,0.25))   #D) Frecuencias relativas
hist(Edad, main="", ylab="", col="darkslategray2", freq = F, ylim=c(0,0.25))   #E) Frecuencias relativas

# Añadir el título a la gráfica
mtext(side=3, line=0, cex=1.2, outer=T,"Unión de histogramas con par")

9.0.2 Con layout()

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 6 (con layout: gráfica sin título)

Por ejemplo, \(i=2\) figuras en la primera fila y \(j=2\), en la segunda fila es:

Edad <- as.numeric(datosCompleto$Edad)

H <- layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
#layout.show(H)
hist(Edad, main="", ylab="Frecuencia",  col="darkkhaki", ylim=c(0,200))  #A) Frecuencias absolutas
hist(Edad, main="", ylab="", col="deepskyblue", ylim=c(0,200), las=2)    #B) Frec. absolutas con las=2
hist(Edad, main="", ylab="Frec. relativa", col="darkorange", freq = FALSE, ylim=c(0,0.25))   #D) Frecuencias relativas
hist(Edad, main="", ylab="", col="darkslategray2", freq = F, ylim=c(0,0.25))   #E) Frecuencias relativas

Con layout.show(H) se obtiene una vista previa del diseño resultante.

Ejemplo 7 (con layout: gráfica con título)

Edad <- as.numeric(datosCompleto$Edad)

def.par <- par(no.readonly = TRUE)
par(oma = c(0, 0, 3, 0))

H<- layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
#layout.show(H)
hist(Edad, main="", ylab="Frecuencia",  col="darkkhaki", ylim=c(0,200))  #A) Frecuencias absolutas
hist(Edad, main="", ylab="", col="deepskyblue", ylim=c(0,200), las=2)    #B) Frec. absolutas con las=2
hist(Edad, main="", ylab="Frec. relativa", col="darkorange", freq = FALSE, ylim=c(0,0.25))   #D) Frecuencias relativas
hist(Edad, main="", ylab="", col="darkslategray2", freq = F, ylim=c(0,0.25))   #E) Frecuencias relativas

mtext(side=3, line=0, cex=1.2, outer=T,"Unión de histogramas con layout()")

par(def.par)

10 Ejercicios

Crear un nuevo documento R Markdown, realizando las siguientes actividades:

  1. Crear histogramas y “jugar” con las opciones gráficas.

  2. Crear histogramas especificando el número de intervalos de clase (opción breaks).

  3. Crear histogramas con intervalos de clase que tienen diferentes amplitudes.

  4. Calcular los valores de retorno de un histograma y utilizarlos para crear uno con etiquetas generadas con la función text.

  5. Cambiar los valores de la opción *adj=c(x,y)8 y explique lo que sucede. Utilizar combinación de valores positivos y negativos tanto para \(X\) como para \(Y\).

  6. Unir algunos gráficos con la función par.

  7. Unir algunos gráficos con la función layout.

En todos los casos, interpete los resultados e histogramas resultantes.

Bibliografía

  1. LLinás, H., Rojas, C. (2005); Estadística descriptiva y distribuciones de probabilidad. Barranquilla: Editorial Universidad del Norte.

  2. Consultar el documento RPubs :: Enlace y materiales de ayuda.

 

 
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.