# Datos
A_antes <- c(200, 210, 205, 220, 215)
A_despues <- c(180, 190, 185, 200, 195)
B_antes <- c(205, 215, 210, 225, 220)
B_despues <- c(210, 220, 215, 230, 225)
# Diferencias observadas
diff_a <- mean(A_antes) - mean(A_despues)
diff_b <- mean(B_antes) - mean(B_despues)
cat("Diferencia observada Grupo A:", diff_a, "\n")
## Diferencia observada Grupo A: 20
cat("Diferencia observada Grupo B:", diff_b, "\n")
## Diferencia observada Grupo B: -5
# Función para test de permutaciones
perm_test <- function(before, after, n_perm = 10000) {
obs_diff <- mean(before) - mean(after)
combined <- c(before, after)
n <- length(before)
perm_diffs <- numeric(n_perm)
for (i in 1:n_perm) {
perm <- sample(combined)
perm_before <- perm[1:n]
perm_after <- perm[(n+1):(2*n)]
perm_diffs[i] <- mean(perm_before) - mean(perm_after)
}
p_value <- mean(abs(perm_diffs) >= abs(obs_diff))
list(obs_diff = obs_diff, p_value = p_value, dist = perm_diffs)
}
# Aplicar test
set.seed(123)
res_A <- perm_test(A_antes, A_despues, 10000)
res_B <- perm_test(B_antes, B_despues, 10000)
cat("\nGrupo A → p-valor:", res_A$p_value, "\n")
##
## Grupo A → p-valor: 0.0139
cat("Grupo B → p-valor:", res_B$p_value, "\n")
## Grupo B → p-valor: 0.4496
# Conclusión
if (res_A$p_value < 0.05) {
cat("Conclusión Grupo A: Diferencia significativa antes–después.\n")
} else {
cat("Conclusión Grupo A: No se encontró diferencia significativa.\n")
}
## Conclusión Grupo A: Diferencia significativa antes–después.
if (res_B$p_value < 0.05) {
cat("Conclusión Grupo B: Diferencia significativa antes–después.\n")
} else {
cat("Conclusión Grupo B: No se encontró diferencia significativa.\n")
}
## Conclusión Grupo B: No se encontró diferencia significativa.
set.seed(123)
# Datos
M1 <- c(85, 88, 90, 87, 85)
M2 <- c(78, 82, 80, 77, 79)
M3 <- c(92, 95, 94, 90, 93)
# Medias por grupo
cat("Media M1:", mean(M1), "\n")
## Media M1: 87
cat("Media M2:", mean(M2), "\n")
## Media M2: 79.2
cat("Media M3:", mean(M3), "\n")
## Media M3: 92.8
# Estadístico de prueba
stat_fun <- function(groups) {
data <- unlist(groups)
n <- sapply(groups, length)
means <- sapply(groups, mean)
grand_mean <- mean(data)
sum(n * (means - grand_mean)^2)
}
# Estadístico observado
obs_stat <- stat_fun(list(M1, M2, M3))
# Permutaciones
n_perm <- 10000
all_data <- c(M1, M2, M3)
perm_stats <- numeric(n_perm)
for (i in 1:n_perm) {
perm <- sample(all_data)
g1 <- perm[1:5]
g2 <- perm[6:10]
g3 <- perm[11:15]
perm_stats[i] <- stat_fun(list(g1, g2, g3))
}
# Valor p
p_valor <- mean(perm_stats >= obs_stat)
cat("Estadístico observado:", round(obs_stat, 2), "\n")
## Estadístico observado: 465.73
cat("Valor p:", p_valor, "\n")
## Valor p: 0
# Conclusión
if (p_valor < 0.05) {
cat("Conclusión: Se rechaza H0 → Hay diferencias significativas entre los métodos.\n")
} else {
cat("Conclusión: No se detectaron diferencias significativas entre los métodos.\n")
}
## Conclusión: Se rechaza H0 → Hay diferencias significativas entre los métodos.
# Visualización
hist(perm_stats, breaks = 30, col = "lightblue",
main = "Distribución nula (ANOVA por permutaciones)",
xlab = "Estadístico de prueba")
abline(v = obs_stat, col = "red", lwd = 2)
# Datos
X <- c(45, 50, 55, 60, 65, 70, 75)
Y <- c(55, 60, 62, 68, 70, 75, 80)
# Coeficiente observado
r_obs <- cor(X, Y, method = "pearson")
cat("Coeficiente de correlación observado (r):", round(r_obs, 4), "\n")
## Coeficiente de correlación observado (r): 0.9948
# Permutaciones
set.seed(123)
n_perm <- 10000
r_perm <- numeric(n_perm)
for (i in 1:n_perm) {
Y_perm <- sample(Y) # permuta Y
r_perm[i] <- cor(X, Y_perm) # correlación con Y permutada
}
# p-valor bilateral
p_value <- mean(abs(r_perm) >= abs(r_obs))
cat("Valor p (permutaciones, 2 colas):", p_value, "\n")
## Valor p (permutaciones, 2 colas): 5e-04
# Conclusión a alfa=0.05
alpha <- 0.05
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0. Existe correlación significativa entre X e Y.\n")
} else {
cat("Conclusión: No hay evidencia suficiente para rechazar H0.\n")
}
## Conclusión: Rechazamos H0. Existe correlación significativa entre X e Y.
# Visualización de la distribución nula
hist(r_perm, breaks = 30, col = "lightblue",
main = "Distribución nula de r (permuta de Y)",
xlab = "r permutado")
abline(v = c(-abs(r_obs), abs(r_obs)), col = "red", lwd = 2, lty = 2)
abline(v = r_obs, col = "darkred", lwd = 3)
antes <- c(110, 115, 120, 125, 130)
despues <- c(105, 110, 115, 120, 125)
# Diferencia media observada
d <- antes - despues
d_obs <- mean(d)
cat("Diferencia media observada (antes - después):", d_obs, "\n")
## Diferencia media observada (antes - después): 5
# Permutaciones por flip de signos (equivalente a switchear cada par 50/50)
set.seed(123)
n_perm <- 10000
d_perm <- replicate(n_perm, mean(sample(c(-1, 1), length(d), replace = TRUE) * d))
# p-valor bilateral
p_value <- mean(abs(d_perm) >= abs(d_obs))
cat("Valor p (permuta pareada, 2 colas):", p_value, "\n")
## Valor p (permuta pareada, 2 colas): 0.065
alpha <- 0.05
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0. Hay cambio significativo tras el tratamiento.\n")
} else {
cat("Conclusión: No se rechaza H0. No hay evidencia de cambio significativo.\n")
}
## Conclusión: No se rechaza H0. No hay evidencia de cambio significativo.
# Gráfico
hist(d_perm, breaks = 30, col = "lightblue",
main = "Distribución nula (diferencia media pareada)",
xlab = "d permutada")
abline(v = c(-abs(d_obs), abs(d_obs)), col = "red", lwd = 2, lty = 2)
abline(v = d_obs, col = "darkred", lwd = 3)
set.seed(123) # reproducibilidad
# Datos
grupo1 <- c(85, 90, 88, 92, 87)
grupo2 <- c(78, 80, 82, 79, 81)
# 1) estadística de prueba: diferencia de medianas
mediana_grupo1 <- median(grupo1)
mediana_grupo2 <- median(grupo2)
diferencia_obs <- mediana_grupo1 - mediana_grupo2
# 2) pool y tamaños
datos <- c(grupo1, grupo2)
n1 <- length(grupo1)
# 3) permutaciones
n_perm <- 10000
diferencias_perm <- numeric(n_perm)
for (i in 1:n_perm) {
perm <- sample(datos)
g1 <- perm[1:n1]
g2 <- perm[(n1+1):length(perm)]
diferencias_perm[i] <- median(g1) - median(g2)
}
# 4) p-valor bilateral
p_valor <- mean(abs(diferencias_perm) >= abs(diferencia_obs))
# Resultados
cat("Mediana G1:", mediana_grupo1, " | Mediana G2:", mediana_grupo2, "\n")
## Mediana G1: 88 | Mediana G2: 80
cat("Diferencia observada:", diferencia_obs, "\n")
## Diferencia observada: 8
cat("p-valor (permutaciones):", p_valor, "\n")
## p-valor (permutaciones): 0.0464
# 5) visualización
hist(diferencias_perm, breaks = 30, col = "lightblue",
main = "Distribución nula (test de permutaciones)",
xlab = "Diferencias de medianas")
abline(v = c(-diferencia_obs, diferencia_obs), col = "red", lwd = 2)
# TALLER 3 · Ejercicio 1
# Parámetros
n <- 500
p0 <- 0.04
x_obs <- 25
# Test binomial unilateral (p > 0.04)
p_value <- 1 - pbinom(x_obs - 1, size = n, prob = p0)
p_value
## [1] 0.1522011
# Conclusión
if (p_value < 0.05) {
cat("Conclusión: Rechazamos H0 → la tasa de conversión es significativamente mayor a 4%.\n")
} else {
cat("Conclusión: No hay evidencia estadística de que la tasa de conversión supere el 4%.\n")
}
## Conclusión: No hay evidencia estadística de que la tasa de conversión supere el 4%.
n <- 40
p0 <- 0.75
x_obs <- 26
# Test binomial bilateral
res <- binom.test(x_obs, n, p = p0, alternative = "two.sided")
res
##
## Exact binomial test
##
## data: x_obs and n
## number of successes = 26, number of trials = 40, p-value = 0.1465
## alternative hypothesis: true probability of success is not equal to 0.75
## 95 percent confidence interval:
## 0.4831555 0.7937175
## sample estimates:
## probability of success
## 0.65
# Conclusión
if (res$p.value < 0.05) {
cat("Conclusión: Rechazamos H0 → la tasa de éxito difiere significativamente de 75%.\n")
} else {
cat("Conclusión: No se rechaza H0 → no hay evidencia estadística para cuestionar la tasa del 75%.\n")
}
## Conclusión: No se rechaza H0 → no hay evidencia estadística para cuestionar la tasa del 75%.
result1 <- binom.test(x = 80, n = 150, p = 0.5, alternative = "two.sided")
result1
##
## Exact binomial test
##
## data: 80 and 150
## number of successes = 80, number of trials = 150, p-value = 0.4625
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.4501945 0.6151295
## sample estimates:
## probability of success
## 0.5333333
if (result1$p.value < 0.05) {
cat("Conclusión: Existe preferencia significativa por un sabor (p =", result1$p.value, ").\n")
} else {
cat("Conclusión: No hay evidencia suficiente para afirmar preferencia por el sabor A (p =", result1$p.value, ").\n")
}
## Conclusión: No hay evidencia suficiente para afirmar preferencia por el sabor A (p = 0.4625495 ).
#TALLER 3 · Ejercicio 4
result2 <- binom.test(x = 58, n = 67, p = 0.6, alternative = "greater")
result2
##
## Exact binomial test
##
## data: 58 and 67
## number of successes = 58, number of trials = 67, p-value = 1.953e-06
## alternative hypothesis: true probability of success is greater than 0.6
## 95 percent confidence interval:
## 0.7772988 1.0000000
## sample estimates:
## probability of success
## 0.8656716
if (result2$p.value < 0.05) {
cat("Conclusión: La probabilidad de éxito es significativamente mayor que 0.6 (p =", result2$p.value, ").\n")
} else {
cat("Conclusión: No hay evidencia de que la probabilidad de éxito sea mayor que 0.6 (p =", result2$p.value, ").\n")
}
## Conclusión: La probabilidad de éxito es significativamente mayor que 0.6 (p = 1.953467e-06 ).
#TALLER 3 · Ejercicio 5
# Datos
anios <- 2000:2010
muertes <- c(89, 266, 0, 22, 13, 55, 50, 0, 0, 50, 0)
# Variable binaria: 1 = hubo muertes, 0 = no hubo muertes
exito <- ifelse(muertes == 0, 1, 0)
# Estadísticos descriptivos
data.frame(anios, muertes, exito)
# Gráfico simple
plot(anios, muertes, type="b", pch=19, col="blue",
main="Muertes en accidentes aéreos (EE.UU. 2000–2010)",
xlab="Año", ylab="Número de muertes")
# Prueba de Mann-Kendall sobre las muertes
if(!require(Kendall)) install.packages("Kendall")
library(Kendall)
cat("\n--- Mann-Kendall sobre conteo de muertes ---\n")
##
## --- Mann-Kendall sobre conteo de muertes ---
print(MannKendall(muertes))
## tau = -0.389, 2-sided pvalue =0.12739
cat("\n--- Mann-Kendall sobre variable binaria (cero vs >0) ---\n")
##
## --- Mann-Kendall sobre variable binaria (cero vs >0) ---
print(MannKendall(exito))
## tau = 0.357, 2-sided pvalue =0.2193
# Paquetes solo si los vas a usar para comparar
need_mk <- c("Kendall","trend")
to_install_mk <- setdiff(need_mk, rownames(installed.packages()))
if (length(to_install_mk)) install.packages(to_install_mk, quiet = TRUE)
invisible(lapply(need_mk, library, character.only = TRUE))
# Implementación propia + ejemplo
mk_test <- function(y) {
y <- as.numeric(y); n <- length(y)
S <- 0L
for (i in 1:(n-1)) for (j in (i+1):n) S <- S + sign(y[j] - y[i])
ties <- table(y)
tie_term <- sum(ties * (ties - 1) * (2*ties + 5))
varS <- n*(n-1)*(2*n+5)/18 - tie_term/18
Z <- if (S > 0) (S - 1)/sqrt(varS) else if (S < 0) (S + 1)/sqrt(varS) else 0
p_two_sided <- 2*(1 - pnorm(abs(Z)))
tau <- S / (n*(n-1)/2)
slopes <- c()
for (i in 1:(n-1)) for (j in (i+1):n) slopes <- c(slopes, (y[j]-y[i])/(j-i))
sen_slope <- median(slopes, na.rm = TRUE)
list(n=n,S=S,varS=varS,Z=Z,p_value=p_two_sided,tau=round(tau,4),
sen_slope=sen_slope,
decision=if (p_two_sided<0.05) if (Z>0) "Tendencia ascendente significativa"
else "Tendencia descendente significativa"
else "No hay evidencia de tendencia (α=0.05)")
}
set.seed(1)
y <- c(12,14,13,15,16,18,17,19)
res <- mk_test(y); res
## $n
## [1] 8
##
## $S
## [1] 24
##
## $varS
## [1] 65.33333
##
## $Z
## [1] 2.845512
##
## $p_value
## [1] 0.004434008
##
## $tau
## [1] 0.8571
##
## $sen_slope
## [1] 1
##
## $decision
## [1] "Tendencia ascendente significativa"
# Comparativas rápidas (si se desea)
Kendall::MannKendall(y)
## tau = 0.857, 2-sided pvalue =0.004434
trend::sens.slope(y)
##
## Sen's slope
##
## data: y
## z = 2.8455, n = 8, p-value = 0.004434
## alternative hypothesis: true z is not equal to 0
## 95 percent confidence interval:
## 0.5 1.5
## sample estimates:
## Sen's slope
## 1
# Parámetros del ejercicio
p <- 0.5 # proporción esperada (peor caso)
E <- 0.05 # error máximo tolerado
conf <- 0.99 # nivel de confianza
# Cálculos
alpha <- 1 - conf
z <- qnorm(1 - alpha/2) # valor crítico
n <- (z^2 * p * (1 - p)) / (E^2)
# Resultado redondeado hacia arriba
n_final <- ceiling(n)
n_final
## [1] 664
X <- c(2,4,1,0,4,5,6,7,8,10,12,4)
# Quitamos los iguales a 5
datos <- X[X != 5]
# Contamos los signos
n <- length(datos)
mayores <- sum(datos > 5)
menores <- sum(datos < 5)
cat("n =", n, "| mayores =", mayores, "| menores =", menores, "\n")
## n = 11 | mayores = 5 | menores = 6
# p-valor unilateral (Ha: mediana > 5)
p_valor <- pbinom(mayores - 1, n, 0.5, lower.tail = FALSE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.7255859
if (p_valor < 0.05) {
cat("Conclusión: Rechazamos H0 → la mediana es mayor que 5\n")
} else {
cat("Conclusión: No rechazamos H0 → no hay evidencia suficiente\n")
}
## Conclusión: No rechazamos H0 → no hay evidencia suficiente
n <- 18
k <- 5
# p-valor bilateral
p_valor <- 2 * pbinom(k, n, 0.5)
cat("p-valor:", p_valor, "\n")
## p-valor: 0.09625244
# Valores críticos para alfa = 0.05
qbinom(c(0.025, 0.975), n, 0.5)
## [1] 5 13
# Verificación con binom.test
binom.test(5, 18, p = 0.5, alternative = "two.sided")
##
## Exact binomial test
##
## data: 5 and 18
## number of successes = 5, number of trials = 18, p-value = 0.09625
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.09694921 0.53480197
## sample estimates:
## probability of success
## 0.2777778
X <- c(0,1,2,3,3,3,4,4,4,5,5,6,6,6,7,7,7,8,8,8)
# Eliminar iguales a 5
datos <- X[X != 5]
n <- length(datos)
Tc <- sum(datos > 5)
cat("n efectivo:", n, " | Tc (positivos):", Tc, "\n")
## n efectivo: 18 | Tc (positivos): 9
# p-valor bilateral
p_valor <- 2 * pbinom(Tc, n, 0.5)
cat("p-valor:", p_valor, "\n")
## p-valor: 1.185471
# Valores críticos
qbinom(c(0.025, 0.975), n, 0.5)
## [1] 5 13
# Verificación con binom.test
binom.test(Tc, n, p = 0.5, alternative = "two.sided")
##
## Exact binomial test
##
## data: Tc and n
## number of successes = 9, number of trials = 18, p-value = 1
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.2601906 0.7398094
## sample estimates:
## probability of success
## 0.5
prof <- c(96.4, 96.6, 102.8, 76.4, 93.0,
90.2, 104.2, 82.0, 108.4, 89.8,
104.6, 86.9, 97.4, 84.4, 89.8)
# Gráfico exploratorio
boxplot(prof, horizontal = TRUE, main = "Profundidad oceánica",
xlab = "Metros", col = "lightblue")
abline(v = 93, col = "red", lwd = 2, lty = 2)
# Diferencias contra 93
signos <- prof - 93
signos_util <- signos[signos != 0]
n <- length(signos_util)
x <- sum(signos_util > 0)
cat("n útil:", n, " | positivos:", x, " | negativos:", n - x, "\n")
## n útil: 14 | positivos: 7 | negativos: 7
# Prueba binomial unilateral (H1: mediana < 93)
binom.test(x, n, p = 0.5, alternative = "less")
##
## Exact binomial test
##
## data: x and n
## number of successes = 7, number of trials = 14, p-value = 0.6047
## alternative hypothesis: true probability of success is less than 0.5
## 95 percent confidence interval:
## 0.0000000 0.7364151
## sample estimates:
## probability of success
## 0.5
# Parámetros
n <- 67
exitos <- 58
p0 <- 0.6
# Estadístico Z
z_calc <- (exitos - n * p0) / sqrt(n * p0 * (1 - p0))
cat("Estadístico Z:", round(z_calc, 4), "\n")
## Estadístico Z: 4.4389
# Valor p (cola derecha)
p_value <- pnorm(z_calc, lower.tail = FALSE)
cat("Valor p:", round(p_value, 4), "\n")
## Valor p: 0
# Conclusión
alpha <- 0.05
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0 → Hay evidencia de que p > 0.6\n")
} else {
cat("Conclusión: No rechazamos H0 → No hay evidencia de que p > 0.6\n")
}
## Conclusión: Rechazamos H0 → Hay evidencia de que p > 0.6
# Datos
X <- c(123,234,456,234,256,345,532,45,45,25,40,67,
89,341,22,345,61,789,123,500,450,122,100)
# Resumen estadístico
summary(X)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 22.0 64.0 123.0 232.3 345.0 789.0
# Boxplot
boxplot(X, horizontal = TRUE, col = "lightblue",
main = "Exploración de la muestra",
xlab = "Valores")
# Número de datos
n <- length(X)
# Conteo de signos respecto a 200
exitos <- sum(X < 200) # valores menores a 200
nulos <- sum(X == 200) # valores iguales a 200
n_eff <- n - nulos # tamaño efectivo
cat("n efectivo:", n_eff, "| éxitos (X<200):", exitos, "\n")
## n efectivo: 23 | éxitos (X<200): 12
# Estadístico Z
z_calc <- (exitos - n_eff/2) / sqrt(n_eff/4)
z_calc
## [1] 0.2085144
# p-valor (unilateral, H1: mediana < 200)
p_value <- pnorm(z_calc, lower.tail = TRUE)
p_value
## [1] 0.5825863
# Decisión
alpha <- 0.05
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0 → la mediana es significativamente menor a 200\n")
} else {
cat("Conclusión: No se rechaza H0 → no hay evidencia suficiente para concluir que la mediana sea menor a 200\n")
}
## Conclusión: No se rechaza H0 → no hay evidencia suficiente para concluir que la mediana sea menor a 200
# Cargar datos
data("mtcars")
summary(mtcars$qsec)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 14.50 16.89 17.71 17.85 18.90 22.90
# Boxplot
boxplot(mtcars$qsec, horizontal = TRUE, col = "lightblue",
main = "Tiempo (qsec) en mtcars",
xlab = "Segundos")
abline(v = 16.5, col = "red", lwd = 2, lty = 2) # referencia H0
# Hipótesis: H0: mediana = 16.5
qsec <- mtcars$qsec
# Eliminar empates (exactos a 16.5)
datos <- qsec[qsec != 16.5]
n <- length(datos)
positivos <- sum(datos > 16.5)
negativos <- sum(datos < 16.5)
cat("n efectivo:", n, "\n")
## n efectivo: 32
cat("Positivos:", positivos, " | Negativos:", negativos, "\n")
## Positivos: 26 | Negativos: 6
# Estadístico Z aproximado
z_calc <- (positivos - n/2) / sqrt(n/4)
z_calc
## [1] 3.535534
# p-valor unilateral (Ha: mediana > 16.5)
p_value <- pnorm(z_calc, lower.tail = FALSE)
p_value
## [1] 0.000203476
# Decisión
alpha <- 0.05
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0 → la mediana de qsec es mayor a 16.5\n")
} else {
cat("Conclusión: No rechazamos H0 → no hay evidencia suficiente\n")
}
## Conclusión: Rechazamos H0 → la mediana de qsec es mayor a 16.5
# Datos
crias <- 0:10
freq <- c(5,15,34,30,43,34,32,21,14,5,5)
# Expandir la muestra
datos <- rep(crias, freq)
# Resumen estadístico
length(datos) # tamaño de la muestra
## [1] 238
summary(datos)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 4.000 4.458 6.000 10.000
# Histograma
hist(datos, breaks = 0:10, col = "lightblue",
main = "Número de crías por pareja de liebres",
xlab = "Número de crías")
abline(v = 5, col = "red", lwd = 2, lty = 2) # referencia H0
# Eliminar empates (=5)
datos_util <- datos[datos != 5]
n_eff <- length(datos_util)
positivos <- sum(datos_util > 5)
negativos <- sum(datos_util < 5)
cat("n efectivo:", n_eff, "\n")
## n efectivo: 204
cat("Positivos:", positivos, " | Negativos:", negativos, "\n")
## Positivos: 77 | Negativos: 127
# Estadístico Z
z_calc <- (positivos - n_eff/2) / sqrt(n_eff/4)
z_calc
## [1] -3.5007
# p-valor (unilateral, Ha: mediana > 5)
p_value <- pnorm(z_calc, lower.tail = FALSE)
p_value
## [1] 0.999768
# Decisión
alpha <- 0.10
if (p_value < alpha) {
cat("Conclusión: Rechazamos H0 → la mediana de crías es mayor a 5\n")
} else {
cat("Conclusión: No rechazamos H0 → no hay evidencia suficiente\n")
}
## Conclusión: No rechazamos H0 → no hay evidencia suficiente
#TALLER 5 · Ejercicio 1
n <- 28
antes5 <- rnorm(n, 15, 3)
despues5 <- antes5 + rnorm(n, mean = 0.2, sd = 1)
#TALLER 5 · Ejercicio 2
diffs <- c(-2, 3, 0, 5, -1, 4, -3, 2, -4, 1, 0, -5, 6, -2, 3, -1, 4, 2, -3, 5,
-2, 1, 4, -4, 0, 3, -1, 5, -2, 1)
# 1) Excluir empates (=0) y conteos
diffs_no0 <- diffs[diffs != 0]
n_eff <- length(diffs_no0)
n_pos <- sum(diffs_no0 > 0)
n_neg <- sum(diffs_no0 < 0)
cat("n efectivo:", n_eff, "\n")
## n efectivo: 27
cat("Positivos (después > antes):", n_pos, " | Negativos:", n_neg, "\n\n")
## Positivos (después > antes): 15 | Negativos: 12
# 2) Prueba exacta binomial (dos colas)
bt <- binom.test(n_pos, n_eff, p = 0.5, alternative = "two.sided")
bt
##
## Exact binomial test
##
## data: n_pos and n_eff
## number of successes = 15, number of trials = 27, p-value = 0.7011
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3532642 0.7452012
## sample estimates:
## probability of success
## 0.5555556
# 3) Cálculo manual del p-valor (simetría)
p_colader <- 1 - pbinom(n_pos - 1, n_eff, 0.5) # P(X >= n_pos)
p_two <- 2 * p_colader
cat("\nCálculo manual → p (cola derecha):", round(p_colader, 4),
" | p (bilateral):", round(p_two, 4), "\n")
##
## Cálculo manual → p (cola derecha): 0.3506 | p (bilateral): 0.7011
# 4) Visualización rápida
barplot(c(n_pos, n_neg), names.arg = c("Positivos", "Negativos"),
col = c("steelblue","tomato"),
main = "Conteo de signos (excluyendo empates)",
ylab = "Frecuencia")
abline(h = n_eff/2, lty = 2)
#TALLER 5 · Ejercicio 3
d <- c(2, -1, 3, -4, 5, -2, 0, 1, 4, -3,
2, 5, -6, 1, -2, 3, -1, 2, 4, -5)
# 1) Excluir empates (=0) y contar signos
d_valid <- d[d != 0]
n <- length(d_valid)
pos <- sum(d_valid > 0)
neg <- sum(d_valid < 0)
cat("Pares válidos (n):", n, "\n")
## Pares válidos (n): 19
cat("Positivos:", pos, " | Negativos:", neg, "\n")
## Positivos: 11 | Negativos: 8
# 2) Estadístico T = min(positivos, negativos)
T <- min(pos, neg)
cat("Estadístico T:", T, "\n")
## Estadístico T: 8
# 3) Valor-p exacto (binomial), dos colas
p_value <- 2 * pbinom(T, size = n, prob = 0.5)
cat("Valor p (binomial exacta, 2 colas):", round(p_value, 4), "\n")
## Valor p (binomial exacta, 2 colas): 0.6476
# 4) Verificación con binom.test (equivalente)
bt <- binom.test(x = pos, n = n, p = 0.5, alternative = "two.sided")
bt
##
## Exact binomial test
##
## data: pos and n
## number of successes = 11, number of trials = 19, p-value = 0.6476
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3349978 0.7974786
## sample estimates:
## probability of success
## 0.5789474
# 5) Decisión a alfa = 0.01
alpha <- 0.01
if (p_value < alpha) {
concl <- "Rechazamos H0 → hay diferencia significativa."
} else {
concl <- "No rechazamos H0 → no hay evidencia de diferencia."
}
cat("Conclusión (α = 0.01):", concl, "\n")
## Conclusión (α = 0.01): No rechazamos H0 → no hay evidencia de diferencia.
# 6) (Opcional) Pequeña visualización
barplot(c(pos, neg), names.arg = c("Positivos", "Negativos"),
col = c("steelblue","tomato"),
main = "Conteo de signos (excluyendo empates)",
ylab = "Frecuencia")
abline(h = n/2, lty = 2)
#TALLER 5 · Ejercicio 4
antes <- c(6,7,8,5,7,9,4,6,7,8,5,9,6,8,7,6,5,9,8,7,6,8,7,9,5)
despues <- c(8,7,9,6,8,10,4,7,9,9,6,9,7,8,8,7,6,10,9,8,7,8,8,10,6)
dif <- antes - despues
positivas <- sum(dif > 0)
negativas <- sum(dif < 0)
nulas <- sum(dif == 0)
cat("Positivas:", positivas, " | Negativas:", negativas, " | Nulas:", nulas, "\n")
## Positivas: 0 | Negativas: 20 | Nulas: 5
n_eff <- positivas + negativas
binom.test(x = negativas, n = n_eff, p = 0.5, alternative = "greater")
##
## Exact binomial test
##
## data: negativas and n_eff
## number of successes = 20, number of trials = 20, p-value = 9.537e-07
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
## 0.8608917 1.0000000
## sample estimates:
## probability of success
## 1
#TALLER 6 · Ejercicio 1
# Tabla de contingencia (Antes vs Después)
tabla_crema <- matrix(c(20, 5,
25, 10),
nrow = 2, byrow = TRUE,
dimnames = list("Antes" = c("Mejora", "NoMejora"),
"Después" = c("Mejora", "NoMejora")))
tabla_crema
## Después
## Antes Mejora NoMejora
## Mejora 20 5
## NoMejora 25 10
# Prueba de McNemar
res1 <- mcnemar.test(tabla_crema, correct = TRUE)
res1
##
## McNemar's Chi-squared test with continuity correction
##
## data: tabla_crema
## McNemar's chi-squared = 12.033, df = 1, p-value = 0.0005226
#TALLER 6 · Ejercicio 2
# Matriz de contingencia
tabla_metodos <- matrix(c(15, 8,
10, 7),
nrow = 2,
dimnames = list("Método A" = c("Pasa", "NoPasa"),
"Método B" = c("Pasa", "NoPasa")))
tabla_metodos
## Método B
## Método A Pasa NoPasa
## Pasa 15 10
## NoPasa 8 7
# Prueba de McNemar
res2 <- mcnemar.test(tabla_metodos, correct = TRUE)
res2
##
## McNemar's Chi-squared test with continuity correction
##
## data: tabla_metodos
## McNemar's chi-squared = 0.055556, df = 1, p-value = 0.8137
#TALLER 6 · Ejercicio 3
cat("=== EJERCICIO 3 ===\n")
## === EJERCICIO 3 ===
# Prueba binomial exacta
valor_p_binomial <- binom.test(7, n = 10, p = 0.5, alternative = "two.sided")$p.value
cat("Valor p (prueba binomial):", round(valor_p_binomial, 4), "\n")
## Valor p (prueba binomial): 0.3438
alpha <- 0.05
if (valor_p_binomial < alpha) {
cat("Rechazamos H0: Hay diferencia significativa entre tratamientos\n")
} else {
cat("No rechazamos H0: No hay evidencia de diferencia entre tratamientos\n")
}
## No rechazamos H0: No hay evidencia de diferencia entre tratamientos
#TALLER 6 · Ejercicio 4
cat("=== EJERCICIO 4: COMPARACIÓN McNEMAR vs CHI-CUADRADO ===\n")
## === EJERCICIO 4: COMPARACIÓN McNEMAR vs CHI-CUADRADO ===
set.seed(42)
n <- 100
# Datos iniciales (antes)
antes <- sample(c(0, 1), size = n, replace = TRUE, prob = c(0.4, 0.6))
despues <- antes
# Simular efecto de la campaña
indices_mejora <- sample(which(antes == 0), size = 15, replace = FALSE)
indices_empeora <- sample(which(antes == 1), size = 10, replace = FALSE)
despues[indices_mejora] <- 1
despues[indices_empeora] <- 0
# Tabla de contingencia
tabla <- table(antes, despues)
cat("Tabla de contingencia:\n")
## Tabla de contingencia:
print(tabla)
## despues
## antes 0 1
## 0 31 15
## 1 10 44
# Pruebas estadísticas
cat("\n1. PRUEBA DE McNEMAR (apropiada para datos pareados):\n")
##
## 1. PRUEBA DE McNEMAR (apropiada para datos pareados):
mcnemar_result <- mcnemar.test(tabla)
print(mcnemar_result)
##
## McNemar's Chi-squared test with continuity correction
##
## data: tabla
## McNemar's chi-squared = 0.64, df = 1, p-value = 0.4237
cat("\n2. PRUEBA CHI-CUADRADO (inapropiada - asume independencia):\n")
##
## 2. PRUEBA CHI-CUADRADO (inapropiada - asume independencia):
chi_result <- chisq.test(tabla)
print(chi_result)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla
## X-squared = 22.549, df = 1, p-value = 2.049e-06
# Análisis comparativo
cat("\n=== ANÁLISIS COMPARATIVO ===\n")
##
## === ANÁLISIS COMPARATIVO ===
cat("McNemar valor p:", round(mcnemar_result$p.value, 4), "\n")
## McNemar valor p: 0.4237
cat("Chi-cuadrado valor p:", round(chi_result$p.value, 4), "\n")
## Chi-cuadrado valor p: 0
if (mcnemar_result$p.value < 0.05 & chi_result$p.value >= 0.05) {
cat("Sólo McNemar encuentra significancia (caso esperado)\n")
} else if (mcnemar_result$p.value >= 0.05 & chi_result$p.value < 0.05) {
cat("¡Chi-cuadrado da falso positivo! McNemar es correcto.\n")
} else {
cat("Ambas pruebas coinciden en la conclusión\n")
}
## ¡Chi-cuadrado da falso positivo! McNemar es correcto.
cat("\nConclusión: McNemar es la prueba adecuada para datos pareados pre-post.\n")
##
## Conclusión: McNemar es la prueba adecuada para datos pareados pre-post.
#TALLER 6 · Ejercicio 5
tabla <- matrix(c(22, 4,
12, 15),
nrow = 2, byrow = TRUE,
dimnames = list("Prueba B" = c("Positivo", "Negativo"),
"Prueba A" = c("Positivo", "Negativo")))
tabla
## Prueba A
## Prueba B Positivo Negativo
## Positivo 22 4
## Negativo 12 15
mcnemar.test(tabla, correct = TRUE) # con corrección
##
## McNemar's Chi-squared test with continuity correction
##
## data: tabla
## McNemar's chi-squared = 3.0625, df = 1, p-value = 0.08012
mcnemar.test(tabla, correct = FALSE) # sin corrección
##
## McNemar's Chi-squared test
##
## data: tabla
## McNemar's chi-squared = 4, df = 1, p-value = 0.0455
#TALLER 7 · Ejercicio 1
set.seed(123)
# Simular muestra (n=1000) de N(2,0.3^2)
X <- rnorm(1000, mean = 2, sd = 0.3)
# Comprobar tamaño
length(X)
## [1] 1000
# KS test (parámetros asumidos conocidos)
ks1 <- ks.test(X, "pnorm", mean = 2, sd = 0.3, exact = FALSE)
ks1
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: X
## D = 0.019416, p-value = 0.8452
## alternative hypothesis: two-sided
# Decisión con alpha = 0.01
alpha <- 0.01
cat("KS statistic:", ks1$statistic, "\n")
## KS statistic: 0.01941649
cat("p-value :", ks1$p.value, "\n")
## p-value : 0.8452154
if (ks1$p.value < alpha) {
cat("Decisión: Rechazar H0 al nivel", alpha, "\n")
} else {
cat("Decisión: No rechazar H0 al nivel", alpha, "\n")
}
## Decisión: No rechazar H0 al nivel 0.01
#TALLER 7 · Ejercicio 2
set.seed(123)
# Simular muestra (n=1000) de Gamma(24, 0.1)
X <- rgamma(1000, shape = 24, scale = 0.1)
# KS test contra Gamma
ks2 <- ks.test(X, "pgamma", shape = 24, scale = 0.1, exact = FALSE)
ks2
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: X
## D = 0.039549, p-value = 0.08759
## alternative hypothesis: two-sided
# Decisión con alpha = 0.01
alpha <- 0.01
cat("KS statistic:", ks2$statistic, "\n")
## KS statistic: 0.03954865
cat("p-value :", ks2$p.value, "\n")
## p-value : 0.08758658
if (ks2$p.value < alpha) {
cat("Decisión: Rechazar H0 al nivel", alpha, "\n")
} else {
cat("Decisión: No rechazar H0 al nivel", alpha, "\n")
}
## Decisión: No rechazar H0 al nivel 0.01
#TALLER 7 · Ejercicio 3
cat("=== EJERCICIO 3: TEST DE BONDAD DE AJUSTE ===\n")
## === EJERCICIO 3: TEST DE BONDAD DE AJUSTE ===
x <- c(0.621, 0.503, 0.203, 0.477, 0.710, 0.581, 0.329, 0.480, 0.544, 0.382)
# Test Kolmogorov-Smirnov contra U(0,1)
ks_unif <- ks.test(x, "punif", 0, 1)
cat("Estadístico D:", ks_unif$statistic, "\n")
## Estadístico D: 0.29
cat("Valor p:", ks_unif$p.value, "\n")
## Valor p: 0.3067349
if (ks_unif$p.value < 0.05) {
cat("CONCLUSIÓN: Rechazamos H0 → No es uniforme\n")
} else {
cat("CONCLUSIÓN: No rechazamos H0 → Consistente con U(0,1)\n")
}
## CONCLUSIÓN: No rechazamos H0 → Consistente con U(0,1)
#TALLER 7 · Ejercicio 4
cat("=== EJERCICIO 4: VERIFICACIÓN TEOREMA DE ADICIÓN ===\n")
## === EJERCICIO 4: VERIFICACIÓN TEOREMA DE ADICIÓN ===
set.seed(123)
n <- 1000
# Generar muestras
muestras <- list(
rnorm(n, 0, 1), # N(0,1)
rnorm(n, 2, sqrt(6)), # N(2,6)
rnorm(n, 4, sqrt(3)), # N(4,3)
rnorm(n, 8, sqrt(2)), # N(8,2)
rnorm(n, 4, sqrt(6)) # N(4,6)
)
# Calcular suma de variables
y <- rowSums(do.call(cbind, muestras))
# Parámetros teóricos de la suma
media_teorica <- sum(c(0, 2, 4, 8, 4))
varianza_teorica <- sum(c(1, 6, 3, 2, 6))
cat("Parámetros teóricos - Media:", media_teorica,
" | Varianza:", varianza_teorica, "\n")
## Parámetros teóricos - Media: 18 | Varianza: 18
cat("Parámetros muestrales - Media:", mean(y),
" | Varianza:", var(y), "\n")
## Parámetros muestrales - Media: 17.99356 | Varianza: 19.8648
# 1. Test de Shapiro-Wilk
cat("\n1. Test de Shapiro-Wilk para normalidad:\n")
##
## 1. Test de Shapiro-Wilk para normalidad:
shapiro_test <- shapiro.test(y)
print(shapiro_test)
##
## Shapiro-Wilk normality test
##
## data: y
## W = 0.99893, p-value = 0.8375
# 2. Test KS contra N(mu, sigma^2)
cat("\n2. Test de Kolmogorov-Smirnov contra N(", media_teorica, ", ",
sqrt(varianza_teorica), "):\n", sep = "")
##
## 2. Test de Kolmogorov-Smirnov contra N(18, 4.242641):
y_est <- (y - media_teorica) / sqrt(varianza_teorica)
ks_test <- ks.test(y_est, "pnorm")
print(ks_test)
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: y_est
## D = 0.020514, p-value = 0.794
## alternative hypothesis: two-sided
# Conclusión final
cat("\n=== CONCLUSIÓN FINAL ===\n")
##
## === CONCLUSIÓN FINAL ===
if (shapiro_test$p.value > 0.05 & ks_test$p.value > 0.05) {
cat("Se verifica el teorema de adición: Y ~ N(", media_teorica, ", ",
varianza_teorica, ")\n", sep = "")
} else {
cat("No se verifica el teorema de adición\n")
}
## Se verifica el teorema de adición: Y ~ N(18, 18)
#TALLER 7 · Ejercicio 5
set.seed(123) # reproducibilidad
n <- 500 # tamaño de muestra
k <- 100 # grados de libertad
# 1. Generar la muestra de chi-cuadrado con k=100
# (suma de cuadrados de normales estándar)
X <- replicate(n, sum(rnorm(k)^2))
# 2. Test KS de bondad de ajuste
ks_result <- ks.test(X, "pchisq", df = k)
# Resultado
ks_result
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: X
## D = 0.040604, p-value = 0.3819
## alternative hypothesis: two-sided
#TALLER 8 · Ejercicio 1
# Datos
diametros <- c(25.8, 39.9, 19.2, 41.4, 22.4,
37.2, 15.5, 33.1, 18.7, 20.4,
19.9, 20.5, 32.4, 16.6, 27.1,
22.5, 36.5, 25.2, 38.7, 40.1)
# Librería para test de Lilliefors
if (!require(nortest)) install.packages("nortest")
library(nortest)
# Test de Lilliefors
lillie.test(diametros)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: diametros
## D = 0.16997, p-value = 0.1357
# 1. Media y desviación estándar muestral
media <- mean(diametros)
desv <- sd(diametros)
media; desv
## [1] 27.655
## [1] 8.84608
# 2. Estandarizar
z <- (diametros - media) / desv
# 3. Ordenar y calcular F empírica vs teórica
z_ord <- sort(z)
n <- length(z_ord)
F_teorica <- pnorm(z_ord) # CDF normal teórica
F_empirica <- (1:n)/n # CDF empírica
# 4. Estadístico KS
D <- max(abs(F_empirica - F_teorica))
D
## [1] 0.1699672
# 5. Valor crítico KS (α = 0.05)
D_crit <- 1.36 / sqrt(n)
D_crit
## [1] 0.3041052
if (D > D_crit) {
cat("Se rechaza H0: los datos no provienen de una normal\n")
} else {
cat("No se rechaza H0: no hay evidencia contra la normalidad\n")
}
## No se rechaza H0: no hay evidencia contra la normalidad
# Puntajes z
z_scores <- scale(diametros)
# Índice y valor más extremo
indice_max <- which.max(abs(z_scores))
diam_extremo <- diametros[indice_max]
cat("El diámetro más alejado de la normalidad es:", diam_extremo, "\n")
## El diámetro más alejado de la normalidad es: 41.4
#TALLER 8 · Ejercicio 2
# ================================
# A. Generar muestra
# ================================
set.seed(123)
n <- 1000
mu <- 4
sigma2 <- 13
sigma <- sqrt(sigma2)
x <- rnorm(n, mean = mu, sd = sigma)
# ================================
# B. Media y varianza estimadas
# ================================
cat("=== PASO B: ESTIMACIÓN DE PARÁMETROS ===\n")
## === PASO B: ESTIMACIÓN DE PARÁMETROS ===
media_est <- mean(x)
var_est <- var(x)
cat("Media teórica:", mu, "\n")
## Media teórica: 4
cat("Media estimada:", round(media_est, 4), "\n")
## Media estimada: 4.0581
cat("Varianza teórica:", sigma2, "\n")
## Varianza teórica: 13
cat("Varianza estimada:", round(var_est, 4), "\n\n")
## Varianza estimada: 12.785
# ================================
# C. Estandarizar
# ================================
cat("=== PASO C: ESTANDARIZACIÓN ===\n")
## === PASO C: ESTANDARIZACIÓN ===
z <- (x - media_est) / sd(x)
cat("Muestra estandarizada Z calculada\n\n")
## Muestra estandarizada Z calculada
# ================================
# D. Gráfico comparativo
# ================================
cat("=== PASO D: GRÁFICO DE COMPARACIÓN ===\n")
## === PASO D: GRÁFICO DE COMPARACIÓN ===
plot(ecdf(z), main = "Función de distribución: Empírica vs Teórica",
xlab = "z", ylab = "Probabilidad acumulada", col = "blue")
curve(pnorm(x), add = TRUE, col = "red", lwd = 2)
legend("topleft", legend = c("Empírica S(z)", "Teórica Φ(z)"),
col = c("blue", "red"), lty = 1, lwd = 2)
# ================================
# E. Máxima distancia (KS)
# ================================
cat("=== PASO E: MÁXIMA DISTANCIA ===\n")
## === PASO E: MÁXIMA DISTANCIA ===
ks_result <- ks.test(z, "pnorm")
d_max <- ks_result$statistic
cat("Estadístico D (máxima distancia):", round(d_max, 4), "\n\n")
## Estadístico D (máxima distancia): 0.015
# ================================
# F. Validación con tabla KS
# ================================
cat("=== PASO F: VALIDACIÓN CON TABLA KS (α = 0.01) ===\n")
## === PASO F: VALIDACIÓN CON TABLA KS (α = 0.01) ===
alpha <- 0.01
d_critico <- 1.628 / sqrt(n) # aproximación para KS
cat("Valor crítico:", round(d_critico, 4), "\n")
## Valor crítico: 0.0515
cat("Estadístico D:", round(d_max, 4), "\n")
## Estadístico D: 0.015
if (d_max < d_critico) {
cat("Decisión: No rechazar H0 - Hay bondad de ajuste\n")
} else {
cat("Decisión: Rechazar H0 - No hay bondad de ajuste\n")
}
## Decisión: No rechazar H0 - Hay bondad de ajuste
# ================================
# G. Test de Lilliefors
# ================================
cat("\n=== PASO G: TEST DE LILLIEFORS ===\n")
##
## === PASO G: TEST DE LILLIEFORS ===
if (!require(nortest)) install.packages("nortest")
library(nortest)
lillie_test <- lillie.test(z)
cat("Estadístico D:", lillie_test$statistic, "\n")
## Estadístico D: 0.01496273
cat("Valor p:", lillie_test$p.value, "\n")
## Valor p: 0.8484461
if (lillie_test$p.value > alpha) {
cat("Decisión: No rechazar H0 - Los datos son normales\n")
} else {
cat("Decisión: Rechazar H0 - Los datos no son normales\n")
}
## Decisión: No rechazar H0 - Los datos son normales
# ================================
# Información adicional
# ================================
cat("\n=== INFORMACIÓN ADICIONAL ===\n")
##
## === INFORMACIÓN ADICIONAL ===
cat("H0: Los datos siguen una distribución normal\n")
## H0: Los datos siguen una distribución normal
cat("H1: Los datos NO siguen una distribución normal\n")
## H1: Los datos NO siguen una distribución normal
cat("Nivel de significancia: α = 0.01\n")
## Nivel de significancia: α = 0.01
#TALLER 8 · Ejercicio 3
set.seed(123)
x <- rexp(30, rate = 1/5) # datos simulados
# Estimador de lambda
lambda_hat <- 1 / mean(x)
# CDF empírica vs CDF exponencial estimada
Fn <- ecdf(x)
F0 <- pexp(sort(x), rate = lambda_hat)
# Estadístico D
D <- max(abs(F0 - Fn(sort(x))))
D
## [1] 0.1049877
#TALLER 8 · Ejercicio 4
x <- c(100,200,300,400,500,600,700,800,900)
freq <- c(8,25,72,228,325,292,83,31,11)
datos <- rep(x, freq)
media <- mean(datos); desv <- sd(datos)
cat("N:", length(datos), " | Media:", round(media,2), " | Desv.Est.:", round(desv,2), "\n")
## N: 1075 | Media: 510.79 | Desv.Est.: 134.24
# Shapiro (si n <= 5000)
if (length(datos) <= 5000) shapiro.test(datos)
##
## Shapiro-Wilk normality test
##
## data: datos
## W = 0.94661, p-value < 2.2e-16
# Kolmogorov-Smirnov contra N(media, sd)
ks.test(datos, "pnorm", mean = media, sd = desv)
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: datos
## D = 0.1582, p-value < 2.2e-16
## alternative hypothesis: two-sided
# Anderson-Darling
nortest::ad.test(datos)
##
## Anderson-Darling normality test
##
## data: datos
## A = 26.929, p-value < 2.2e-16
# gráfico
hist(datos, breaks = 20, col = "lightblue", freq = FALSE,
main = "Histograma con curva normal ajustada",
xlab = "X")
curve(dnorm(x, mean = media, sd = desv), add = TRUE, lwd = 2, col = "red")