• Práctica con R
    • Dr. rer. nat. Humberto LLinás Solano
  • 1 Introducción
  • 2 Data frame
  • 3 Nuestro data frame
  • 4 Revisando el data frame
    • 4.0.1 Visualizar una parte de la información
    • 4.0.2 Analizar la estructura del data frame
    • 4.0.3 Explorar los nombres de las variables
    • 4.0.4 Explorar tamaños
  • 5 Filtrar con la función corchete
    • 5.0.1 Ejemplos con la función cochete
    • 5.0.2 Tipos de variables
  • 6 Tablas de frecuencias
    • 6.0.1 Tablas univariadas
    • 6.0.2 Tablas cruzadas o de contingencias
  • 7 Diagramas de barras
    • 7.0.1 Caso univariado
    • 7.0.2 Caso bivariado
  • 8 Medidas estadísticas
  • 9 Ejercicios
  • Bibliografía

hllinas

1 Introducción

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

library(dplyr)
library(moments)   # Para hallar las medidas de forma

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 Revisando el data frame

4.0.1 Visualizar una parte de la información

Para visualizar solo una parte de los datos, se pueden utilizar las funciones head y/o tail:

head(datosCompleto)        #A) Por defecto, solo las primeras 6 observaciones 
head(datosCompleto, 3)     #B) Solo las primeras 3 observaciones 
tail(datosCompleto)        #C) Por defecto, solo las últimas 6 observaciones 
tail(datosCompleto, 2)     #D) Solo las últimas 2 observaciones 

4.0.2 Analizar la estructura del data frame

Con la función str, aplicada al data frame datosCompleto, podemos observar su estructura. Ella proporciona información sobre el tipo de objeto, el número de filas (observaciones) y columnas (variables), junto con información adicional como los nombres de las variables y su tipo seguido de algunas de las observaciones iniciales de cada una de ellas. A manera de ejemplo, se visualiza solo una parte de la información.

str(datosCompleto)   #A) Estructura de los datos
## tibble [400 x 10] (S3: tbl_df/tbl/data.frame)
##  $ Observacion : num [1:400] 1 2 3 4 5 6 7 8 9 10 ...
##  $ ID          : chr [1:400] "SB11201910010435" "SB11201910004475" "SB11201910011427" "SB11201910041975" ...
##  $ Sexo        : chr [1:400] "Femenino" "Masculino" "Masculino" "Masculino" ...
##  $ SexoNum     : num [1:400] 0 1 1 1 0 0 0 0 0 1 ...
##  $ Edad        : chr [1:400] "21.36" "21.07" "20.92" "18.41" ...
##  $ Fuma        : chr [1:400] "No" "Si" "Si" "Si" ...
##  $ Estatura    : chr [1:400] "Alta" "Baja" "Alta" "Alta" ...
##  $ Colegio     : chr [1:400] "Privado" "Privado" "Privado" "Privado" ...
##  $ Estrato     : num [1:400] 1 2 2 2 1 2 1 1 2 1 ...
##  $ Financiacion: chr [1:400] "Beca" "Beca" "Beca" "Beca" ...

4.0.3 Explorar los nombres de las variables

names(datosCompleto)    #A) Muestra los nombres de las columnas (variables).
##  [1] "Observacion"  "ID"           "Sexo"         "SexoNum"      "Edad"        
##  [6] "Fuma"         "Estatura"     "Colegio"      "Estrato"      "Financiacion"
## [11] "Acumulado"    "P1"           "P2"           "P3"           "Final"       
## [16] "Definitiva"   "Gastos"       "Ingreso"      "Gas"          "Clases"      
## [21] "Ley"          "PandemiaCat"  "PandemiaNum"  "Likert1"      "Likert2"     
## [26] "Likert3"      "Likert4"      "Likert5"      "AGPEQ1"       "AGPEQ2"      
## [31] "AGPEQ3"       "SATS1"        "SATS2"        "SATS3"        "SATS4"       
## [36] "IDARE1.1"     "IDARE1.2"     "IDARE1.3"     "IDARE1.4"     "IDARE1.5"    
## [41] "IDARE2.6"     "IDARE2.7"     "IDARE2.8"     "IDARE2.9"     "IDARE2.10"   
## [46] "Puntaje"

4.0.4 Explorar tamaños

length(datosCompleto)   #B) Revisando número de variables del objeto
dim(datosCompleto)      #C) Muestra las dimensiones del objeto.
ncol(datosCompleto)     #D) Muestra el número de columnas del objeto.
nrow(datosCompleto)     #E) Muestra el número de filas del objeto.

5 Filtrar con la función corchete

Una opción es ejecutando datosCompleto[i,j], donde i y j son las filas y columnas que se va a utilizar o quitar, respectivamente.

  1. Si escribimos datosCompleto[ , j] (sin información para la fila i), indicaremos que queremos construir un data frame que tenga en cuenta todas las filas (observaciones), pero solo la columna (variable) j.

  2. Si escribimos datosCompleto[i, ] (sin información para la columna j), indicaremos que queremos construir un data frame que tenga en cuenta solo la fila (observación) i, pero con todas las columnas (variables).

  3. Las expresiones -i, -j (con el signo menos), indicarán quitar la fila i y/o la columna j.

  4. Lo anterior también es válidos para vectores.

5.0.1 Ejemplos con la función cochete

Ejemplo 1

Supongamos que solo necesito un data frame que contenga solo las observaciones de 1 a 4, con las columnas 2 a 5. Para ello, podemos utilizar la función corchete [] y la función dos puntos :.

Muestra1 <- datosCompleto[1:10,2:7]       # A) Un nuevo data frame 
Muestra1
ID Sexo SexoNum Edad Fuma Estatura
SB11201910010435 Femenino 0 21.36 No Alta
SB11201910004475 Masculino 1 21.07 Si Baja
SB11201910011427 Masculino 1 20.92 Si Alta
SB11201910041975 Masculino 1 18.41 Si Alta
SB11201910013623 Femenino 0 16.64 Si Alta
SB11201910038122 Femenino 0 16.02 No Baja
SB11201910037905 Femenino 0 19.32 Si Baja
SB11201910038140 Femenino 0 18.62 Si Media
SB11201910038005 Femenino 0 17.01 Si Media
SB11201910037919 Masculino 1 19.71 Si Media

Ejemplo 2

A continuación, se muestran algunas filtraciones del data frame Muestra1 (definido en el ejemplo 1):

Muestra1[3,2]           # A) Solo la fila 3 y la columna 2
Muestra1[,2]            # B) Todas las filas (por el espacio en blanco) y solo la columna 2
Muestra1[3,]            # C) Solo la fila 3 y todas las columnas (por el espacio en blanco)
Muestra1[-5, ]          # D) Quitar la fila 5 (por eso el signo menos) y dejar todas las columnas
Muestra1[,-2]           # E) Todas las filas, pero sin la columna 2 (por eso, el signo menos)
Muestra1[,2:5]          # F) Todas las filas, pero solo columnas de 2 a 5 (por eso, dos puntos)
Muestra1[,c(2,5)]       # G) Todas las filas, pero solo columnas 2 y 5 (*c* representa un vector)
Muestra1[1:4,2:5]       # H) Solo las filas de 1 a 4, con las columnas 2 a 5 
Muestra1[1:4,c(2,5)]         # I) Solo las filas de 1 a 4, con las columnas 2 y 5 
Muestra1[c(1,5),c(2,4, 6:8)] # J) Solo las filas 1 y 5, con las columnas 2, 4 y desde 6 a 8
Muestra1[1:5,-c(2,5)]        # K) Solo las filas de 1 a 5, quitando las columnas 2 y 5 
Muestra1[-3,-c(2,5)]         # L) Quitar la filas 3, y las columnas 2 y 5 

5.0.2 Tipos de variables

Primero, revisar la estructura del data frame.

str(datosCompleto)   #A) Estructura de los datos

Ejemplo 3 (Nominales o Caracter)

Observe que R lee muchas de las variables como de tipo caracter (por el símbolo chr), pero algunas están mal definidas y, por esta razón, debemos redefinirlas (véase ejemplos siguientes).

Codigo <- datosCompleto$ID   #B) Si es tipo caracter, es correcto)
Edad <- datosCompleto$Edad   #C) Si es tipo caracter, es incorrecto (ver ejemplo 4) 
Sexo <- datosCompleto$Sexo   #D) Si es tipo caracter, es incorrecto (ver ejemplo 5) 

Ejemplo 4

Edad <- as.numeric(datosCompleto$Edad)   #F) Convirtiendo en numérica

Ejemplo 5 (Categórica o factor: Sexo)

Sexo <- as.factor(Sexo)  #I) Convirtiendo a factor
class(Sexo)              #J) Sale: "factor"
str(Sexo)                #K) Sale: Factor w/ 2 levels "Femenino","Masculino": 1 2 2 2 1 1 1 1 1 2 ...
levels(Sexo)             #L) Sale: "Femenino"  "Masculino"
## [1] "factor"
##  Factor w/ 2 levels "Femenino","Masculino": 1 2 2 2 1 1 1 1 1 2 ...
## [1] "Femenino"  "Masculino"

6 Tablas de frecuencias

6.0.1 Tablas univariadas

Se quiere construir una tabla de frecuencias para analizar la distribución de la variable categórica Sexo. La tabla de frecuencias de interés construída con table es:

Sexo <- as.factor(datosCompleto$Sexo)   #A) Definiendo y convirtiendo en factor

Tabla1 <- table(Sexo); Tabla1           #B) Calcular tabla de frecuencias
## Sexo
##  Femenino Masculino 
##       211       189

6.0.2 Tablas cruzadas o de contingencias

Supongamos que se quiere construir una tabla de frecuencias para analizar la distribución conjunta de las variables categóricas Sexo y Fuma, que son las mismas en comparación con la sección anterior, las cuales se deben definir como factores. La tabla de frecuencias de interés construída con table es:

Sexo <- as.factor(datosCompleto$Sexo)     #A) Definiendo y convirtiendo en factor
Fuma <- as.factor(datosCompleto$Fuma)     #B) Definiendo y convirtiendo en factor 

Tabla2 <- table(Sexo, Fuma); Tabla2       #C) Tabla de frecuencias con table
##            Fuma
## Sexo         No  Si
##   Femenino  116  95
##   Masculino 109  80

7 Diagramas de barras

7.0.1 Caso univariado

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:

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

7.0.2 Caso bivariado

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 el diagrama de barras apilado:

Cuentas2 <- table(Sexo, Fuma)                #A) Tabla de frecuencias no agrupadas para Sexo y Fuma

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

8 Medidas estadísticas

Ahora, vamos a revisar las medidas para una variable numérica en particular, digamos, las notas del tercer parcial (P3). Algunos estadísticos de esta variable son:

x <- as.numeric(datosCompleto$P3)  # A) Convirtiendo la variable a numérica

min(x)          #B) Mínimo
max(x)          #C) Máximo
range(x)        #D) Obtenemos (min, max)
length(x)       #E) Tamaño
sum(x)          #F) Suma los valores de los datos

mean(x)         #G) Media aritmética
median(x)       #H) Mediana

var(x)          #I) Varianza muestral
sqrt(var(x))    #J) Desviación estándar muestral (una forma)
sd(x)           #K) Desviación estándar muestral (otra forma)

skewness(x)     #L) Sesgo

quantile(x, probs=0.80)    #M) 80-ésimo percentil o percentil 85
quantile(x, probs=0.25)    #N) Primer cuartil o 25-ésimo percentil
quantile(x, probs=0.50)    #O) Segundo cuartil o 50-ésimo percentil o mediana
quantile(x, probs=0.75)    #P) Tercer cuartil o 75-ésimo percentil

9 Ejercicios

Crear un nuevo documento R Markdown, realizando las actividades que se indican abajo. Es obligatorio explicar e interpretar los resultados hallados.

  1. Considerar solamente las observaciones que van desde la 2 hasta la 193 y las variables que van desde la 5 hasta la 15 y las variables 20 y 35.

    1. Definir como “MisDatos” al data frame con estas observaciones y variables (ver sección 5.0.1) y utilizarlo en los incisos que se indican abajo.
    2. Visualizar una parte de la información (ver sección 4.0.1).
    3. Revisar la estructura de estos nuevos datos (ver sección 4.0.2).
    4. Explorar los nombres de las variables (ver sección 4.0.3).
    5. Explorar tamaños (ver sección 4.0.34.
    6. Revisar los tipos de todas las variables del nuevo data frame (ver sección 5.0.2).
    7. Construir una tabla de frecuencias para una variable categórica y su correspondiente diagrama de barras (ver secciones 6.0.1 y 7.0.1).
    8. Construir una tabla de frecuencias cruzadas entre dos variables categóricas y su correspondiente diagrama de barras (ver secciones 6.0.2 y 7.0.2).
    9. Considerar una variable numérica (que no sea P3, ni Edad) y calcular las medidas estadísticas indicadas en la sección 8. Interpretar cada una de ellas.
  2. Considerar solamente las observaciones que van desde la 4 hasta la 195 y las variables que van desde la 6 hasta la 17 y las variables 21 y 40. Repetir el ejercicio 1.

  3. Considerar solamente las observaciones que van desde la 6 hasta la 198 y las variables que van desde la 7 hasta la 19 y las variables 20 y 46. Repetir el ejercicio 1.

  4. Considerar solamente las observaciones que van desde la 9 hasta la 200 y las variables que van desde la 12 hasta la 23 y las variables 25 y 27. Repetir el ejercicio 1.

  5. Considerar solamente las observaciones que van desde la 12 hasta la 210 y las variables que van desde la 13 hasta la 22 y las variables 24 y 38. Repetir el ejercicio 1.

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.