Rendimiento estudiantil (Markdown)

Introducción

El presente documento tiene como objetivo realizar una exploración inicial y transformación de la base de datos relacionada con el rendimiento estudiantil, correspondiente al estudio realizado por Cortez y Silva (2008).

La información será analizada mediante diferentes funciones de R, con el propósito de identificar la estructura de la base, revisar el tipo de variables y realizar algunas transformaciones.

También se realizarán procesos de codificación numérica, conversión de variables categóricas a factores y transformación de una variable categórica ordinal en un factor ordenado.

Objetivo

El desarrollo del documento se realizará siguiendo los siguientes pasos:

  1. Importar la base de datos.
  2. Realizar una exploración inicial.
  3. Revisar la estructura y almacenamiento de las variables.
  4. Codificación de variables.
  5. Convertir variables categóricas a factores.
  6. Convertir una variable categórica ordinal en un factor ordenado.
  7. Crear nuevas variables a partir de la información existente.

Aspectos para analizar

Se revisarán principalmente:

  • La estructura de la base de datos.
  • Los nombres de las variables.
  • Las dimensiones de la base.
  • El tipo de almacenamiento de las variables.
  • Las categorías de las variables categóricas.
  • El orden de las categorías de las variables ordinales.

1. Ajuste del directorio e importación de la base

# Indicar a R dónde se encuentra la base de datos

setwd("~/Anto ( Doc )/Diplomado Anto sep/Modulo 2")

# Visualizar los archivos contenidos dentro de la ubicación

list.files()
## [1] "estilo_letra.css"              "Markdown(2).R"                
## [3] "rendimiento_estudiantil.html"  "rendimiento_estudiantil.Rmd"  
## [5] "Rscript_Actividad_2.R"         "student-mat.csv"              
## [7] "tiempo de estudio semanal.png"
# Cargar librería necesaria

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Importar la base de datos

datos <- read.csv("student-mat.csv", sep = ";")

2. Estructura y exploración inicial de los datos

Una vez importada la base, se realiza una exploración inicial para conocer sus principales características.

# Primeras observaciones
head(datos)
##   school sex age address famsize Pstatus Medu Fedu     Mjob     Fjob     reason
## 1     GP   F  18       U     GT3       A    4    4  at_home  teacher     course
## 2     GP   F  17       U     GT3       T    1    1  at_home    other     course
## 3     GP   F  15       U     LE3       T    1    1  at_home    other      other
## 4     GP   F  15       U     GT3       T    4    2   health services       home
## 5     GP   F  16       U     GT3       T    3    3    other    other       home
## 6     GP   M  16       U     LE3       T    4    3 services    other reputation
##   guardian traveltime studytime failures schoolsup famsup paid activities
## 1   mother          2         2        0       yes     no   no         no
## 2   father          1         2        0        no    yes   no         no
## 3   mother          1         2        3       yes     no  yes         no
## 4   mother          1         3        0        no    yes  yes        yes
## 5   father          1         2        0        no    yes  yes         no
## 6   mother          1         2        0        no    yes  yes        yes
##   nursery higher internet romantic famrel freetime goout Dalc Walc health
## 1     yes    yes       no       no      4        3     4    1    1      3
## 2      no    yes      yes       no      5        3     3    1    1      3
## 3     yes    yes      yes       no      4        3     2    2    3      3
## 4     yes    yes      yes      yes      3        2     2    1    1      5
## 5     yes    yes       no       no      4        3     2    1    2      5
## 6     yes    yes      yes       no      5        4     2    1    2      5
##   absences G1 G2 G3
## 1        6  5  6  6
## 2        4  5  5  6
## 3       10  7  8 10
## 4        2 15 14 15
## 5        4  6 10 10
## 6       10 15 15 15
# Últimas observaciones
tail(datos)
##     school sex age address famsize Pstatus Medu Fedu     Mjob     Fjob reason
## 390     MS   F  18       U     GT3       T    1    1    other    other course
## 391     MS   M  20       U     LE3       A    2    2 services services course
## 392     MS   M  17       U     LE3       T    3    1 services services course
## 393     MS   M  21       R     GT3       T    1    1    other    other course
## 394     MS   M  18       R     LE3       T    3    2 services    other course
## 395     MS   M  19       U     LE3       T    1    1    other  at_home course
##     guardian traveltime studytime failures schoolsup famsup paid activities
## 390   mother          2         2        1        no     no   no        yes
## 391    other          1         2        2        no    yes  yes         no
## 392   mother          2         1        0        no     no   no         no
## 393    other          1         1        3        no     no   no         no
## 394   mother          3         1        0        no     no   no         no
## 395   father          1         1        0        no     no   no         no
##     nursery higher internet romantic famrel freetime goout Dalc Walc health
## 390     yes    yes       no       no      1        1     1    1    1      5
## 391     yes    yes       no       no      5        5     4    4    5      4
## 392      no    yes      yes       no      2        4     5    3    4      2
## 393      no    yes       no       no      5        5     3    3    3      3
## 394      no    yes      yes       no      4        4     1    3    4      5
## 395     yes    yes      yes       no      3        2     3    3    3      5
##     absences G1 G2 G3
## 390        0  6  5  0
## 391       11  9  9  9
## 392        3 14 16 16
## 393        3 10  8  7
## 394        0 11 12 10
## 395        5  8  9  9
# Nombres de las variables
names(datos)
##  [1] "school"     "sex"        "age"        "address"    "famsize"   
##  [6] "Pstatus"    "Medu"       "Fedu"       "Mjob"       "Fjob"      
## [11] "reason"     "guardian"   "traveltime" "studytime"  "failures"  
## [16] "schoolsup"  "famsup"     "paid"       "activities" "nursery"   
## [21] "higher"     "internet"   "romantic"   "famrel"     "freetime"  
## [26] "goout"      "Dalc"       "Walc"       "health"     "absences"  
## [31] "G1"         "G2"         "G3"
# Dimensiones de la base
dim(datos)
## [1] 395  33
# Resumen de las variables
summary(datos)
##        school           sex           age            address         famsize   
##  Length   :395   Length   :395   Min.   :15.0   Length   :395   Length   :395  
##  N.unique :  2   N.unique :  2   1st Qu.:16.0   N.unique :  2   N.unique :  2  
##  N.blank  :  0   N.blank  :  0   Median :17.0   N.blank  :  0   N.blank  :  0  
##  Min.nchar:  2   Min.nchar:  1   Mean   :16.7   Min.nchar:  1   Min.nchar:  3  
##  Max.nchar:  2   Max.nchar:  1   3rd Qu.:18.0   Max.nchar:  1   Max.nchar:  3  
##                                  Max.   :22.0                                  
##       Pstatus         Medu            Fedu              Mjob    
##  Length   :395   Min.   :0.000   Min.   :0.000   Length   :395  
##  N.unique :  2   1st Qu.:2.000   1st Qu.:2.000   N.unique :  5  
##  N.blank  :  0   Median :3.000   Median :2.000   N.blank  :  0  
##  Min.nchar:  1   Mean   :2.749   Mean   :2.522   Min.nchar:  5  
##  Max.nchar:  1   3rd Qu.:4.000   3rd Qu.:3.000   Max.nchar:  8  
##                  Max.   :4.000   Max.   :4.000                  
##         Fjob           reason         guardian     traveltime   
##  Length   :395   Length   :395   Length   :395   Min.   :1.000  
##  N.unique :  5   N.unique :  4   N.unique :  3   1st Qu.:1.000  
##  N.blank  :  0   N.blank  :  0   N.blank  :  0   Median :1.000  
##  Min.nchar:  5   Min.nchar:  4   Min.nchar:  5   Mean   :1.448  
##  Max.nchar:  8   Max.nchar: 10   Max.nchar:  6   3rd Qu.:2.000  
##                                                  Max.   :4.000  
##    studytime        failures          schoolsup         famsup   
##  Min.   :1.000   Min.   :0.0000   Length   :395   Length   :395  
##  1st Qu.:1.000   1st Qu.:0.0000   N.unique :  2   N.unique :  2  
##  Median :2.000   Median :0.0000   N.blank  :  0   N.blank  :  0  
##  Mean   :2.035   Mean   :0.3342   Min.nchar:  2   Min.nchar:  2  
##  3rd Qu.:2.000   3rd Qu.:0.0000   Max.nchar:  3   Max.nchar:  3  
##  Max.   :4.000   Max.   :3.0000                                  
##         paid         activities       nursery          higher   
##  Length   :395   Length   :395   Length   :395   Length   :395  
##  N.unique :  2   N.unique :  2   N.unique :  2   N.unique :  2  
##  N.blank  :  0   N.blank  :  0   N.blank  :  0   N.blank  :  0  
##  Min.nchar:  2   Min.nchar:  2   Min.nchar:  2   Min.nchar:  2  
##  Max.nchar:  3   Max.nchar:  3   Max.nchar:  3   Max.nchar:  3  
##                                                                 
##       internet        romantic       famrel         freetime    
##  Length   :395   Length   :395   Min.   :1.000   Min.   :1.000  
##  N.unique :  2   N.unique :  2   1st Qu.:4.000   1st Qu.:3.000  
##  N.blank  :  0   N.blank  :  0   Median :4.000   Median :3.000  
##  Min.nchar:  2   Min.nchar:  2   Mean   :3.944   Mean   :3.235  
##  Max.nchar:  3   Max.nchar:  3   3rd Qu.:5.000   3rd Qu.:4.000  
##                                  Max.   :5.000   Max.   :5.000  
##      goout            Dalc            Walc           health     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:3.000  
##  Median :3.000   Median :1.000   Median :2.000   Median :4.000  
##  Mean   :3.109   Mean   :1.481   Mean   :2.291   Mean   :3.554  
##  3rd Qu.:4.000   3rd Qu.:2.000   3rd Qu.:3.000   3rd Qu.:5.000  
##  Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.000  
##     absences            G1              G2              G3       
##  Min.   : 0.000   Min.   : 3.00   Min.   : 0.00   Min.   : 0.00  
##  1st Qu.: 0.000   1st Qu.: 8.00   1st Qu.: 9.00   1st Qu.: 8.00  
##  Median : 4.000   Median :11.00   Median :11.00   Median :11.00  
##  Mean   : 5.709   Mean   :10.91   Mean   :10.71   Mean   :10.42  
##  3rd Qu.: 8.000   3rd Qu.:13.00   3rd Qu.:13.00   3rd Qu.:14.00  
##  Max.   :75.000   Max.   :19.00   Max.   :19.00   Max.   :20.00
# Clase general de la base
class(datos)
## [1] "data.frame"
# Estructura de la base
str(datos)
## 'data.frame':    395 obs. of  33 variables:
##  $ school    : chr  "GP" "GP" "GP" "GP" ...
##  $ sex       : chr  "F" "F" "F" "F" ...
##  $ age       : int  18 17 15 15 16 16 16 17 15 15 ...
##  $ address   : chr  "U" "U" "U" "U" ...
##  $ famsize   : chr  "GT3" "GT3" "LE3" "GT3" ...
##  $ Pstatus   : chr  "A" "T" "T" "T" ...
##  $ Medu      : int  4 1 1 4 3 4 2 4 3 3 ...
##  $ Fedu      : int  4 1 1 2 3 3 2 4 2 4 ...
##  $ Mjob      : chr  "at_home" "at_home" "at_home" "health" ...
##  $ Fjob      : chr  "teacher" "other" "other" "services" ...
##  $ reason    : chr  "course" "course" "other" "home" ...
##  $ guardian  : chr  "mother" "father" "mother" "mother" ...
##  $ traveltime: int  2 1 1 1 1 1 1 2 1 1 ...
##  $ studytime : int  2 2 2 3 2 2 2 2 2 2 ...
##  $ failures  : int  0 0 3 0 0 0 0 0 0 0 ...
##  $ schoolsup : chr  "yes" "no" "yes" "no" ...
##  $ famsup    : chr  "no" "yes" "no" "yes" ...
##  $ paid      : chr  "no" "no" "yes" "yes" ...
##  $ activities: chr  "no" "no" "no" "yes" ...
##  $ nursery   : chr  "yes" "no" "yes" "yes" ...
##  $ higher    : chr  "yes" "yes" "yes" "yes" ...
##  $ internet  : chr  "no" "yes" "yes" "yes" ...
##  $ romantic  : chr  "no" "no" "no" "yes" ...
##  $ famrel    : int  4 5 4 3 4 5 4 4 4 5 ...
##  $ freetime  : int  3 3 3 2 3 4 4 1 2 5 ...
##  $ goout     : int  4 3 2 2 2 2 4 4 2 1 ...
##  $ Dalc      : int  1 1 2 1 1 1 1 1 1 1 ...
##  $ Walc      : int  1 1 3 1 2 2 1 1 1 1 ...
##  $ health    : int  3 3 3 5 5 5 3 1 1 5 ...
##  $ absences  : int  6 4 10 2 4 10 0 6 0 0 ...
##  $ G1        : int  5 5 7 15 6 15 12 6 16 14 ...
##  $ G2        : int  6 5 8 14 10 15 12 5 18 15 ...
##  $ G3        : int  6 6 10 15 10 15 11 6 19 15 ...
# Vista resumida de la estructura
glimpse(datos)
## Rows: 395
## Columns: 33
## $ school     <chr> "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP",…
## $ sex        <chr> "F", "F", "F", "F", "F", "M", "M", "F", "M", "M", "F", "F",…
## $ age        <int> 18, 17, 15, 15, 16, 16, 16, 17, 15, 15, 15, 15, 15, 15, 15,…
## $ address    <chr> "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U",…
## $ famsize    <chr> "GT3", "GT3", "LE3", "GT3", "GT3", "LE3", "LE3", "GT3", "LE…
## $ Pstatus    <chr> "A", "T", "T", "T", "T", "T", "T", "A", "A", "T", "T", "T",…
## $ Medu       <int> 4, 1, 1, 4, 3, 4, 2, 4, 3, 3, 4, 2, 4, 4, 2, 4, 4, 3, 3, 4,…
## $ Fedu       <int> 4, 1, 1, 2, 3, 3, 2, 4, 2, 4, 4, 1, 4, 3, 2, 4, 4, 3, 2, 3,…
## $ Mjob       <chr> "at_home", "at_home", "at_home", "health", "other", "servic…
## $ Fjob       <chr> "teacher", "other", "other", "services", "other", "other", …
## $ reason     <chr> "course", "course", "other", "home", "home", "reputation", …
## $ guardian   <chr> "mother", "father", "mother", "mother", "father", "mother",…
## $ traveltime <int> 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 1,…
## $ studytime  <int> 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 1, 2, 3, 1, 3, 2, 1, 1,…
## $ failures   <int> 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,…
## $ schoolsup  <chr> "yes", "no", "yes", "no", "no", "no", "no", "yes", "no", "n…
## $ famsup     <chr> "no", "yes", "no", "yes", "yes", "yes", "no", "yes", "yes",…
## $ paid       <chr> "no", "no", "yes", "yes", "yes", "yes", "no", "no", "yes", …
## $ activities <chr> "no", "no", "no", "yes", "no", "yes", "no", "no", "no", "ye…
## $ nursery    <chr> "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "yes…
## $ higher     <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "ye…
## $ internet   <chr> "no", "yes", "yes", "yes", "no", "yes", "yes", "no", "yes",…
## $ romantic   <chr> "no", "no", "no", "yes", "no", "no", "no", "no", "no", "no"…
## $ famrel     <int> 4, 5, 4, 3, 4, 5, 4, 4, 4, 5, 3, 5, 4, 5, 4, 4, 3, 5, 5, 3,…
## $ freetime   <int> 3, 3, 3, 2, 3, 4, 4, 1, 2, 5, 3, 2, 3, 4, 5, 4, 2, 3, 5, 1,…
## $ goout      <int> 4, 3, 2, 2, 2, 2, 4, 4, 2, 1, 3, 2, 3, 3, 2, 4, 3, 2, 5, 3,…
## $ Dalc       <int> 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,…
## $ Walc       <int> 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 1, 4, 3,…
## $ health     <int> 3, 3, 3, 5, 5, 5, 3, 1, 1, 5, 2, 4, 5, 3, 3, 2, 2, 4, 5, 5,…
## $ absences   <int> 6, 4, 10, 2, 4, 10, 0, 6, 0, 0, 0, 4, 2, 2, 0, 4, 6, 4, 16,…
## $ G1         <int> 5, 5, 7, 15, 6, 15, 12, 6, 16, 14, 10, 10, 14, 10, 14, 14, …
## $ G2         <int> 6, 5, 8, 14, 10, 15, 12, 5, 18, 15, 8, 12, 14, 10, 16, 14, …
## $ G3         <int> 6, 6, 10, 15, 10, 15, 11, 6, 19, 15, 9, 12, 14, 11, 16, 14,…

3. Revisión del tipo de variables

Se revisa como R reconoce algunas de las variables seleccionadas. Para ello se utiliza class() y typeof(), lo que permite identificar la clase y el tipo de almacenamiento de cada variable.

# Clase de las variables

class(datos$school)
## [1] "character"
class(datos$sex)
## [1] "character"
class(datos$address)
## [1] "character"
class(datos$Pstatus)
## [1] "character"
class(datos$studytime)
## [1] "integer"
class(datos$schoolsup)
## [1] "character"
# Tipo de almacenamiento

typeof(datos$school)
## [1] "character"
typeof(datos$sex)
## [1] "character"
typeof(datos$address)
## [1] "character"
typeof(datos$Pstatus)
## [1] "character"
typeof(datos$studytime)
## [1] "integer"
typeof(datos$schoolsup)
## [1] "character"

4. Codificación de variables

Se Seleccionan dos variables categóricas que inicialmente se encuentran representadas mediante texto y se crean nuevas variables utilizando una codificación numérica.

4.1 Variable school

La variable school identifica la institución educativa del estudiante. Para realizar la codificación se establece:

  • GP = 1
  • MS = 2
datos$school_cod <- ifelse(
  datos$school == "GP", 1, 2
)

# Verificar la clase de la nueva variable
class(datos$school_cod)
## [1] "numeric"
# Comprobar la correspondencia entre la categoría y el código asignado
table(datos$school, datos$school_cod)
##     
##        1   2
##   GP 349   0
##   MS   0  46

4.2 Variable sex

La variable sex representa el sexo del estudiante. Para realizar la codificación numérica se establece:

  • F = 1
  • M = 2
datos$sex_cod <- ifelse(
  datos$sex == "F", 1, 2
)

# Verificar la clase de la nueva variable
class(datos$sex_cod)
## [1] "numeric"
# Comprobar la correspondencia entre la categoría y el código asignado
table(datos$sex, datos$sex_cod)
##    
##       1   2
##   F 208   0
##   M   0 187

5. Conversión de variables categóricas a factor

Las variables categóricas pueden convertirse en factores para que R las reconozca como variables cualitativas con categorías definidas. Por lo que se seleccionaron doS variables address y Pstatus.

5.1 Variable address

La variable address identifica la zona de residencia del estudiante:

  • R = Rural
  • U = Urbana
datos$address <- factor(datos$address)

# Verificar la clase
class(datos$address)
## [1] "factor"
# Mostrar las categorías
levels(datos$address)
## [1] "R" "U"
# Revisar la estructura
str(datos$address)
##  Factor w/ 2 levels "R","U": 2 2 2 2 2 2 2 2 2 2 ...

5.2 Variable Pstatus

La variable Pstatus identifica la situación de convivencia de los padres:

  • T = Padres viviendo juntos
  • A = Padres separados
datos$Pstatus <- factor(datos$Pstatus)

# Verificar la clase
class(datos$Pstatus)
## [1] "factor"
# Mostrar las categorías
levels(datos$Pstatus)
## [1] "A" "T"
# Revisar la estructura
str(datos$Pstatus)
##  Factor w/ 2 levels "A","T": 1 2 2 2 2 2 2 1 1 2 ...

6. Conversión de una variable categórica a factor ordenado

6.1 Variable studytime

La variable studytime representa el tiempo dedicado al estudio y presenta categorías que tienen un orden natural.

Por esta razón, se transforma en un factor ordenado, manteniendo la jerarquía entre sus categorías.

Las categorías se organizan de menor a mayor tiempo dedicado al estudio:

  1. Menos de 2 horas
  2. 2 a 5 horas
  3. 5 a 10 horas
  4. Más de 10 horas
datos$studytime <- factor(
  datos$studytime,
  levels = 1:4,
  labels = c(
    "Menos de 2 horas",
    "2 a 5 horas",
    "5 a 10 horas",
    "Más de 10 horas"
  ),
  ordered = TRUE
)

# Primeras observaciones
head(datos$studytime)
## [1] 2 a 5 horas  2 a 5 horas  2 a 5 horas  5 a 10 horas 2 a 5 horas 
## [6] 2 a 5 horas 
## 4 Levels: Menos de 2 horas < 2 a 5 horas < ... < Más de 10 horas
# Revisar la estructura
str(datos$studytime)
##  Ord.factor w/ 4 levels "Menos de 2 horas"<..: 2 2 2 3 2 2 2 2 2 2 ...
# Mostrar las categorías
levels(datos$studytime)
## [1] "Menos de 2 horas" "2 a 5 horas"      "5 a 10 horas"     "Más de 10 horas"
# Verificar la clase
class(datos$studytime)
## [1] "ordered" "factor"
# Verificar que sea un factor ordenado
is.ordered(datos$studytime)
## [1] TRUE
# Tabla de frecuencias
table(datos$studytime)
## 
## Menos de 2 horas      2 a 5 horas     5 a 10 horas  Más de 10 horas 
##              105              198               65               27

6.2 Variable health

La variable health representa el estado de salud del estudiante y se transformó a un factor ordinal que incluye 5 categorías, desde “muy mala” hasta “Muy buena”, conservando un orden jerárquico.

datos$health <- factor(
  datos$health,
  levels = 1:5,
  labels = c(
    "Muy mala",
    "Mala",
    "Regular",
    "Buena",
    "Muy buena"
  ),
  ordered = TRUE
)

head(datos$health)
## [1] Regular   Regular   Regular   Muy buena Muy buena Muy buena
## Levels: Muy mala < Mala < Regular < Buena < Muy buena
str(datos$health)
##  Ord.factor w/ 5 levels "Muy mala"<"Mala"<..: 3 3 3 5 5 5 3 1 1 5 ...
levels(datos$health)
## [1] "Muy mala"  "Mala"      "Regular"   "Buena"     "Muy buena"
class(datos$health)
## [1] "ordered" "factor"
is.ordered(datos$health)
## [1] TRUE
table(datos$health)
## 
##  Muy mala      Mala   Regular     Buena Muy buena 
##        47        45        91        66       146

6.3 Variable Freetime

La variable freetime representa el tiempo libre del estudiante después de la escuela, esta se transformó a un factor ordinal que incluye 5 categorías desde “Muy bajo” hasta “Muy alto”, conservando un orden jerárquico.

datos$freetime <- factor(
  datos$freetime,
  levels = 1:5,
  labels = c(
    "Muy bajo",
    "Bajo",
    "Medio",
    "Alto",
    "Muy alto"
  ),
  ordered = TRUE
)

head(datos$freetime)
## [1] Medio Medio Medio Bajo  Medio Alto 
## Levels: Muy bajo < Bajo < Medio < Alto < Muy alto
str(datos$freetime)
##  Ord.factor w/ 5 levels "Muy bajo"<"Bajo"<..: 3 3 3 2 3 4 4 1 2 5 ...
levels(datos$freetime)
## [1] "Muy bajo" "Bajo"     "Medio"    "Alto"     "Muy alto"
class(datos$freetime)
## [1] "ordered" "factor"
is.ordered(datos$freetime)
## [1] TRUE
table(datos$freetime)
## 
## Muy bajo     Bajo    Medio     Alto Muy alto 
##       19       64      157      115       40

6.3.1 Gráfica studytime (Tiempo de estudio)

Ahora una de las varibales contrarias, es studytimeque representa la cantidad de horas que se dedica al tiempo de estudio, por lo que la imagen muestra que los estudiantes, dedican su tiempo de estudio en rangos inferiores a 5 horas semanales.

7. Creación de nuevas variables

Finalmente, se crean algunas variables derivadas a partir de condiciones presentes en la base original. Estas variables permiten identificar características específicas de los estudiantes.

7.1 Estudiantes de zona rural con acceso a internet

Se crea una variable lógica que identifica a los estudiantes que viven en una zona rural y cuentan con acceso a internet.

datos$rural_con_internet <- 
  datos$address == "R" & datos$internet == "yes"

table(datos$rural_con_internet)
## 
## FALSE  TRUE 
##   335    60

7.2 Al menos uno de los padres con educación superior

Se crea una variable que identifica si al menos uno de los padres presenta el nivel de educación superior correspondiente al código 4.

datos$algun_padre_educacion_superior <- 
  datos$Medu == 4 | datos$Fedu == 4

table(datos$algun_padre_educacion_superior)
## 
## FALSE  TRUE 
##   238   157

7.3 Alto consumo de alcohol

Se crea una variable que identifica los casos en los que el estudiante presenta un nivel alto de consumo de alcohol durante la semana o durante el fin de semana.

datos$alto_consumo_alcohol <- 
  datos$Dalc >= 4 | datos$Walc >= 4

table(datos$alto_consumo_alcohol)
## 
## FALSE  TRUE 
##   314    81

8. Bibliografía

La base de datos utilizada corresponde al conjunto Student Performance, disponible en el Repositorio de Aprendizaje Automático de la UCI.

Consultar el Dataset: Student Performance

9. Conclusiones

A partir de la exploración inicial fue posible identificar la estructura de la base de datos y la forma en que R almacena las diferentes variables.

La codificación de school y sex permitió representar sus categorías mediante valores numéricos. Por otra parte, address y Pstatus fueron convertidas en factores para facilitar su tratamiento como variables categóricas.

La variable studytime fue transformada en un factor ordenado debido a que sus categorías presentan una jerarquía natural. De manera adicional, freetime y health también fueron transformadas conservando el orden de sus categorías.

Finalmente, se crearon nuevas variables relacionadas con el acceso a internet, el nivel educativo de los padres y el consumo de alcohol, complementando así la exploración inicial de la base.