Un investigador quiere evaluar el efecto de 4 suplementos diet´eticos diferentes sobre el rendimiento cognitivo (medido en una escala estandarizada). Se reclutaron 50 participantes, y cada uno recibi´o los 4 suplementos en orden aleatorio, con periodos de lavado de 4 semanas entre ellos. Los suplementos son:
S1: Placebo
S2: Omega-3
S3: Vitaminas B
S4: Combinacion Omega-3 + Vitaminas B
Los datos se encuentran en el archivo suplementos.xlsx.
#Cargar datos
setwd("C:/Users/prestamour/Downloads")
library(readxl)
library(MVN)
library(Hotelling)
data = read_excel("suplementos.xlsx")
a) Prueba si existe normalidad multivariada
Prueba de normalidad multivariada
H0: Los datos provienen de una distribución normal multivariada
H1: Los datos no provienen de una distribución normal multivariada
# Asegúrese de tener el paquete "MVN" instalado
# install.packages("MVN")
library(MVN)
library(dplyr)
library(readxl)
# Cargar los datos (cambie la ruta si es necesario)
suplementos <- read_excel("suplementos.xlsx")
# Suponiendo que las columnas de los datos son S1, S2, S3, S4
# del data.frame "suplementos"
data_suplementos <- suplementos %>% select(S1, S2, S3, S4)
# Prueba de normalidad multivariada
# H0: Los datos provienen de una distribución normal multivariada
# H1: Los datos no provienen de una distribución normal multivariada
# La función mvn() realiza varias pruebas, incluyendo la de Mardia.
resultado_mardia <- mvn(data = data_suplementos, mvn_test = "mardia")
resultado_mardia
## $multivariate_normality
## Test Statistic p.value Method MVN
## 1 Mardia Skewness 24.096 0.238 asymptotic ✓ Normal
## 2 Mardia Kurtosis -0.922 0.356 asymptotic ✓ Normal
##
## $univariate_normality
## Test Variable Statistic p.value Normality
## 1 Anderson-Darling S1 0.310 0.543 ✓ Normal
## 2 Anderson-Darling S2 0.640 0.090 ✓ Normal
## 3 Anderson-Darling S3 0.381 0.389 ✓ Normal
## 4 Anderson-Darling S4 0.194 0.888 ✓ Normal
##
## $descriptives
## Variable n Mean Std.Dev Median Min Max 25th 75th Skew
## 1 S1 50 99.306 4.542 100.096 87.727 107.452 95.855 102.216 -0.236
## 2 S2 50 100.374 5.052 100.346 88.362 108.814 96.514 104.588 -0.015
## 3 S3 50 99.469 4.839 99.204 88.496 108.605 96.393 103.005 -0.147
## 4 S4 50 100.180 4.689 100.496 90.658 110.944 96.985 102.731 0.224
## Kurtosis
## 1 2.511
## 2 2.124
## 3 2.367
## 4 2.702
##
## $data
## # A tibble: 50 × 4
## S1 S2 S3 S4
## <dbl> <dbl> <dbl> <dbl>
## 1 100. 105. 103. 103.
## 2 101. 102. 102. 99.4
## 3 92.4 93.4 93.9 92.7
## 4 101. 102. 94.9 101.
## 5 97.2 99.3 99.7 101.
## 6 93.6 95.2 88.5 92.1
## 7 94.8 95.7 103. 98.9
## 8 102. 108. 103. 109.
## 9 101. 105. 104. 102.
## 10 105. 101. 101. 101.
## # ℹ 40 more rows
##
## $subset
## NULL
##
## $outlierMethod
## [1] "none"
##
## attr(,"class")
## [1] "mvn"
b) Las hipotesis de investigacion son:
¿Los suplementos S2, S3, S4 son mejores que el placebo S1?
¿El suplemento combinado (S4) es mejor que el promedio de los suplementos individuales (S2 y S3)?
¿Existe diferencia entre los suplementos individuales (S2 vs S3)? Defina las hipótesis y la matriz de contrastes.
Definición de las hipótesis
H0_1: mu_S1 = mu_S2, mu_S1 = mu_S3, mu_S1 = mu_S4
Se puede reformular como un solo contraste:
H0_1: mu_S2 - mu_S1 = 0, mu_S3 - mu_S1 = 0, mu_S4 - mu_S1 = 0
H0_2: mu_S4 = (mu_S2 + mu_S3) / 2 => 2*mu_S4 - mu_S2 - mu_S3 = 0
H0_3: mu_S2 = mu_S3 => mu_S2 - mu_S3 = 0
# Definición de las hipótesis y la matriz de contrastes
# Matriz de contrastes C
C <- matrix(c(
-1, 1, 0, 0, # Contraste 1: S2 vs S1
-1, 0, 1, 0, # Contraste 2: S3 vs S1
-1, 0, 0, 1, # Contraste 3: S4 vs S1
0, -1, -1, 2, # Contraste 4: S4 vs (S2+S3)/2
0, 1, -1, 0 # Contraste 5: S2 vs S3
), ncol = 4, byrow = TRUE)
# Nombrar las columnas para mayor claridad
colnames(C) <- c("S1", "S2", "S3", "S4")
print(C)
## S1 S2 S3 S4
## [1,] -1 1 0 0
## [2,] -1 0 1 0
## [3,] -1 0 0 1
## [4,] 0 -1 -1 2
## [5,] 0 1 -1 0
c) Use el marco teórico de medidas repetidas y la estadıstica T2 de para contrastar las hipótesis, a un nivel de significancia de 0.01.
# Contraste de las hipótesis con la estadística T2 de Hotelling.
# Asegúrese de tener el paquete "Hotelling" instalado
# install.packages("Hotelling")
library(Hotelling)
# Extraer el vector de medias y la matriz de covarianza
# de los datos de los suplementos
x_bar <- colMeans(data_suplementos)
S <- cov(data_suplementos)
n <- nrow(data_suplementos)
# Contraste de las hipótesis (S2, S3, S4 vs S1)
# Se crea la matriz C para este contraste específico
C1 <- matrix(c(
-1, 1, 0, 0,
-1, 0, 1, 0,
-1, 0, 0, 1
), ncol = 4, byrow = TRUE)
contrast_S1 <- C1 %*% x_bar
var_contrast_S1 <- C1 %*% S %*% t(C1)
T2_S1 <- n * t(contrast_S1) %*% solve(var_contrast_S1) %*% contrast_S1
cat("Estadística T^2 para los suplementos vs placebo:", T2_S1, "\n")
## Estadística T^2 para los suplementos vs placebo: 4.068868
# Contraste de la hipótesis (S4 vs promedio de S2 y S3)
C2 <- matrix(c(
0, -1, -1, 2
), ncol = 4, byrow = TRUE)
contrast_S2 <- C2 %*% x_bar
var_contrast_S2 <- C2 %*% S %*% t(C2)
T2_S2 <- n * t(contrast_S2) %*% solve(var_contrast_S2) %*% contrast_S2
cat("Estadística T^2 para S4 vs (S2+S3)/2:", T2_S2, "\n")
## Estadística T^2 para S4 vs (S2+S3)/2: 0.3562682
# Contraste de la hipótesis (S2 vs S3)
C3 <- matrix(c(
0, 1, -1, 0
), ncol = 4, byrow = TRUE)
contrast_S3 <- C3 %*% x_bar
var_contrast_S3 <- C3 %*% S %*% t(C3)
T2_S3 <- n * t(contrast_S3) %*% solve(var_contrast_S3) %*% contrast_S3
cat("Estadística T^2 para S2 vs S3:", T2_S3, "\n")
## Estadística T^2 para S2 vs S3: 1.972374
# P-valor para cada prueba (con Hotelling's T^2)
# El p-valor se calcula a partir de la distribución F.
# Para la primera hipótesis (p = 3, n = 50)
p_S1 <- 3
F_S1 <- (n - p_S1) / ((n - 1) * p_S1) * T2_S1
p_value_S1 <- 1 - pf(F_S1, p_S1, n - p_S1)
cat("P-valor para suplementos vs placebo:", p_value_S1, "\n")
## P-valor para suplementos vs placebo: 0.2852303
# Para la segunda hipótesis (p = 1, n = 50)
p_S2 <- 1
F_S2 <- (n - p_S2) / ((n - 1) * p_S2) * T2_S2
p_value_S2 <- 1 - pf(F_S2, p_S2, n - p_S2)
cat("P-valor para S4 vs (S2+S3)/2:", p_value_S2, "\n")
## P-valor para S4 vs (S2+S3)/2: 0.5533342
# Para la tercera hipótesis (p = 1, n = 50)
p_S3 <- 1
F_S3 <- (n - p_S3) / ((n - 1) * p_S3) * T2_S3
p_value_S3 <- 1 - pf(F_S3, p_S3, n - p_S3)
cat("P-valor para S2 vs S3:", p_value_S3, "\n")
## P-valor para S2 vs S3: 0.1665034
Conclusiones finales:
Hipótesis 1 (Suplementos vs placebo)
H₀₁: No hay diferencia entre S2, S3, S4 y el placebo S1
T² = 4.068868, p = 0.2852 (>
0.05).
Conclusión: No hay evidencia estadísticamente
significativa para afirmar que los suplementos S2, S3 o S4 mejoren el
rendimiento frente al placebo.
Hipótesis 2 (Suplemento combinado vs promedio de S2 y S3)
H₀₂: El suplemento combinado S4 es igual al promedio de S2 y S3.
T² = 0.3563, p = 0.5533 (>
0.05).
Conclusión: No existe evidencia estadística de que el
suplemento combinado (S4) sea mejor que el promedio de los suplementos
individuales (S2 y S3).
Hipótesis 3 (Comparación entre S2 y S3)
H₀₃: No hay diferencia entre S2 y S3.
T² = 1.9724, p = 0.1665 (>
0.05).
Conclusión: No se encuentra diferencia estadísticamente
significativa entre los suplementos individuales S2 y S3.
Un investigador educativo quiere evaluar el efecto de 3 metodos de ensenanza diferentes en el rendimiento academico de estudiantes. Se miden dos variables de resultado: Matematicas: Puntuacion en examen de matem´aticas (0-100) Lectura: Puntuacion en examen de lectura (0-100) Se asignaron aleatoriamente 45 estudiantes a 3 grupos (15 por grupo)
Grupo 1: Metodo tradicional
Grupo 2: Metodo interactivo
Grupo 3: Metodo digital Use un nivel de significancia de 0.05 y,
#Cargar datos
setwd("C:/Users/prestamour/Downloads")
library(readxl)
library(MVN)
df = read_excel("puntuacion.xlsx")
# Instalar paquetes si hacen falta (solo la primera vez)
pkgs <- c("readxl","tidyverse","MVN","car","heplots","rstatix","emmeans")
install_if_missing <- function(p) if (!requireNamespace(p, quietly = TRUE)) install.packages(p)
invisible(lapply(pkgs, install_if_missing))
# Cargar librerías
library(readxl)
library(tidyverse)
library(MVN) # Mardia
library(car) # Levene
library(heplots) # boxM
library(rstatix) # utilidades
library(emmeans) # post-hoc con ajuste Tukey
# limpiar nombres (por si hay espacios)
names(df) <- trimws(names(df))
# Asegurarse de tipos
df$Grupo <- factor(df$Grupo) # Grupo como factor (3 niveles: 1,2,3)
df$Matematicas <- as.numeric(df$Matematicas)
df$Lectura <- as.numeric(df$Lectura)
# Resumen y conteo por grupo
cat("Dimensiones:", dim(df), "\n")
## Dimensiones: 45 3
print(table(df$Grupo))
##
## 1 2 3
## 15 15 15
print(df %>% group_by(Grupo) %>% summarise(
n = n(),
mean_Mat = mean(Matematicas, na.rm=TRUE),
sd_Mat = sd(Matematicas, na.rm=TRUE),
mean_Lec = mean(Lectura, na.rm=TRUE),
sd_Lec = sd(Lectura, na.rm=TRUE)
))
## # A tibble: 3 × 6
## Grupo n mean_Mat sd_Mat mean_Lec sd_Lec
## <fct> <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 15 72.5 10.7 65.3 6.83
## 2 2 15 87.4 9.07 82.9 8.04
## 3 3 15 78.0 10.2 74.6 9.43
a) Pruebe normalidad univariada y multivariada por grupo
shapiro_by <- df %>%
pivot_longer(cols = c(Matematicas, Lectura), names_to = "Variable", values_to = "Valor") %>%
group_by(Grupo, Variable) %>%
summarise(W = shapiro.test(Valor)$statistic,
p_value = shapiro.test(Valor)$p.value) %>%
ungroup()
cat("\nShapiro-Wilk por grupo y variable:\n")
##
## Shapiro-Wilk por grupo y variable:
print(shapiro_by)
## # A tibble: 6 × 4
## Grupo Variable W p_value
## <fct> <chr> <dbl> <dbl>
## 1 1 Lectura 0.927 0.248
## 2 1 Matematicas 0.920 0.195
## 3 2 Lectura 0.968 0.832
## 4 2 Matematicas 0.943 0.425
## 5 3 Lectura 0.965 0.786
## 6 3 Matematicas 0.955 0.614
b) Realice un analisis de varianza univariado
datos = read_excel("puntuacion.xlsx")
anova_math <- aov(Matematicas ~ Grupo, data = datos)
anova_read <- aov(Lectura ~ Grupo, data = datos)
summary(anova_math)
## Df Sum Sq Mean Sq F value Pr(>F)
## Grupo 2 1701 850.5 8.478 0.000807 ***
## Residuals 42 4213 100.3
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(anova_read)
## Df Sum Sq Mean Sq F value Pr(>F)
## Grupo 2 2341 1170.4 17.55 2.89e-06 ***
## Residuals 42 2802 66.7
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
c) Realice un analisis de varianza multivariado
modelo_manova <- manova(cbind(Matematicas, Lectura) ~ Grupo, data = datos)
summary(modelo_manova, test = "Wilks")
## Df Wilks approx F num Df den Df Pr(>F)
## Grupo 2 0.53228 7.5985 4 82 2.939e-05 ***
## Residuals 42
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
d) Analisis pos hoc TukeyHSD
TukeyHSD(anova_math)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Matematicas ~ Grupo, data = datos)
##
## $Grupo
## diff lwr upr p adj
## 2-1 14.900859 6.015805 23.7859126 0.0005765
## 3-1 5.561995 -3.323059 14.4470486 0.2916025
## 3-2 -9.338864 -18.223918 -0.4538103 0.0374955
TukeyHSD(anova_read)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Lectura ~ Grupo, data = datos)
##
## $Grupo
## diff lwr upr p adj
## 2-1 17.655507 10.409781 24.901233 0.0000015
## 3-1 9.373640 2.127914 16.619366 0.0084361
## 3-2 -8.281867 -15.527593 -1.036141 0.0218027