GUÍA DE ANÁLISIS DE DATOS

Asignatura: Estadística y Probabilidad

1 INTRODUCCIÓN

El propósito de esta guía es desarrollar un análisis estadístico completo que incluya:

  • Análisis exploratorio de datos (EDA)
  • Identificación de datos faltantes
  • Visualización de variables
  • Análisis de correlación
  • Formulación de hipótesis
  • Ajuste de modelos de regresión lineal
  • Selección del mejor modelo
  • Evaluación y validación del modelo

El estudiante debe interpretar cada resultado y justificar sus decisiones estadísticas.

CARGAR LIBRERÍAS

library(dplyr)     # Manipulación y transformación de datos
library(ggplot2)   # Visualización gráfica de datos
library(psych)     # Estadísticos descriptivos avanzados
library(corrplot)  # Visualización de matrices de correlación
library(readr)     # Importación eficiente de datos
library(GGally)    # Gráficos multivariados (ggpairs)
library(car)       # Diagnóstico de modelos de regresión
library(MASS)      # Selección de modelos (stepAIC)

CARGA DE DATOS

punt_estud <- read_csv("student_exam_scores.csv")
## Rows: 200 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): student_id
## dbl (5): hours_studied, sleep_hours, attendance_percent, previous_scores, ex...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(punt_estud )

Descripción de variables:

  • hours_studied: Horas de estudio
  • sleep_hours: Horas de sueño
  • attendance_percent: Porcentaje de asistencia
  • previous_scores: Puntajes previos
  • exam_score: Nota final (variable respuesta)

1.1 EXPLORACIÓN INICIAL

str(punt_estud)
## spc_tbl_ [200 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ student_id        : chr [1:200] "S001" "S002" "S003" "S004" ...
##  $ hours_studied     : num [1:200] 8 1.3 4 3.5 9.1 8.4 10.8 2 5.6 1.3 ...
##  $ sleep_hours       : num [1:200] 8.8 8.6 8.2 4.8 6.4 5.1 6 4.3 5.9 8.9 ...
##  $ attendance_percent: num [1:200] 72.1 60.7 73.7 95.1 89.8 58.5 54.2 75.8 81.6 66.8 ...
##  $ previous_scores   : num [1:200] 45 55 86 66 71 75 88 55 84 70 ...
##  $ exam_score        : num [1:200] 30.2 25 35.8 34 40.3 35.7 37.9 18.3 34.7 24.7 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   student_id = col_character(),
##   ..   hours_studied = col_double(),
##   ..   sleep_hours = col_double(),
##   ..   attendance_percent = col_double(),
##   ..   previous_scores = col_double(),
##   ..   exam_score = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
dim(punt_estud)
## [1] 200   6
names(punt_estud)
## [1] "student_id"         "hours_studied"      "sleep_hours"       
## [4] "attendance_percent" "previous_scores"    "exam_score"
summary(punt_estud)
##   student_id        hours_studied     sleep_hours    attendance_percent
##  Length:200         Min.   : 1.000   Min.   :4.000   Min.   : 50.30    
##  Class :character   1st Qu.: 3.500   1st Qu.:5.300   1st Qu.: 62.20    
##  Mode  :character   Median : 6.150   Median :6.700   Median : 75.25    
##                     Mean   : 6.325   Mean   :6.622   Mean   : 74.83    
##                     3rd Qu.: 9.000   3rd Qu.:8.025   3rd Qu.: 87.42    
##                     Max.   :12.000   Max.   :9.000   Max.   :100.00    
##  previous_scores   exam_score   
##  Min.   :40.0    Min.   :17.10  
##  1st Qu.:54.0    1st Qu.:29.50  
##  Median :67.5    Median :34.05  
##  Mean   :66.8    Mean   :33.95  
##  3rd Qu.:80.0    3rd Qu.:38.75  
##  Max.   :95.0    Max.   :51.30

Interpretación de la exploración inicial de los datos

A partir de las funciones str(), dim(), names() y summary(), se obtiene la siguiente comprensión de la base de datos:

Estructura de los datos (str())

La base de datos contiene 200 observaciones y 6 variables. Se identifican:

  • 1 variable cualitativa:
    • student_id: identificador del estudiante (no se utiliza en el modelo)
  • 5 variables cuantitativas:
    • hours_studied
    • sleep_hours
    • attendance_percent
    • previous_scores
    • exam_score (variable respuesta)

El conjunto de datos es adecuado para aplicar modelos de regresión lineal, ya que la variable respuesta es continua y los predictores son numéricos.

Dimensión de los datos (dim())

  • Número de observaciones: 200 estudiantes
  • Número de variables: 6 variables

El tamaño muestral es suficiente para un análisis estadístico básico y permite estimaciones relativamente estables en el modelo de regresión.

Nombres de variables (names())

Permiten identificar claramente cada variable y su rol en el análisis. Se recomienda usar nombres claros y consistentes, como en este caso, lo cual facilita la interpretación y modelamiento.

Estadísticos descriptivos (summary())

Variable: hours_studied

  • Media: 6.33 horas
  • Rango: 1 a 12 horas

Existe variabilidad en los hábitos de estudio. La media sugiere un nivel moderado de dedicación.

Variable: sleep_hours

  • Media: 6.62 horas
  • Rango: 4 a 9 horas

Los estudiantes presentan patrones de sueño relativamente homogéneos, aunque algunos duermen pocas horas (posible factor de riesgo).

Variable: attendance_percent

  • Media: 74.83%
  • Rango: 50.3% a 100%

La asistencia es moderadamente alta, pero con variabilidad importante que podría influir en el rendimiento.

Variable: previous_scores

  • Media: 66.8
  • Rango: 40 a 95

El rendimiento previo muestra dispersión, lo cual es relevante para explicar el desempeño actual.

Variable: exam_score (respuesta)

  • Media: 33.95
  • Rango: 17.1 a 51.3

Existe variabilidad en el rendimiento académico, lo que justifica el uso de un modelo explicativo.

DE MANERA GENERAL:

  • No se observan valores extremos evidentes en el resumen
  • Las medias y medianas son cercanas(posible simetría en las distribuciones)
  • Existe suficiente variabilidad en todas las variables

Conclusión de la etapa exploratoria

Los datos presentan condiciones adecuadas para:

  • Realizar análisis de correlación
  • Formular hipótesis estadísticas
  • Ajustar modelos de regresión lineal

En las siguientes secciones se evaluará si estas variables explican significativamente el rendimiento académico (exam_score).

1.2 DATOS FALTANTES

colSums(is.na(punt_estud))
##         student_id      hours_studied        sleep_hours attendance_percent 
##                  0                  0                  0                  0 
##    previous_scores         exam_score 
##                  0                  0
porcentaje_na <- sapply(punt_estud, function(x) mean(is.na(x))*100)
porcentaje_na
##         student_id      hours_studied        sleep_hours attendance_percent 
##                  0                  0                  0                  0 
##    previous_scores         exam_score 
##                  0                  0

No hay datos faltantes

Interpretación:

  • Si < 5% entonces; impacto bajo.
  • Si > 5% enonces; considerar imputación.

2 ESTADÍSTICOS DESCRIPTIVOS

Tabla completa de estadisticos descriptivos y desviaciones estándar de las variables

describe(punt_estud) # tabla completa de estadisticos descriptivos
#desviaciones estándar de las variables
sd(punt_estud$hours_studied)
## [1] 3.227317
sd(punt_estud$sleep_hours)
## [1] 1.497138
sd(punt_estud$attendance_percent)
## [1] 14.24991
sd(punt_estud$previous_scores)
## [1] 15.66387
sd(punt_estud$exam_score)
## [1] 6.789548

Interpretación de los estadísticos descriptivos

El análisis descriptivo de las variables evidencia que, en general, los datos presentan un comportamiento adecuado para el modelamiento estadístico. En particular, la variable hours_studied muestra una media de 6.33 horas con una desviación estándar de 3.23, lo que indica una variabilidad moderada en los hábitos de estudio entre los estudiantes. Por su parte, sleep_hours presenta una media de 6.62 horas y una desviación estándar de 1.50, reflejando una mayor homogeneidad en los patrones de sueño. La variable attendance_percent tiene una media de 74.83% y una desviación estándar de 14.25, lo que sugiere una dispersión considerable en la asistencia, potencialmente relevante para explicar el rendimiento académico. De manera similar, previous_scores presenta una media de 66.80 y una desviación estándar de 15.66, evidenciando diferencias importantes en el desempeño previo de los estudiantes.

En cuanto a la variable respuesta, exam_score, se observa una media de 33.95 con una desviación estándar de 6.79, lo que indica una variabilidad moderada en los resultados del examen final, suficiente para justificar su modelamiento. Adicionalmente, todas las variables presentan coeficientes de asimetría cercanos a cero, lo que sugiere distribuciones aproximadamente simétricas, mientras que los valores de curtosis negativos indican distribuciones ligeramente más planas que la normal (platicúrticas), reduciendo la presencia de valores extremos. En conjunto, estas características sugieren que los datos cumplen condiciones favorables para la aplicación de técnicas estadísticas como el análisis de correlación y la regresión lineal.

3 VISUALIZACIÓN DE DATOS

ggplot(punt_estud, aes(x = hours_studied)) +
  geom_histogram(fill = "steelblue", color = "black", bins = 15) +
  theme_minimal() +
  labs(title = "Horas de estudio")

ggplot(punt_estud, aes(x = sleep_hours)) +
  geom_histogram(fill = "orange", color = "black", bins = 15) +
  theme_minimal()

ggplot(punt_estud, aes(x = attendance_percent)) +
  geom_histogram(fill = "green", color = "black", bins = 15) +
  theme_minimal()

ggplot(punt_estud, aes(x = previous_scores)) +
  geom_histogram(fill = "purple", color = "black", bins = 15) +
  theme_minimal()

ggplot(punt_estud, aes(x = exam_score)) +
  geom_histogram(fill = "red", color = "black", bins = 15) +
  theme_minimal()

Diagrama de caja y bigotes

ggplot(punt_estud, aes(y = exam_score)) +
  geom_boxplot(fill = "red") +
  theme_minimal()

4 ANÁLISIS DE CORRELACIÓN

library(dplyr)
var_cuant <- punt_estud %>%
  dplyr::select(hours_studied, sleep_hours, attendance_percent,
                previous_scores, exam_score)
matriz_cor <- cor(var_cuant)
round(matriz_cor,2)
##                    hours_studied sleep_hours attendance_percent previous_scores
## hours_studied               1.00        0.08              -0.03            0.07
## sleep_hours                 0.08        1.00               0.00           -0.19
## attendance_percent         -0.03        0.00               1.00            0.05
## previous_scores             0.07       -0.19               0.05            1.00
## exam_score                  0.78        0.19               0.23            0.43
##                    exam_score
## hours_studied            0.78
## sleep_hours              0.19
## attendance_percent       0.23
## previous_scores          0.43
## exam_score               1.00
corrplot(matriz_cor, method = "color", addCoef.col = "black",main="Matriz de Correlaciones")

quartz()
pairs(var_cuant, main="Diagrama de dispersión")

ggpairs(var_cuant,main="Matriz de Correlaciones")
## Warning in warn_if_args_exist(list(...)): Extra arguments: 'main' are being
## ignored.  If these are meant to be aesthetics, submit them using the 'mapping'
## variable within ggpairs with ggplot2::aes or ggplot2::aes_string.

Interpretación de la matriz de correlación

La matriz de correlación permite analizar la relación lineal entre las variables cuantitativas del estudio. En particular, se observa que la variable exam_score presenta una correlación positiva fuerte con hours_studied (r = 0.78), lo que indica que a mayor número de horas de estudio, mayor tiende a ser el puntaje en el examen. Esta relación es la más relevante del conjunto y sugiere que las horas de estudio son un factor determinante en el rendimiento académico.

Por otro lado, la correlación entre exam_score y previous_scores es moderada y positiva (r = 0.43), lo que indica que los estudiantes con mejores antecedentes académicos tienden a obtener mejores resultados en el examen, aunque con menor intensidad que las horas de estudio. Asimismo, la relación con attendance_percent es positiva pero débil (r = 0.23), sugiriendo que la asistencia tiene un efecto limitado sobre el rendimiento. En el caso de sleep_hours, la correlación con exam_score es débil (r = 0.19), lo que indica una relación poco significativa en términos prácticos.

En cuanto a las relaciones entre variables explicativas, se observa que las correlaciones son en general bajas (cercanas a cero), lo que sugiere ausencia de problemas graves de multicolinealidad. La correlación más notable es entre sleep_hours y previous_scores (r = -0.19), aunque su magnitud sigue siendo baja.

En conjunto, estos resultados indican que hours_studied y, en menor medida, previous_scores, son las variables con mayor potencial explicativo del rendimiento académico (exam_score). Además, la baja correlación entre las variables independientes favorece la estabilidad en la estimación de los coeficientes en un modelo de regresión lineal.

Interpretación:

  • Correlaciones fuertes: |r| > 0.7
  • Correlaciones moderadas: 0.3 < |r| < 0.7
  • Correlaciones débiles: |r| < 0.3

4.1 FORMULACIÓN DE HIPÓTESIS

cor.test(punt_estud$hours_studied, punt_estud$exam_score)
## 
##  Pearson's product-moment correlation
## 
## data:  punt_estud$hours_studied and punt_estud$exam_score
## t = 17.354, df = 198, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7150718 0.8264303
## sample estimates:
##       cor 
## 0.7767514

Hipótesis:

  • H0: No hay relación lineal
  • H1: Existe relación

Interpretación:

  • p-value < 0.05 , por tanto: evidencia de relación.