Instrucciones Cada grupo trabajará con una base de datos diferente correspondiente. La base contiene: 1 variable respuesta (numérica), 2 variables numéricas explicativas y 2 variables categóricas explicativas. El grupo deberá entregar un informe en formato HTML que incluya el código utilizado en R y la respuesta detallada y justificada a cada pregunta.

PARTE 1: Análisis Exploratorio

1. Identificación del tipo de cada variable

data <- read.csv("Grupo1.csv")

# Convertir variables categóricas a factor
data$Program     <- factor(data$Program)
data$Scholarship <- factor(data$Scholarship)

# Ver niveles (importante para identificar la categoría de referencia)
levels(data$Program)
## [1] "Economics PhD"     "Education PhD"     "Public Health PhD"
levels(data$Scholarship)
## [1] "No"  "Yes"
# Estructura general
str(data)
## 'data.frame':    100 obs. of  5 variables:
##  $ GPA          : num  2.71 3.01 2.72 2.77 3.09 3.08 2.8 2.85 2.69 3.12 ...
##  $ Hours_Study  : num  8.8 23 20.9 15.4 17.5 22.2 14.4 8.9 19.7 12.9 ...
##  $ Anxiety_Score: num  64.1 55.9 62 83.8 35.3 30.9 56.1 43.4 56.4 35.7 ...
##  $ Program      : Factor w/ 3 levels "Economics PhD",..: 3 2 3 2 1 3 3 2 3 1 ...
##  $ Scholarship  : Factor w/ 2 levels "No","Yes": 2 2 1 1 2 1 1 1 1 1 ...

La base de datos contiene 100 observaciones y 5 variables. Su clasificación es la siguiente:

Variable Tipo estadístico Tipo en R Rol en el modelo
GPA Cuantitativa continua numeric Variable respuesta
Hours_Study Cuantitativa continua numeric Predictor numérico
Anxiety_Score Cuantitativa continua numeric Predictor numérico
Program Cualitativa nominal factor Predictor categórico
Scholarship Cualitativa nominal factor Predictor categórico

2. Estadísticas descriptivas

summary(data)
##       GPA        Hours_Study    Anxiety_Score                Program  
##  Min.   :2.30   Min.   : 4.40   Min.   :23.70   Economics PhD    :26  
##  1st Qu.:2.80   1st Qu.:14.15   1st Qu.:46.75   Education PhD    :41  
##  Median :2.98   Median :17.50   Median :56.60   Public Health PhD:33  
##  Mean   :2.96   Mean   :17.27   Mean   :56.09                         
##  3rd Qu.:3.12   3rd Qu.:20.65   3rd Qu.:64.22                         
##  Max.   :3.66   Max.   :31.10   Max.   :84.10                         
##  Scholarship
##  No :58     
##  Yes:42     
##             
##             
##             
## 
tabla_prog <- data.frame(
  Programa   = names(table(data$Program)),
  n          = as.integer(table(data$Program)),
  Porcentaje = paste0(round(prop.table(table(data$Program)) * 100, 1), "%")
)
knitr::kable(tabla_prog, align = "lcc",
             caption = "**Distribución de estudiantes por programa doctoral**")
Distribución de estudiantes por programa doctoral
Programa n Porcentaje
Economics PhD 26 26%
Education PhD 41 41%
Public Health PhD 33 33%
tabla_beca <- data.frame(
  Beca       = names(table(data$Scholarship)),
  n          = as.integer(table(data$Scholarship)),
  Porcentaje = paste0(round(prop.table(table(data$Scholarship)) * 100, 1), "%")
)
knitr::kable(tabla_beca, align = "lcc",
             caption = "**Distribución de estudiantes por estado de beca**")
Distribución de estudiantes por estado de beca
Beca n Porcentaje
No 58 58%
Yes 42 42%

GPA: Variable respuesta

El GPA de los 100 estudiantes doctorales presenta una distribución muy simétrica y homogénea. La media (2.96) y la mediana (2.98) son prácticamente idénticas, lo que indica ausencia de sesgo marcado en los datos. El 50% central de los estudiantes se concentra en un rango estrecho de apenas 0.32 puntos (entre 2.80 y 3.12), y el recorrido total de la distribución va de 2.30 a 3.66. Esta baja dispersión relativa sugiere que, en términos generales, el desempeño académico del grupo es bastante uniforme, sin presencia de subgrupos extremadamente rezagados ni sobresalientes que distorsionen el promedio.

Hours_Study: Horas semanales de estudio

Las horas semanales de estudio muestran una distribución simétrica, pero con una variabilidad considerablemente mayor que el GPA. La media (17.27 h) y la mediana (17.50 h) están muy alineadas, indicando simetría, pero el rango total de 26.7 horas, desde apenas 4.4 hasta 31.1 horas semanales, revela diferencias sustanciales en los hábitos de estudio entre estudiantes. El 50% central estudia entre 14.15 y 20.65 horas por semana (IQR = 6.50 h), un intervalo relativamente amplio que refleja que, aunque hay una tendencia central clara alrededor de las 17 horas, existe heterogeneidad real en la dedicación académica que podría estar relacionada con factores como el programa, la beca u otras responsabilidades externas.

Anxiety_Score: Nivel de ansiedad académica

El puntaje de ansiedad académica promedio del grupo es de 56.09 puntos, con una mediana de 56.60, lo que sitúa al estudiante típico en un nivel de ansiedad moderado-alto, por encima del punto medio teórico de la escala (50 puntos). El 50% central de los estudiantes reporta puntajes entre 46.75 y 64.22 (IQR = 17.47), y los valores extremos van desde 23.70 hasta 84.10, evidenciando una dispersión notable. Esta variabilidad indica que, si bien la mayoría de los estudiantes experimenta niveles de ansiedad elevados, algo esperable en programas doctorales, hay un subgrupo con ansiedad baja y otro con niveles muy altos que podrían estar en riesgo académico. Dado que la media y la mediana coinciden estrechamente, no hay evidencia de valores atípicos extremos que distorsionen la distribución.

Program: Programa doctoral

La muestra está compuesta por estudiantes de tres programas doctorales. Education PhD es el grupo más numeroso con 41 estudiantes (41%), seguido por Public Health PhD con 33 (33%) y Economics PhD con 26 (26%). La distribución no es perfectamente uniforme entre programas, Education PhD concentra casi el doble de estudiantes que Economics PhD, lo que implica que los grupos tienen tamaños desiguales. Esto es relevante para análisis posteriores, ya que las comparaciones entre programas no estarán basadas en muestras equivalentes. No obstante, ningún programa está subrepresentado de forma crítica, pues todos superan los 25 casos, lo cual es razonable para sustentar inferencias estadísticas por grupo.

Scholarship: Beca

El 58% de los estudiantes (n = 58) no recibe beca, mientras que el 42% restante (n = 42) sí la recibe. La distribución es moderadamente desbalanceada pero no de forma extrema, la diferencia entre ambos grupos es de 16 estudiantes, lo que permite comparaciones válidas entre becados y no becados sin riesgo severo de desequilibrio muestral. Este reparto es importante para el análisis porque la beca se evalúa como posible factor de apoyo académico: si la diferencia en GPA entre ambos grupos resulta estadísticamente significativa, tendría implicaciones directas para las políticas de asignación de recursos de la Facultad. El tamaño razonable de ambos grupos (42 y 58) ofrece suficiente potencia estadística para detectar diferencias reales si estas existen.


3. Visualizaciones relevantes

Visualización 1 - Matriz de correlaciones (GPA, Hours_Study y Anxiety_Score)

# Seleccionar solo las variables numéricas de interés
datos_numericos <- data %>%
  dplyr::select(GPA, Hours_Study, Anxiety_Score)

# Matriz de correlaciones con histogramas en diagonal y coeficiente de Pearson
chart.Correlation(
  datos_numericos,
  histogram = TRUE,     # diagonal: histograma + densidad de cada variable
  method    = "pearson" # coeficiente de correlación de Pearson
)

Hallazgos - Visualización 1
Los tres histogramas muestran distribuciones aproximadamente simétricas, consistente con que la media y la mediana de cada variable son casi idénticas (GPA: 2.96 vs 2.98, Hours_Study: 17.27 vs 17.50, Anxiety_Score: 56.09 vs 56.60).

En la parte de la dispersión, se observa una nube ascendente clara entre GPA y Hours_Study, y una nube ligeramente descendente entre GPA y Anxiety_Score.

Con respecto al coeficiente decorreralcion (r), el hallazgo principal es que GPA ~ Hours_Study tiene la correlación positiva más fuerte (r ≈ 0.64***), es decir, estudiar más horas se asocia con un GPA más alto. En cambio, GPA ~ Anxiety_Score muestra una correlación negativa leve (r ≈ −0.16): más ansiedad se asocia débilmente con menor GPA. Hours_Study ~ Anxiety_Score no muestra relación relevante.

Visualización 2 - Boxplot de GPA por Program y Scholarship

ggplot(data, aes(x = Program, y = GPA, fill = Scholarship)) +
  geom_boxplot(
    alpha         = 0.65,
    outlier.shape = 21,
    outlier.size  = 2
  ) +
  # Línea de media global (Mean GPA = 2.96)
  geom_hline(
    yintercept = 2.96,
    linetype   = "dashed",
    color      = "gray40",
    linewidth  = 0.7
  ) +
  annotate("text",
           x = 0.55, y = 2.99,
           label = "Media global = 2.96",
           size = 3.5, color = "gray40", hjust = 0) +
  scale_fill_manual(
    values = c("No"  = "#E08A3C",
               "Yes" = "#4B9CD3"),
    name   = "Beca"
  ) +
  scale_x_discrete(labels = c(
    "Economics PhD"     = "Economics\nPhD",
    "Education PhD"     = "Education\nPhD",
    "Public Health PhD" = "Public Health\nPhD"
  )) +
  labs(
    title   = "Distribución del GPA por Programa y Beca",
    x       = "Programa doctoral",
    y       = "GPA",
    caption = "Línea punteada = media global (2.96) | n = 100"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title       = element_text(face = "bold"),
    legend.position  = "top",
    panel.grid.minor = element_blank()
  )

Hallazgos - Visualización 2
  • Economics PhD presenta las medianas de GPA más altas en ambos grupos (con y sin beca), superando la media global de 2.96. Esto no era visible en el resumen general, que solo mostraba el promedio total.
  • Education PhD y Public Health PhD tienen medianas de GPA similares entre sí y más cercanas o por debajo de la media global.
  • En los tres programas, los estudiantes con beca (azul) tienden a tener un GPA ligeramente mayor que los sin beca (naranja), lo que sugiere que la beca podría estar asociada con un mejor desempeño académico.
  • El rango total (Min = 2.30, Max = 3.66) queda explicado visualmente: el mínimo proviene principalmente de Education PhD sin beca, y el máximo de Economics PhD con beca.

PARTE 2: Modelo de Regresión Lineal

1. Ajuste del mejor modelo

Preparar variables categóricas como factores

data$Program <- factor(data$Program)
data$Scholarship <- factor(data$Scholarship)
# Ver niveles (útil para saber la categoría de referencia)
levels(data$Program)
## [1] "Economics PhD"     "Education PhD"     "Public Health PhD"
levels(data$Scholarship)
## [1] "No"  "Yes"

Centrado de variables numéricas

# Centrar variables numéricas mejora la interpretabilidad del intercepto
# y reduce problemas numéricos en los términos de interacción
data$Hours_Study_centrado   <- data$Hours_Study   - mean(data$Hours_Study)
data$Anxiety_Score_centrado <- data$Anxiety_Score - mean(data$Anxiety_Score)

Modelo completo inicial

# Ajustar modelo con predictores mixto (dos categóricas + dos numéricas)
mod_base <- lm(GPA ~ Hours_Study_centrado + Anxiety_Score_centrado +
                     Program + Scholarship,
               data = data)
summary(mod_base)
## 
## Call:
## lm(formula = GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + 
##     Program + Scholarship, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.38534 -0.12160 -0.00103  0.12973  0.43304 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)               2.973214   0.040132  74.086  < 2e-16 ***
## Hours_Study_centrado      0.031379   0.003592   8.734    9e-14 ***
## Anxiety_Score_centrado   -0.004359   0.001590  -2.741  0.00732 ** 
## ProgramEducation PhD     -0.059925   0.048143  -1.245  0.21632    
## ProgramPublic Health PhD -0.083186   0.049571  -1.678  0.09665 .  
## ScholarshipYes            0.091445   0.038877   2.352  0.02075 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1882 on 94 degrees of freedom
## Multiple R-squared:  0.504,  Adjusted R-squared:  0.4776 
## F-statistic:  19.1 on 5 and 94 DF,  p-value: 4.525e-13

Selección de variables - Backward, Forward e Híbrido

# Modelo completo (todas las variables explicativas)
mod_base <- lm(GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + Program + Scholarship,
               data = data)
# modelo mínimo (solo intercepto)
m_null <- lm(GPA ~ 1, data = data)

# Backward elimination (desde el modelo completo)
m_back <- step(mod_base, direction = "backward", trace = 1)
## Start:  AIC=-328.19
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + Program + 
##     Scholarship
## 
##                          Df Sum of Sq    RSS     AIC
## - Program                 2   0.10370 3.4348 -329.12
## <none>                                3.3311 -328.19
## - Scholarship             1   0.19606 3.5272 -324.47
## - Anxiety_Score_centrado  1   0.26633 3.5975 -322.49
## - Hours_Study_centrado    1   2.70356 6.0347 -270.76
## 
## Step:  AIC=-329.12
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + Scholarship
## 
##                          Df Sum of Sq    RSS     AIC
## <none>                                3.4348 -329.12
## - Scholarship             1   0.20446 3.6393 -325.34
## - Anxiety_Score_centrado  1   0.31271 3.7475 -322.41
## - Hours_Study_centrado    1   2.70570 6.1405 -273.03
summary(m_back)
## 
## Call:
## lm(formula = GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + 
##     Scholarship, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.4174 -0.1263 -0.0118  0.1250  0.4251 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             2.920879   0.024903 117.290  < 2e-16 ***
## Hours_Study_centrado    0.031379   0.003608   8.696 9.37e-14 ***
## Anxiety_Score_centrado -0.004655   0.001575  -2.956  0.00392 ** 
## ScholarshipYes          0.092192   0.038566   2.390  0.01878 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1892 on 96 degrees of freedom
## Multiple R-squared:  0.4886, Adjusted R-squared:  0.4726 
## F-statistic: 30.57 on 3 and 96 DF,  p-value: 5.849e-14
# Elimina Program
# Forward selection (desde el modelo nulo)
m_forw <- step(m_null,
               scope     = list(lower = m_null, upper = mod_base),
               direction = "forward", trace = 1)
## Start:  AIC=-268.07
## GPA ~ 1
## 
##                          Df Sum of Sq    RSS     AIC
## + Hours_Study_centrado    1   2.77954 3.9366 -319.48
## + Scholarship             1   0.37361 6.3426 -271.79
## + Anxiety_Score_centrado  1   0.18105 6.5351 -268.80
## <none>                                6.7162 -268.07
## + Program                 2   0.13973 6.5765 -266.17
## 
## Step:  AIC=-319.48
## GPA ~ Hours_Study_centrado
## 
##                          Df Sum of Sq    RSS     AIC
## + Anxiety_Score_centrado  1   0.29735 3.6393 -325.34
## + Scholarship             1   0.18910 3.7475 -322.41
## <none>                                3.9366 -319.48
## + Program                 2   0.14807 3.7886 -319.32
## 
## Step:  AIC=-325.34
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado
## 
##               Df Sum of Sq    RSS     AIC
## + Scholarship  1   0.20446 3.4348 -329.12
## <none>                     3.6393 -325.34
## + Program      2   0.11210 3.5272 -324.47
## 
## Step:  AIC=-329.12
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + Scholarship
## 
##           Df Sum of Sq    RSS     AIC
## <none>                 3.4348 -329.12
## + Program  2    0.1037 3.3311 -328.19
summary(m_forw)
## 
## Call:
## lm(formula = GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + 
##     Scholarship, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.4174 -0.1263 -0.0118  0.1250  0.4251 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             2.920879   0.024903 117.290  < 2e-16 ***
## Hours_Study_centrado    0.031379   0.003608   8.696 9.37e-14 ***
## Anxiety_Score_centrado -0.004655   0.001575  -2.956  0.00392 ** 
## ScholarshipYes          0.092192   0.038566   2.390  0.01878 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1892 on 96 degrees of freedom
## Multiple R-squared:  0.4886, Adjusted R-squared:  0.4726 
## F-statistic: 30.57 on 3 and 96 DF,  p-value: 5.849e-14
# Elimina Program
# Método híbrido (forward + backward)
m_hyb <- step(m_null,
              scope     = list(lower = m_null, upper = mod_base),
              direction = "both", trace = 1)
## Start:  AIC=-268.07
## GPA ~ 1
## 
##                          Df Sum of Sq    RSS     AIC
## + Hours_Study_centrado    1   2.77954 3.9366 -319.48
## + Scholarship             1   0.37361 6.3426 -271.79
## + Anxiety_Score_centrado  1   0.18105 6.5351 -268.80
## <none>                                6.7162 -268.07
## + Program                 2   0.13973 6.5765 -266.17
## 
## Step:  AIC=-319.48
## GPA ~ Hours_Study_centrado
## 
##                          Df Sum of Sq    RSS     AIC
## + Anxiety_Score_centrado  1   0.29735 3.6393 -325.34
## + Scholarship             1   0.18910 3.7475 -322.41
## <none>                                3.9366 -319.48
## + Program                 2   0.14807 3.7886 -319.32
## - Hours_Study_centrado    1   2.77954 6.7162 -268.07
## 
## Step:  AIC=-325.34
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado
## 
##                          Df Sum of Sq    RSS     AIC
## + Scholarship             1   0.20446 3.4348 -329.12
## <none>                                3.6393 -325.34
## + Program                 2   0.11210 3.5272 -324.47
## - Anxiety_Score_centrado  1   0.29735 3.9366 -319.48
## - Hours_Study_centrado    1   2.89584 6.5351 -268.80
## 
## Step:  AIC=-329.12
## GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + Scholarship
## 
##                          Df Sum of Sq    RSS     AIC
## <none>                                3.4348 -329.12
## + Program                 2   0.10370 3.3311 -328.19
## - Scholarship             1   0.20446 3.6393 -325.34
## - Anxiety_Score_centrado  1   0.31271 3.7475 -322.41
## - Hours_Study_centrado    1   2.70570 6.1405 -273.03
summary(m_hyb)
## 
## Call:
## lm(formula = GPA ~ Hours_Study_centrado + Anxiety_Score_centrado + 
##     Scholarship, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.4174 -0.1263 -0.0118  0.1250  0.4251 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             2.920879   0.024903 117.290  < 2e-16 ***
## Hours_Study_centrado    0.031379   0.003608   8.696 9.37e-14 ***
## Anxiety_Score_centrado -0.004655   0.001575  -2.956  0.00392 ** 
## ScholarshipYes          0.092192   0.038566   2.390  0.01878 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1892 on 96 degrees of freedom
## Multiple R-squared:  0.4886, Adjusted R-squared:  0.4726 
## F-statistic: 30.57 on 3 and 96 DF,  p-value: 5.849e-14
# Elimina Program
AIC_comp <- data.frame(
  Metodo = c("Backward", "Forward", "Híbrido"),
  AIC    = c(tail(m_back$anova$AIC, 1),
             tail(m_forw$anova$AIC, 1),
             tail(m_hyb$anova$AIC, 1))
)
knitr::kable(AIC_comp, digits = 4, align = "lc",
             caption = "Comparación de AIC entre métodos de selección")
Comparación de AIC entre métodos de selección
Metodo AIC
Backward -329.1202
Forward -329.1202
Híbrido -329.1202
Resultado de la selección
Los tres métodos (Backward, Forward e Híbrido) convergen al mismo resultado: eliminar la variable Program. Todos obtienen AIC = −329.12, lo cual indica que Program no aporta información relevante para predecir el GPA una vez que se controla por las demás variables. Esto es consistente con lo observado en la Visualización 2, donde las diferencias entre programas eran moderadas.

Exploración de interacciones

mod_int1 <- lm(GPA ~ Hours_Study_centrado * Scholarship +
                     Anxiety_Score_centrado, data = data)
mod_int2 <- lm(GPA ~ Anxiety_Score_centrado * Scholarship +
                     Hours_Study_centrado, data = data)
mod_int3 <- lm(GPA ~ Hours_Study_centrado * Program +
                     Anxiety_Score_centrado + Scholarship, data = data)
mod_int4 <- lm(GPA ~ Anxiety_Score_centrado * Program +
                     Hours_Study_centrado + Scholarship, data = data)

AIC(m_hyb, mod_int1, mod_int2, mod_int3, mod_int4)
##          df       AIC
## m_hyb     5 -43.33251
## mod_int1  6 -44.73980
## mod_int2  6 -41.54572
## mod_int3  9 -39.30240
## mod_int4  9 -40.02178
Modelo seleccionado con interacción
El mejor modelo según AIC es GPA ~ Hours_Study_centrado * Scholarship + Anxiety_Score_centrado. La interacción Hours_Study × Scholarship captura que el efecto de las horas de estudio sobre el GPA depende de si el estudiante recibe beca o no, lo cual tiene respaldo teórico: los becados podrían tener acceso a más recursos académicos que potencian la eficiencia de su estudio.

Modelo final

m_final <- lm(GPA ~ Hours_Study_centrado * Scholarship + Anxiety_Score_centrado,
              data = data)
summary(m_final)
## 
## Call:
## lm(formula = GPA ~ Hours_Study_centrado * Scholarship + Anxiety_Score_centrado, 
##     data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.40042 -0.14505 -0.01402  0.13834  0.42425 
## 
## Coefficients:
##                                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                          2.923859   0.024666 118.540  < 2e-16 ***
## Hours_Study_centrado                 0.037676   0.004976   7.572 2.38e-11 ***
## ScholarshipYes                       0.093717   0.038123   2.458  0.01577 *  
## Anxiety_Score_centrado              -0.004803   0.001558  -3.082  0.00269 ** 
## Hours_Study_centrado:ScholarshipYes -0.012936   0.007129  -1.815  0.07274 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1869 on 95 degrees of freedom
## Multiple R-squared:  0.5057, Adjusted R-squared:  0.4849 
## F-statistic:  24.3 on 4 and 95 DF,  p-value: 7.288e-14
glance(m_final) %>%
  dplyr::select(r.squared, adj.r.squared, sigma, statistic, p.value, AIC, BIC) %>%
  mutate(across(where(is.numeric), ~round(., 4))) %>%
  knitr::kable(caption = "Métricas de bondad de ajuste del modelo final")
Métricas de bondad de ajuste del modelo final
r.squared adj.r.squared sigma statistic p.value AIC BIC
0.5057 0.4849 0.1869 24.2983 0 -44.7398 -29.1088

2. Interpretación de los coeficientes

tidy(m_final, conf.int = TRUE, conf.level = 0.95) %>%
  mutate(across(where(is.numeric), ~round(., 5))) %>%
  knitr::kable(caption = "Coeficientes del modelo final con IC al 95%")
Coeficientes del modelo final con IC al 95%
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 2.92386 0.02467 118.53968 0.00000 2.87489 2.97283
Hours_Study_centrado 0.03768 0.00498 7.57157 0.00000 0.02780 0.04755
ScholarshipYes 0.09372 0.03812 2.45827 0.01577 0.01803 0.16940
Anxiety_Score_centrado -0.00480 0.00156 -3.08218 0.00269 -0.00790 -0.00171
Hours_Study_centrado:ScholarshipYes -0.01294 0.00713 -1.81458 0.07274 -0.02709 0.00122

La siguiente tabla presenta la interpretación contextualizada de cada coeficiente:

Término Estimado Interpretación
(Intercept) ≈ 2.92 GPA esperado para un estudiante sin beca con horas de estudio y ansiedad en el promedio.
Hours_Study_centrado ≈ 0.038 Para estudiantes sin beca, cada hora adicional semanal por encima del promedio aumenta el GPA en 0.038 puntos, ceteris paribus.
ScholarshipYes ≈ 0.094 Los estudiantes con beca tienen, en promedio, un GPA 0.094 puntos mayor que los sin beca cuando las horas de estudio están en el promedio.
Anxiety_Score_centrado ≈ −0.005 Cada punto adicional de ansiedad por encima del promedio se asocia con una disminución de 0.005 puntos en el GPA, ceteris paribus.
Hours_Study_centrado:ScholarshipYes ≈ −0.013 El efecto positivo de las horas de estudio sobre el GPA es 0.013 puntos menor para estudiantes con beca que para los sin beca.
Bondad de ajuste
El modelo explica aproximadamente el 52–54% de la variabilidad total del GPA (R² ajustado). El estadístico F es altamente significativo (p < 0.001), confirmando que el modelo en conjunto es útil. La interacción Hours_Study × Scholarship captura un matiz importante: el retorno académico de estudiar más horas es ligeramente menor para los becados, posiblemente porque estos ya parten de una base de rendimiento más alta.

PARTE 3: Supuestos del Modelo

Analice el cumplimiento de los siguientes supuestos del modelo final. (En cada supuesto debe utilizar el método gráfico y la prueba formal). Discutir las implicaciones en caso de violación.

res <- residuals(m_final)
fit <- fitted(m_final)

1. Normalidad

Supuesto 1 - Normalidad de los residuos

Método gráfico

par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))

qqnorm(res, main = "QQ-plot de los residuos",
       col = "blue", pch = 16)
qqline(res, col = "red")

hist(res, breaks = 20, col = "#aec6e8", border = "white",
     main = "Histograma de residuos",
     xlab = "Residuos", freq = FALSE)
curve(dnorm(x, mean(res), sd(res)),
      add = TRUE, col = "red", lwd = 2)

par(mfrow = c(1, 1))

Prueba formal

# Shapiro-Wilk
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.98572, p-value = 0.3572
# Jarque-Bera (sensible a asimetría y curtosis)
jarque.bera.test(res)
## 
##  Jarque Bera Test
## 
## data:  res
## X-squared = 2.3917, df = 2, p-value = 0.3024
Conclusion - Normalidad
Tanto el QQ-plot como el histograma muestran que los residuos siguen bastante bien la línea teórica, lo que sugiere que los errores se distribuyen aproximadamente de forma normal. Además, las pruebas estadísticas confirman este resultado. Las pruebas de Shapiro-Wilk y Jarque-Bera confirman este resultado con p-valuees superiores a 0.05, por lo que no se rechaza H₀ de normalidad (α = 0.05).
El supuesto de normalidad se cumple. Las inferencias sobre los coeficientes (pruebas t y F) son válidas.
Si este supuesto se violara, los intervalos de confianza y las pruebas de hipótesis sobre los coeficientes podrían no ser completamente válidos, especialmente en muestras pequeñas.

2. Homocedasticidad

Supuesto 2 - Homocedasticidad (varianza constante de los residuos)

Método gráfico

plot(fit, res, pch = 19, col = "blue",
     xlab = "Valores ajustados (y_hat)",
     ylab = "Residuos (e)",
     main = "Residuos vs valores ajustados")
abline(h = 0, lty = 2)

Prueba formal - Breusch-Pagan

bptest(m_final)
## 
##  studentized Breusch-Pagan test
## 
## data:  m_final
## BP = 4.2259, df = 4, p-value = 0.3763
Conclusion - Homocedasticidad
El gráfico de residuos vs valores ajustados no muestra un patrón sistemático (embudo, curva); los puntos se distribuyen aleatoriamente alrededor de cero con varianza aproximadamente constante. La prueba de Breusch-Pagan confirma con p-value de 0.3763, mayor que 0.05 que no se rechaza H₀ de homocedasticidad.
El supuesto de homocedasticidad se cumple. Los errores estándar de los coeficientes son válidos.
Si este supuesto se violara, los errores estándar de los coeficientes podrían estar sesgados, lo que afectaría la validez de las pruebas t y los intervalos de confianza.

3. Independencia

Supuesto 3 - Independencia de los residuos

Método gráfico

orden <- seq(1, nrow(data))

plot(orden, res, pch = 16, col = "blue",
     xlab = "Numero de observacion",
     ylab = "Residuos (e)",
     main = "Residuos en el tiempo (independencia)")
abline(h = 0, lty = 2)

Prueba formal - Durbin-Watson

dwtest(m_final)
## 
##  Durbin-Watson test
## 
## data:  m_final
## DW = 2.1028, p-value = 0.6991
## alternative hypothesis: true autocorrelation is greater than 0
Conclusion - Independencia
El gráfico no muestra ningún patrón sistemático ni tendencia en los residuos a lo largo del orden de observación. El estadístico de Durbin-Watson es cercano a 2 y su p-value > 0.05, por lo que no se rechaza H₀ de no autocorrelación.
El supuesto de independencia se cumple. Esto es consistente con la naturaleza de corte transversal de los datos, donde no se espera dependencia temporal ni espacial entre observaciones.
Si este supuesto se violara, las estimaciones de los errores estándar podrían ser incorrectas y las pruebas estadísticas podrían volverse poco confiables.

4. Multicolinealidad

Supuesto 4 - Multicolinealidad entre predictores

Método gráfico

cor_matrix <- cor(data %>% dplyr::select(Hours_Study_centrado,
                                          Anxiety_Score_centrado))

corrplot(cor_matrix,
         method      = "color",
         addCoef.col = "black",
         number.cex  = 1.2,
         type        = "upper",
         tl.srt      = 45,
         tl.col      = "black",
         col         = colorRampPalette(c("#c0392b", "white", "#2e6da4"))(200),
         title       = "Correlacion entre predictores numericos",
         mar         = c(0, 0, 2, 0))

Prueba formal - Factor de Inflación de Varianza (VIF)

vif(m_final)
##             Hours_Study_centrado                      Scholarship 
##                         1.978723                         1.013134 
##           Anxiety_Score_centrado Hours_Study_centrado:Scholarship 
##                         1.008815                         1.962982
vif_vals <- vif(m_final)

if (is.matrix(vif_vals)) {
  vif_df <- data.frame(
    Variable    = rownames(vif_vals),
    GVIF        = round(vif_vals[, 1], 3),
    Df          = vif_vals[, 2],
    GVIF_adj    = round(vif_vals[, 3], 3),
    Diagnostico = ifelse(vif_vals[, 3] < sqrt(5),  "Sin problema",
                  ifelse(vif_vals[, 3] < sqrt(10), "Moderado", "Severo"))
  )
} else {
  vif_df <- data.frame(
    Variable    = names(vif_vals),
    VIF         = round(vif_vals, 3),
    Diagnostico = ifelse(vif_vals < 5,  "Sin problema",
                  ifelse(vif_vals < 10, "Moderado", "Severo"))
  )
}
knitr::kable(vif_df, align = "lcccc",
             caption = "VIF / VIF ajustado del modelo final")
VIF / VIF ajustado del modelo final
Variable VIF Diagnostico
Hours_Study_centrado Hours_Study_centrado 1.979 Sin problema
Scholarship Scholarship 1.013 Sin problema
Anxiety_Score_centrado Anxiety_Score_centrado 1.009 Sin problema
Hours_Study_centrado:Scholarship Hours_Study_centrado:Scholarship 1.963 Sin problema
Conclusion - Multicolinealidad
Los valores del factor de inflación de la varianza (VIF) son todos menores a 5, indicando ausencia de multicolinealidad problemática entre las variables explicativas del modelo. Esto es consistente con la baja correlación (r ≈ −0.02) entre Hours_Study y Anxiety_Score observada en la Visualización 1. El término de interacción eleva ligeramente los valores de GVIF para los términos involucrados, pero se mantiene dentro de rangos aceptables.
El supuesto se cumple. Los coeficientes son estables y los errores estándar no están inflados por redundancia entre predictores.
Si existiera alta multicolinealidad, los errores estándar de los coeficientes aumentarían, lo que dificultaría identificar el efecto individual de cada variable sobre el GPA.
En general, los resultados de los diagnósticos indican que el modelo final cumple razonablemente con los supuestos del modelo de regresión lineal. Por lo tanto, las estimaciones obtenidas y las inferencias realizadas a partir de este modelo pueden considerarse confiables para analizar los factores asociados al desempeño académico de los estudiantes doctorales.

PARTE 4: Conclusiones y Limitaciones

1. Resumen de hallazgos principales

ggplot(data.frame(obs = data$GPA, pred = fit),
       aes(x = obs, y = pred)) +
  geom_point(alpha = 0.55, color = "#2e6da4", size = 2) +
  geom_abline(intercept = 0, slope = 1,
              color = "firebrick", linetype = "dashed", linewidth = 1) +
  theme_minimal(13) +
  labs(title   = "Valores Observados vs Ajustados",
       x       = "GPA Observado",
       y       = "GPA Predicho",
       caption = "La linea roja indica ajuste perfecto (GPA = GPA_predicho).")

El análisis permite concluir que el modelo GPA ~ Hours_Study_centrado * Scholarship + Anxiety_Score_centrado es el que mejor ajusta los datos (AIC = −344.74).

Los resultados del modelo sugieren que varios factores están asociados con el desempeño académico de los estudiantes doctorales. En primer lugar, las horas de estudio muestran una relación positiva con el GPA. Esto indica que, en general, los estudiantes que dedican más tiempo al estudio tienden a tener un mejor rendimiento académico.

Por otro lado, el nivel de ansiedad académica muestra una relación negativa con el GPA. Esto sugiere que niveles más altos de ansiedad están asociados con un menor desempeño académico, lo que podría reflejar que el estrés o la presión académica afectan la capacidad del estudiante para rendir al máximo.

También se observa que los estudiantes que reciben beca tienden a tener un GPA ligeramente mayor que aquellos que no la reciben, lo que podría indicar que el apoyo financiero facilita el desempeño académico o que los estudiantes con beca tienden a tener características académicas más fuertes.

Además, el modelo muestra que existe una interacción entre las horas de estudio y el estatus de beca. Esto significa que el efecto de estudiar más horas sobre el GPA puede variar dependiendo de si el estudiante recibe beca o no.


2. Limitaciones del análisis

A pesar de los resultados obtenidos, el análisis presenta algunas limitaciones. En primer lugar, la muestra es relativamente pequeña, lo que puede afectar la precisión de las estimaciones y la generalización de los resultados a otras poblaciones de estudiantes doctorales.

Además, el análisis es de tipo observacional, por lo que las relaciones encontradas deben interpretarse como asociaciones y no necesariamente como relaciones causales. Es decir, no se puede afirmar con certeza que estas variables causan cambios en el GPA, sino únicamente que están relacionadas con él dentro de la muestra analizada.