Se analizan dos preguntas sobre el dataset
estudiantes_completa:
La metodología sigue lo desarrollado en clase (Pérez, 2026, Clase 5).
library(readxl)
library(nortest)
library(car)
library(lsr)
library(vcd)
library(knitr)
estudiantes <- read_xlsx("estudiantes_completa.xlsx")
estudiantes <- estudiantes[, -1]
estudiantes$sexo <- as.factor(estudiantes$sexo)
estudiantes$fuma <- as.factor(estudiantes$fuma)
estudiantes$colegio <- as.factor(estudiantes$colegio)
estudiantes$clases <- as.factor(estudiantes$clases)
estudiantes$interes <- as.factor(estudiantes$interes)
summary(estudiantes)
## sexo edad fuma colegio clases
## Femenino :86 Min. :16.04 No:82 Privado:71 Presencial:100
## Masculino:60 1st Qu.:17.22 Si:64 Publico:75 Virtual : 46
## Median :18.55
## Mean :18.89
## 3rd Qu.:20.39
## Max. :28.76
## interes parcial final nota
## Lengua :68 Min. : 2.000 Min. : 2.600 Min. :3.500
## Matematica:24 1st Qu.: 5.400 1st Qu.: 5.000 1st Qu.:5.700
## Naturales :25 Median : 7.000 Median : 6.200 Median :6.550
## Sociales :29 Mean : 6.851 Mean : 6.182 Mean :6.516
## 3rd Qu.: 8.400 3rd Qu.: 7.350 3rd Qu.:7.475
## Max. :10.000 Max. :10.000 Max. :9.900
Se evalúa si la nota media difiere según el área de interés:
H₀: μ_Lengua = μ_Matemática = μ_Naturales =
μ_Sociales
H₁: al menos una media difiere
medias <- aggregate(nota ~ interes, data = estudiantes, FUN = mean)
kable(medias,
digits = 2,
col.names = c("Área de interés", "Nota media"),
caption = "Tabla 1. Medias por grupo de interés")
| Área de interés | Nota media |
|---|---|
| Lengua | 7.35 |
| Matematica | 4.89 |
| Naturales | 6.34 |
| Sociales | 6.06 |
Se aplica Lilliefors (KS) dado que hay grupos con n > 50.
H₀: la nota sigue distribución normal en cada
grupo
H₁: no sigue distribución normal
by(data = estudiantes,
INDICES = estudiantes$interes,
FUN = function(x) lillie.test(x$nota))
## estudiantes$interes: Lengua
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: x$nota
## D = 0.057581, p-value = 0.8339
##
## ------------------------------------------------------------
## estudiantes$interes: Matematica
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: x$nota
## D = 0.12788, p-value = 0.3936
##
## ------------------------------------------------------------
## estudiantes$interes: Naturales
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: x$nota
## D = 0.12705, p-value = 0.3737
##
## ------------------------------------------------------------
## estudiantes$interes: Sociales
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: x$nota
## D = 0.11946, p-value = 0.361
En los cuatro grupos el p-valor supera 0.05 → no se rechaza H₀. Se verifica normalidad en cada grupo.
H₀: las varianzas son iguales en todos los
grupos
H₁: al menos un grupo presenta varianza distinta
bartlett.test(nota ~ interes, data = estudiantes)
##
## Bartlett test of homogeneity of variances
##
## data: nota by interes
## Bartlett's K-squared = 3.1558, df = 3, p-value = 0.3682
leveneTest(nota ~ interes, data = estudiantes)
Ambas pruebas: p-valor > 0.05 → no se rechaza H₀. Se verifica homocedasticidad. El ANOVA paramétrico es apropiado.
anova1 <- aov(nota ~ interes, data = estudiantes)
summary(anova1)
## Df Sum Sq Mean Sq F value Pr(>F)
## interes 3 117.5 39.15 45.8 <2e-16 ***
## Residuals 142 121.4 0.85
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
p-valor < 2e-16, muy por debajo de α = 0.05 → se rechaza H₀: hay diferencias significativas entre grupos.
\[\eta^2 = \frac{SC_{entre}}{SC_{total}}\]
kable(etaSquared(anova1),
digits = 3,
caption = "Tabla 2. Eta cuadrado (referencia: 0.01 pequeño | 0.06 mediano | 0.14 grande)")
| eta.sq | eta.sq.part | |
|---|---|---|
| interes | 0.492 | 0.492 |
El η² = 0.49 indica que el 49% de la variabilidad en la nota queda explicado por el área de interés — efecto grande.
Recomendado cuando hay más de 6 grupos o el diseño es equilibrado (Pérez, 2026, Diapositiva 15).
library(ggplot2)
intervalos <- TukeyHSD(anova1)
intervalos
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = nota ~ interes, data = estudiantes)
##
## $interes
## diff lwr upr p adj
## Matematica-Lengua -2.4583333 -3.0290522 -1.8876144 0.0000000
## Naturales-Lengua -1.0100000 -1.5722189 -0.4477811 0.0000406
## Sociales-Lengua -1.2913793 -1.8244942 -0.7582644 0.0000000
## Naturales-Matematica 1.4483333 0.7614059 2.1352607 0.0000011
## Sociales-Matematica 1.1669540 0.5036361 1.8302719 0.0000607
## Sociales-Naturales -0.2813793 -0.9373981 0.3746395 0.6808700
# Gráfico con etiquetas completas
tukey_df <- as.data.frame(intervalos$interes)
tukey_df$comparacion <- rownames(tukey_df)
ggplot(tukey_df, aes(x = diff, y = comparacion)) +
geom_point(size = 3, color = "#2c7bb6") +
geom_errorbarh(aes(xmin = lwr, xmax = upr),
height = 0.3, color = "#2c7bb6") +
geom_vline(xintercept = 0, linetype = "dashed",
color = "gray40") +
labs(
title = "Comparaciones múltiples — Tukey HSD",
subtitle = "Intervalos de confianza al 95%",
x = "Diferencia de medias",
y = "Par comparado",
caption = "Si el IC cruza la línea en 0, no hay diferencia significativa"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"),
axis.text.y = element_text(size = 11))
Figura 1. Intervalos de confianza al 95% — Tukey HSD
# Bonferroni: más conservador
pairwise.t.test(x = estudiantes$nota,
g = estudiantes$interes,
p.adjust.method = "bonferroni",
pool.sd = TRUE,
paired = FALSE,
alternative = "two.sided")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: estudiantes$nota and estudiantes$interes
##
## Lengua Matematica Naturales
## Matematica < 2e-16 - -
## Naturales 4.1e-05 1.1e-06 -
## Sociales 2.1e-08 6.2e-05 1
##
## P value adjustment method: bonferroni
# Holm: menos conservador que Bonferroni
pairwise.t.test(x = estudiantes$nota,
g = estudiantes$interes,
p.adjust.method = "holm",
pool.sd = TRUE,
paired = FALSE,
alternative = "two.sided")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: estudiantes$nota and estudiantes$interes
##
## Lengua Matematica Naturales
## Matematica < 2e-16 - -
## Naturales 2.1e-05 7.5e-07 -
## Sociales 1.8e-08 2.1e-05 0.27
##
## P value adjustment method: holm
comparaciones <- data.frame(
Par = c("Lengua vs Matemática",
"Lengua vs Naturales",
"Lengua vs Sociales",
"Matemática vs Naturales",
"Matemática vs Sociales",
"Naturales vs Sociales"),
Diferencia = c(-2.458, -1.010, -1.291, 1.448, 1.167, -0.281),
p_Tukey = c("< 0.001", "< 0.001", "< 0.001",
"< 0.001", "< 0.001", "0.681"),
Decision = c(rep("Se rechaza H₀", 5), "No se rechaza H₀")
)
kable(comparaciones,
col.names = c("Par comparado", "Diferencia de medias",
"p-valor (Tukey)", "Decisión (α = 0.05)"),
caption = "Tabla 3. Comparaciones post hoc — Tukey HSD")
| Par comparado | Diferencia de medias | p-valor (Tukey) | Decisión (α = 0.05) |
|---|---|---|---|
| Lengua vs Matemática | -2.458 | < 0.001 | Se rechaza H₀ |
| Lengua vs Naturales | -1.010 | < 0.001 | Se rechaza H₀ |
| Lengua vs Sociales | -1.291 | < 0.001 | Se rechaza H₀ |
| Matemática vs Naturales | 1.448 | < 0.001 | Se rechaza H₀ |
| Matemática vs Sociales | 1.167 | < 0.001 | Se rechaza H₀ |
| Naturales vs Sociales | -0.281 | 0.681 | No se rechaza H₀ |
Se evalúa si existe asociación entre el sexo del estudiante y el área de interés declarada:
H₀: sexo e interés son independientes
H₁: existe asociación entre sexo e interés
contingencia <- table(estudiantes$sexo, estudiantes$interes)
# Frecuencias observadas
kable(contingencia,
caption = "Tabla 4. Frecuencias observadas — Sexo × Interés")
| Lengua | Matematica | Naturales | Sociales | |
|---|---|---|---|---|
| Femenino | 43 | 14 | 14 | 15 |
| Masculino | 25 | 10 | 11 | 14 |
# Frecuencias marginales
margin.table(contingencia, 1) # por fila (sexo)
##
## Femenino Masculino
## 86 60
margin.table(contingencia, 2) # por columna (interés)
##
## Lengua Matematica Naturales Sociales
## 68 24 25 29
# Proporciones
kable(round(prop.table(contingencia), 3),
caption = "Tabla 5. Proporciones sobre el total")
| Lengua | Matematica | Naturales | Sociales | |
|---|---|---|---|---|
| Femenino | 0.295 | 0.096 | 0.096 | 0.103 |
| Masculino | 0.171 | 0.068 | 0.075 | 0.096 |
\[\chi^2 = \sum \frac{(O - E)^2}{E}\]
Con (r-1)(s-1) grados de libertad.
# Tabla 4x2: no se usa corrección de Yates
chisq.test(contingencia, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: contingencia
## X-squared = 1.2349, df = 3, p-value = 0.7447
p-valor = 0.745 > 0.05 → no se rechaza H₀. No hay evidencia de asociación entre sexo y área de interés.
La prueba χ² solo indica si hay o no asociación, no informa sobre la dirección ni la fuerza de la misma (Pérez, 2026, Diapositiva 27).
assocstats(contingencia)
## X^2 df P(> X^2)
## Likelihood Ratio 1.2322 3 0.74529
## Pearson 1.2349 3 0.74465
##
## Phi-Coefficient : NA
## Contingency Coeff.: 0.092
## Cramer's V : 0.092
# Cálculo manual para verificar
chi_val <- chisq.test(contingencia)$statistic
n <- sum(contingencia)
C_contingencia <- sqrt(chi_val / (chi_val + n))
V_cramer <- sqrt(chi_val / n) # t=1 para tabla 2×k
cat("Coeficiente de Contingencia:", round(C_contingencia, 3), "\n")
## Coeficiente de Contingencia: 0.092
cat("V de Cramer:", round(V_cramer, 3), "\n")
## V de Cramer: 0.092
Interpretación de V de Cramer (Pérez, 2026, Diapositiva 27):
| Valor | Asociación |
|---|---|
| < 0.05 | Débil |
| 0.05 – 0.25 | Moderada |
| 0.25 – 1 | Fuerte |
contingencia2 <- table(estudiantes$colegio, estudiantes$clases)
kable(contingencia2,
caption = "Tabla 6. Frecuencias observadas — Colegio × Modalidad")
| Presencial | Virtual | |
|---|---|---|
| Privado | 43 | 28 |
| Publico | 57 | 18 |
kable(round(prop.table(contingencia2), 3),
caption = "Tabla 7. Proporciones sobre el total")
| Presencial | Virtual | |
|---|---|---|
| Privado | 0.295 | 0.192 |
| Publico | 0.390 | 0.123 |
# Tabla 2x2: se usa corrección de Yates
chisq.test(contingencia2, correct = TRUE)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: contingencia2
## X-squared = 3.3438, df = 1, p-value = 0.06746
assocstats(contingencia2)
## X^2 df P(> X^2)
## Likelihood Ratio 4.0482 1 0.044218
## Pearson 4.0273 1 0.044768
##
## Phi-Coefficient : 0.166
## Contingency Coeff.: 0.164
## Cramer's V : 0.166
p-valor ≈ 0.067 → no se rechaza H₀ al 5%, aunque bordeando la significación. La V de Cramer = 0.166 indica asociación moderada.
ANOVA: El área de interés tiene un efecto estadísticamente significativo y de magnitud grande sobre la nota final (F = 45.8; p < 0.001; η² = 0.49). Lengua presenta la media más alta (~7.39) y Matemática la más baja (~4.93). Naturales y Sociales no difieren significativamente entre sí.
Tablas de contingencia: No se encontró asociación significativa entre sexo y área de interés (χ² = 1.23; p = 0.745; V = 0.092). Para colegio y modalidad de clases, la asociación bordea la significación (p = 0.067) con fuerza moderada (V = 0.166).