La estadística es, en principio, una ciencia auxiliar. Los procedimientos estadísticos deben ayudar, por lo tanto, a encontrar, verificar y/o rechazar, si es el caso, ciertos aspectos, relaciones, reglas, propiedades, etc., que pueden ser relevantes para algún problema de interés.
Así, el trabajo estadístico de un estadístico:
Primer paso. Empieza con un problema práctico de alguna aplicación. Se identificarán ciertas variables de interés para tal problema, considerando una escala adecuada en la cual se deban o puedan medir sus valores: de forma nominal (con etiquetas), ordinal (con orden) o métrica (con distancia); de forma cualitativa (con codificación por símbolos o números) o cuantitativa (con números reales). A veces se distingue, además, entre “variables independientes (\(X\))” (representando causas, por ejemplo) y “variables dependientes (\(Y\))” (representando efectos, por ejemplo).
Segundo paso. Consiste en traducir el problema a un modelo probabilístico en el cual las variables de interés se representan por variables aleatorias. Para muchos problemas con variables cualitativas, la elección de una distribución binomial o multinomial es natural. Para otros problemas con variables cuantitativas, puede ser útil y adecuado escoger una distribución normal, por ejemplo. En todo caso, los parámetros \(\theta\) de la distribución deben reflejar los aspectos relevantes de las variables del problema.
Muchas veces será necesario asegurarse de que el modelo realmente sea el adecuado, usando diferentes métodos en los pasos posteriores, que se esbozan brevemente a continuación. Puede resultar conveniente cambiar o modificar el modelo escogido inicialmente.
Si \(Y\) es la variable aleatoria que representa el problema, su función de densidad o función de distribución de probabilidad \(f_Y(y, \theta)\) se denomina modelo probabilístico.
El trabajo propiamente estadístico empieza con el tercer paso. Este consiste en observar \(n\) veces la variable del problema (una sola, por simplicidad), representada por la variable \(Y\) del modelo probabilístico, por lo general de manera independiente.
Así se obtiene una muestra \(Y = (Y_1, Y_2, ..., Y_n)\) de tamaño \(n\), cuya distribución (conjunta) es determinada, según el segundo paso, por \(f(y, \theta)\); que es la función de densidad o de probabilidad en la observación \(y = (y_1, y_2, ..., y_n)\), fijando \(\theta\); y que es la función de verosimilitud en el parámetro \(\theta\), fijando \(y\). Se llama a la muestra junto con su distribución modelo estadístico.
Por lo general, no se trabaja con toda la muestra \(Y\), sino con funciones \(S(Y)\), llamadas estadísticas, que consisten en una reducción de la dimensión de la observación.
Las Estadísticas Suficientes son aquellas que permiten una reducción de los datos sin pérdida de información.
Los análisis constituyen los núcleos del trabajo estadístico y pueden clasificarse bajo los tres conceptos siguientes:
Una estimación del parámetro \(\theta\) (puntual) es una estadística \(\hat{\theta}(Y)\) cuyo valor \(\hat{\theta}(y)\), evaluado con base en una observación concreta \(y\), debe estimar el valor (no conocido) del parámetro \(\theta\).
Un intervalo de confianza, en cambio, es una estimación que define un intervalo (aleatorio) \(IC(Y)\) alrededor de \(\hat{\theta}(Y)\) que contiene con alta probabilidad, \(1 - \alpha\), al parámetro \(\theta\) (considerado unidimensional, por simplicidad). En este sentido, con base en un dato concreto \(y\), el valor de \(IC(Y)\) es un intervalo real \(IC(y) = \hat{\theta}(y) \pm D(y)\) que da una idea sobre la precisión de la estimación puntual.
Hacer una prueba de hipótesis. \(H_0\) contra una alternativa \(H_1\), sobre el parámetro \(\theta\), es un concepto, en principio, muy diferente de los conceptos de estimación, pero hay una relación muy estrecha entre \((1 - \alpha)\) intervalo de confianza y la región de tales datos posibles \(y\) para los cuales se aceptaría \(H_0\), siendo \(\alpha\) el error (de tipo I) de rechazar \(H_0\) equivocadamente. Esto permitirá construir pruebas de hipótesis a partir de intervalos de confianza y viceversa.
\[ \text{Problema} \Rightarrow \text{Modelo} \Rightarrow \text{Datos} \Rightarrow \text{Análisis} \]
El esquema anterior debe mantenerse en mente para estudiar y aprender los conceptos fundamentales de Estadística.
El esquema no es de una sola dirección; debe volverse siempre a los pasos anteriores, comprobando, verificando, modificando y, finalmente, interpretando los resultados de los análisis en términos del problema original.
En esta sección se tratarán funciones de las variables \(Y_1, Y_2, ..., Y_n\) observadas en una muestra aleatoria seleccionada de una población bajo estudio. El supuesto básico es que las variables son independientes y tienen una distribución común. Con frecuencia se usan funciones de las variables aleatorias observadas en una muestra para estimar o para tomar decisiones con respecto a parámetros poblacionales desconocidos.
Por ejemplo, si se desea estimar la media de una población \(\mu\), y de ella se toma una muestra aleatoria de \(n\) observaciones \(Y_1, Y_2, ..., Y_n\), se usa el estadístico
\[ \bar{Y} = \frac{1}{n} \sum_{i=1}^n Y_i \]
\[ \bar{y} = \frac{1}{n} \sum_{i=1}^n y_i. \]
Definición.
Un estadístico \(S(Y) = S(Y_1, Y_2, ..., Y_n)\) es una función de las variables aleatorias que se pueden observar en una muestra y de las constantes conocidas.
Los estadísticos se utilizan para hacer inferencias (estimaciones o decisiones) con respecto a parámetros poblacionales desconocidos.
Como el estadístico \(S(Y)\) también es una variable aleatoria, tiene una distribución de probabilidad que llamaremos distribución muestral o simplemente muestreo aleatorio.
Teorema. Sea \(Y_1, Y_2, ..., Y_n\) una muestra aleatoria de tamaño \(n\) de una distribución normal con media \(\mu\) y varianza \(\sigma^2\). Entonces \(\bar{Y} = \frac{1}{n} \sum_{i=1}^n Y_i\) tiene una distribución normal con media \(\mu\) y varianza \(\frac{\sigma^2}{n}\).
Muestreo de medias. Una embotelladora puede regularse de tal manera que llene un promedio de \(\mu\) onzas por botella. Se ha observado que la cantidad de contenido que suministra la máquina presenta una distribución normal con \(\sigma = 1.0\) onza. De la producción de la máquina un cierto día, se obtiene una muestra de \(n = 9\) botellas llenas (todas fueron llenadas con las mismas posiciones del control operativo) y se miden las onzas del contenido de cada una.
Solución.
Paso 1. Problema de aplicación.
Paso 2. (variable de interés) Sea \(Y :=\) Contenido (en onzas) de una botella.
Paso 3. (modelo probabilístico) \(Y \sim N(\mu, \sigma^2)\), \(\sigma^2 = 1\).
Paso 4. (modelo estadístico) sea \(Y = (Y_1, Y_2, ..., Y_9)\) una muestra aleatoria. Por un teorema anterior, \(\bar{Y}\) tiene una distribución normal con media \(\mu\) y varianza \(\sigma_{\bar{Y}}^2 = \frac{\sigma^2}{n} = \frac{1}{9}\).
\[ P(|\bar{Y} - \mu| \leq 0.3) = P(-0.3 \leq (\bar{Y} - \mu) \leq 0.3) \\ = P\left(-\frac{0.3}{\sigma / \sqrt{n}} \leq \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}} \leq \frac{0.3}{\sigma / \sqrt{n}}\right)\\ = P\left(-\frac{0.3}{1 / \sqrt{9}} \leq Z \leq \frac{0.3}{1 / \sqrt{9}}\right) = P(-0.9 \leq Z \leq 0.9) = 0.6318 \]
\[ P(|\bar{Y} - \mu| \leq 0.3) = P(-0.3 \leq (\bar{Y} - \mu) \leq 0.3) = P\left(-\frac{0.3}{\sigma / \sqrt{n}} \leq \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}} \leq \frac{0.3}{\sigma / \sqrt{n}}\right) = 0.95 \]
\[ \Rightarrow \frac{0.3}{1 / \sqrt{n}} = 1.96 \Rightarrow 0.3 \sqrt{n} = 1.96 \Rightarrow n = 42.68 \]
# Parámetros dados
sigma <- 1.0 # Desviación estándar poblacional
n <- 9 # Tamaño de la muestra
delta <- 0.3 # Margen de error (0.3 onzas)
mu <- 0 # Media real (asumimos μ = 0 para la gráfica)
# Error estándar de la media
se <- sigma / sqrt(n)
# Límites del área a sombrear
lower_limit <- mu - delta
upper_limit <- mu + delta
# Crear una secuencia de valores para la distribución normal
x <- seq(mu - 4 * se, mu + 4 * se, length.out = 1000)
# Calcular la densidad de la distribución normal
y <- dnorm(x, mean = mu, sd = se)
# Graficar la distribución normal
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Media muestral (Ȳ)", ylab = "Densidad",
main = "Distribución normal de la media muestral -Julio Hurtado")
# Sombrear el área entre lower_limit y upper_limit
x_shade <- seq(lower_limit, upper_limit, length.out = 1000)
y_shade <- dnorm(x_shade, mean = mu, sd = se)
polygon(c(lower_limit, x_shade, upper_limit), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir líneas verticales para los límites
abline(v = lower_limit, col = "red", lty = 2, lwd = 2)
abline(v = upper_limit, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución normal", "Área sombreada (P(|Ȳ - μ| ≤ 0.3))"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
# Parámetros dados
sigma <- 1.0 # Desviación estándar poblacional
n <- 9 # Tamaño de la muestra (inciso a)
delta <- 0.3 # Margen de error (0.3 onzas)
prob <- 0.95 # Probabilidad deseada (inciso b)
# (a) Probabilidad de que la media muestral esté a lo más 0.3 onzas de μ
z_score <- delta / (sigma / sqrt(n)) # Cálculo del puntaje Z
prob_a <- pnorm(z_score) - pnorm(-z_score) # Probabilidad usando la distribución normal
# Mostrar resultado del inciso (a)
print(paste("(a) La probabilidad de que la media muestral esté a lo más 0.3 onzas de μ es:", round(prob_a, 4)))
## [1] "(a) La probabilidad de que la media muestral esté a lo más 0.3 onzas de μ es: 0.6319"
# (b) Tamaño de la muestra para que la media esté a lo más 0.3 onzas de μ con probabilidad 0.95
z_alpha <- qnorm((1 + prob) / 2) # Valor crítico de Z para una probabilidad de 0.95
n_b <- ceiling((z_alpha * sigma / delta)^2) # Cálculo del tamaño de la muestra
# Mostrar resultado del inciso (b)
print(paste("(b) El tamaño de la muestra necesario para que la media esté a lo más 0.3 onzas de μ con una probabilidad de 0.95 es:", n_b))
## [1] "(b) El tamaño de la muestra necesario para que la media esté a lo más 0.3 onzas de μ con una probabilidad de 0.95 es: 43"
\[ \sum_{i=1}^n Z_i^2 = \sum_{i=1}^n \frac{(Y_i - \mu)^2}{\sigma^2} \]
tiene una distribución \(\chi^2\) con \(n\) grados de libertad.
Solución.
Por el teorema anterior, \(\sum_{i=1}^6 Z_i^2
\sim \chi^2(6)\). Haciendo uso de la tabla para \(\chi^2\), se tiene que \(P\left(\sum_{i=1}^6 Z_i^2 \leq 12.5916\right) =
0.95\), así que \(b =
12.5916\).
# Parámetros dados
n <- 6 # Tamaño de la muestra (grados de libertad)
prob <- 0.95 # Probabilidad deseada
# Encontrar el valor crítico b usando la distribución chi-cuadrado
b <- qchisq(prob, df = n)
# Mostrar el valor de b
print(paste("El valor de b tal que P(∑Z_i² ≤ b) = 0.95 es:", round(b, 4)))
## [1] "El valor de b tal que P(∑Z_i² ≤ b) = 0.95 es: 12.5916"
# Crear una secuencia de valores para la distribución chi-cuadrado
x <- seq(0, 20, length.out = 1000)
# Calcular la densidad de la distribución chi-cuadrado
y <- dchisq(x, df = n)
# Graficar la distribución chi-cuadrado
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Valores de ∑Z_i²", ylab = "Densidad",
main = "Distribución chi-cuadrado con 6 grados de libertad")
# Sombrear el área correspondiente a P(∑Z_i² ≤ b)
x_shade <- seq(0, b, length.out = 1000)
y_shade <- dchisq(x_shade, df = n)
polygon(c(0, x_shade, b), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir una línea vertical en el valor crítico b
abline(v = b, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución chi-cuadrado", "Área sombreada (P(∑Zi²≤ b) = 0.95)"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
\[ \frac{1}{\sigma^2} \sum_{i=1}^n (Y_i - \bar{Y})^2 = \frac{(n-1)S^2}{\sigma^2} \]
tiene una distribución \(\chi^2\) con \(n-1\) grados de libertad. \(\bar{Y}\) y \(S^2\) son también variables aleatorias independientes.**
Solución.
+ Por el teorema anterior, \(\frac{(n-1)S^2}{\sigma^2} \sim
\chi^2_{(n-1)}\). Obsérvese que
\[ P(b_1 \leq S^2 \leq b_2) = P\left(\frac{(n-1)b_1}{\sigma^2} \leq \frac{(n-1)S^2}{\sigma^2} \leq \frac{(n-1)b_2}{\sigma^2}\right)\\ = P\left(\frac{(10-1)b_1}{1} \leq \chi^2(9) \leq \frac{(10-1)b_2}{1}\right)\\ = P(9b_1 \leq \chi^2(9) \leq 9b_2) = 0.90 \]
Usando la tabla para \(\chi^2(9)\), se tiene que \(P(3.325 \leq \chi^2(9) \leq 16.919) = 0.90\), luego \(b_1 = \frac{3.325}{9} = 0.369\) y \(b_2 = \frac{16.919}{9} = 1.880\).
# Parámetros dados
n <- 10 # Tamaño de la muestra
sigma <- 1.0 # Desviación estándar poblacional
alpha <- 0.10 # Nivel de significancia (1 - 0.90)
# Grados de libertad
df <- n - 1
# Encontrar los valores críticos de la distribución chi-cuadrado
b1 <- qchisq(alpha / 2, df) * sigma^2 / df
b2 <- qchisq(1 - alpha / 2, df) * sigma^2 / df
# Mostrar los resultados
print(paste("El valor de b1 es:", round(b1, 4)))
## [1] "El valor de b1 es: 0.3695"
print(paste("El valor de b2 es:", round(b2, 4)))
## [1] "El valor de b2 es: 1.8799"
# Crear una secuencia de valores para la distribución chi-cuadrado
x <- seq(0, 30, length.out = 1000)
# Calcular la densidad de la distribución chi-cuadrado
y <- dchisq(x, df = df)
# Graficar la distribución chi-cuadrado
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Varianza muestral (S²)", ylab = "Densidad",
main = "Distribución chi-cuadrado con 9 grados de libertad")
# Sombrear el área correspondiente a P(b1 ≤ S² ≤ b2)
x_shade <- seq(b1, b2, length.out = 1000)
y_shade <- dchisq(x_shade, df = df)
polygon(c(b1, x_shade, b2), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir líneas verticales para los límites
abline(v = b1, col = "red", lty = 2, lwd = 2)
abline(v = b2, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución chi-cuadrado", "Área sombreada (P(b1 ≤ S² ≤ b2) = 0.90)"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
\[ T = \frac{Z}{\sqrt{\chi^2 / \nu}} \]
###Solución.
\[ P(|\bar{Y} - \mu| \leq 2S / \sqrt{n}) = P\left(-2 \leq \frac{\bar{Y} - \mu}{S / \sqrt{n}} \leq 2\right) = P(-2 \leq T_{(5)} \leq 2) = 0.8980. \]
\[ P(|\bar{Y} - \mu| \leq 2\sigma / \sqrt{n}) = P\left(-2 \leq \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}} \leq 2\right) = P(-2 \leq Z \leq 2) = 0.9544. \] ### 08.3. Usando R
# Parámetros dados
n <- 6 # Tamaño de la muestra
k <- 2 # Factor de escala (2 en este caso)
# Grados de libertad
df <- n - 1
# Calcular la probabilidad usando la distribución t de Student
prob <- pt(k, df = df) - pt(-k, df = df)
# Mostrar la probabilidad
print(paste("La probabilidad de que Ȳ esté a lo más a 2S/√n de μ es:", round(prob, 4)))
## [1] "La probabilidad de que Ȳ esté a lo más a 2S/√n de μ es: 0.8981"
# Crear una secuencia de valores para la distribución t de Student
x <- seq(-4, 4, length.out = 1000)
# Calcular la densidad de la distribución t de Student
y <- dt(x, df = df)
# Graficar la distribución t de Student
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Valores de t", ylab = "Densidad",
main = "Distribución t de Student con 5 grados de libertad")
# Sombrear el área correspondiente a P(-2 ≤ t ≤ 2)
x_shade <- seq(-k, k, length.out = 1000)
y_shade <- dt(x_shade, df = df)
polygon(c(-k, x_shade, k), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir líneas verticales para los límites
abline(v = -k, col = "red", lty = 2, lwd = 2)
abline(v = k, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución t de Student", "Área sombreada (P(-2 ≤ t ≤ 2))"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
\[ F = \frac{\chi_1^2 / \nu_1}{\chi_2^2 / \nu_2} \]
\[ P\left(\frac{S_1^2}{S_2^2} \leq b\right) = 0.95 \]
Si tomamos dos muestras independientes de tamaño \(n_1 = 6\) y \(n_2 = 10\) de dos poblaciones normales con la misma varianza poblacional, encuentre el número \(b\) tal que:
\[ P\left(\frac{S_1^2}{S_2^2} \leq b\right) = 0.95, \]
donde \(S_1^2\) y \(S_2^2\) son las varianzas muestrales de las dos muestras.
Distribución de la razón de varianzas:
La razón de varianzas muestrales \(\frac{S_1^2}{S_2^2}\) sigue una distribución \(F\) con \((n_1 - 1)\) y \((n_2 - 1)\) grados de libertad. Es decir:
\[ F = \frac{S_1^2}{S_2^2} \sim F_{(n_1 - 1, n_2 - 1)}. \]
En este caso, \(n_1 = 6\) y \(n_2 = 10\), por lo que los grados de libertad son \((5, 9)\).
Valor crítico \(b\):
Buscamos el valor \(b\) tal que:
\[ P\left(F \leq b\right) = 0.95. \]
Esto corresponde al percentil \(0.95\) de la distribución \(F\) con \((5, 9)\) grados de libertad.
Uso de la tabla \(F\):
Para encontrar \(b\), consultamos la tabla de la distribución \(F\) con \((5, 9)\) grados de libertad y buscamos el valor correspondiente al percentil \(0.95\).
Resultado:
Por lo tanto, el número \(b\) que satisface la condición es:
\[ b = 3.48. \]
El valor de \(b\) tal que \(P\left(\frac{S_1^2}{S_2^2} \leq b\right) = 0.95\) es:
\[ \boxed{b = 3.48} \]
# Parámetros dados
n1 <- 6 # Tamaño de la primera muestra
n2 <- 10 # Tamaño de la segunda muestra
prob <- 0.95 # Probabilidad deseada
# Grados de libertad
df1 <- n1 - 1 # Grados de libertad para S1²
df2 <- n2 - 1 # Grados de libertad para S2²
# Encontrar el valor crítico b usando la distribución F
b <- qf(prob, df1 = df1, df2 = df2)
# Mostrar el valor de b
print(paste("El valor de b tal que P(S1²/S2² ≤ b) = 0.95 es:", round(b, 4)))
## [1] "El valor de b tal que P(S1²/S2² ≤ b) = 0.95 es: 3.4817"
# Crear una secuencia de valores para la distribución F
x <- seq(0, 5, length.out = 1000)
# Calcular la densidad de la distribución F
y <- df(x, df1 = df1, df2 = df2)
# Graficar la distribución F
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Valores de F = S1²/S2²", ylab = "Densidad",
main = "Distribución F con (5, 9) grados de libertad")
# Sombrear el área correspondiente a P(F ≤ b)
x_shade <- seq(0, b, length.out = 1000)
y_shade <- df(x_shade, df1 = df1, df2 = df2)
polygon(c(0, x_shade, b), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir una línea vertical en el valor crítico b
abline(v = b, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución F", "Área sombreada (P(F ≤ b) = 0.95)"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
# Parámetros dados
n1 <- 6 # Tamaño de la primera muestra
n2 <- 10 # Tamaño de la segunda muestra
prob <- 0.95 # Probabilidad deseada
# Grados de libertad
df1 <- n1 - 1 # Grados de libertad para S1²
df2 <- n2 - 1 # Grados de libertad para S2²
# Encontrar el valor crítico b usando la distribución F
b <- qf(prob, df1 = df1, df2 = df2)
# Mostrar el valor de b
print(paste("El valor de b tal que P(S1²/S2² ≤ b) = 0.95 es:", round(b, 4)))
## [1] "El valor de b tal que P(S1²/S2² ≤ b) = 0.95 es: 3.4817"
# Crear una secuencia de valores para la distribución F
x <- seq(0, 5, length.out = 1000)
# Calcular la densidad de la distribución F
y <- df(x, df1 = df1, df2 = df2)
# Graficar la distribución F
plot(x, y, type = "l", lwd = 2, col = "blue",
xlab = "Valores de F = S1²/S2²", ylab = "Densidad",
main = "Distribución F con (5, 9) grados de libertad")
# Sombrear el área correspondiente a P(F ≤ b)
x_shade <- seq(0, b, length.out = 1000)
y_shade <- df(x_shade, df1 = df1, df2 = df2)
polygon(c(0, x_shade, b), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir una línea vertical en el valor crítico b
abline(v = b, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución F", "Área sombreada (P(F ≤ b) = 0.95)"),
col = c("blue", "lightblue"), lwd = 2, lty = c(1, NA), fill = c(NA, "lightblue"), border = NA)
\[ \bar{Y} = \frac{1}{n} \sum_{i=1}^n Y_i. \]
\[ U_n = \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}}, \]
\[ U_n \xrightarrow{d} N(0, 1). \]
# Parámetros
set.seed(123) # Para reproducibilidad
mu <- 1 # Media de la distribución exponencial
n_sim <- 1000 # Número de simulaciones
sample_sizes <- c(5, 30, 100) # Tamaños de muestra
# Función para simular medias muestrales
simulate_sample_means <- function(n) {
sapply(1:n_sim, function(i) mean(rexp(n, rate = 1/mu)))
}
# Crear gráficos
par(mfrow = c(1, 3)) # 1 fila, 3 columnas
for (n in sample_sizes) {
sample_means <- simulate_sample_means(n)
hist(sample_means, breaks = 30, freq = FALSE, main = paste("n =", n),
xlab = "Media muestral", col = "lightblue", border = "white")
curve(dnorm(x, mean = mu, sd = mu/sqrt(n)), add = TRUE, col = "red", lwd = 2)
}
\[ X_i = \begin{cases} 1, & \text{si el resultado de la } i\text{-ésima prueba es éxito} \\ 0, & \text{si es fracaso} \end{cases} \]
y \(X_i\) (\(i = 1, 2, \dots, n\)) son independientes. Por consiguiente, cuando \(n\) es grande, por el TLC, la proporción de éxitos en la muestra:
\[ \frac{Y}{n} = \frac{1}{n} \sum_{i=1}^n X_i = \bar{X} \]
tendrá aproximadamente una distribución normal con media \(\mu = E(\bar{X}) = p\) y varianza \(V(\bar{X}) = \frac{p(1-p)}{n}\).
###Problema:
+ El candidato A considera que puede ganar una elección en una
ciudad si obtiene al menos 55% de los votos en el distrito I. Además,
supone que alrededor del 50% de los votantes en la ciudad están a su
favor. Si \(n = 100\) votantes vienen a
votar en el distrito I, ¿cuál es la probabilidad de que el candidato A
pueda ganar la elección?
Solución:
Variable de interés:
\(Y =\) número de votantes en el
distrito I a favor del candidato A.
Modelo probabilístico:
\(Y \sim B(n, p)\), donde \(p = 0.5\) y \(n =
100\).
Modelo estadístico:
\(Y = (X_1, X_2, \dots, X_{100})\),
donde:
\[ X_i = \begin{cases} 1, & \text{si el } i\text{-ésimo votante vota por el candidato A} \\ 0, & \text{otro caso} \end{cases} \]
Respuesta a la pregunta:
Calculamos la probabilidad de que la proporción de votos a favor sea al
menos 55%:
\[ P\left( \frac{Y}{n} \geq 0.55 \right) = P\left( \frac{\frac{Y}{n} - p}{\sqrt{p(1-p)/n}} \geq \frac{0.55 - 0.5}{\sqrt{0.5(0.5)/100}} \right) \approx P(Z \geq 1) = 0.1587 \]
Los resultados de las pruebas finales de todos los alumnos de último año de las preparatorias de cierto estado tienen una media de 60 y una varianza de 64. Una generación específica de cierta preparatoria de \(n = 100\) alumnos tuvo una media de 58. ¿Puede afirmarse que esta preparatoria sea inferior?
Variable de interés:
\(Y =\) resultado en la prueba final de
un alumno de último año.
Modelo probabilístico:
\(Y \sim f_Y(y, \theta)\), donde \(\theta = (\mu, \sigma^2) = (60,
64)\).
Modelo estadístico:
\(Y = (Y_1, Y_2, \dots, Y_{100})\). El
estadístico de interés es \(\bar{Y} \approx
N(\mu, \sigma^2 / n)\).
Respuesta a la pregunta:
Para determinar si esta preparatoria es inferior, calculamos la
probabilidad \(P(\bar{Y} \leq
58)\):
\[ P(\bar{Y} \leq 58) = P\left( \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}} \leq \frac{58 - 60}{8 / \sqrt{100}} \right) \approx P(Z \leq -2.5) = 0.0062 \]
# Parámetros dados
mu_poblacion <- 60 # Media poblacional
var_poblacion <- 64 # Varianza poblacional
n <- 100 # Tamaño de la muestra
media_muestral <- 58 # Media muestral
# Error estándar de la media
se <- sqrt(var_poblacion / n)
# Estadístico de prueba Z
z <- (media_muestral - mu_poblacion) / se
# Valor p (prueba de una cola, cola inferior)
p_valor <- pnorm(z)
# Mostrar resultados
print(paste("Estadístico de prueba Z:", round(z, 4)))
## [1] "Estadístico de prueba Z: -2.5"
print(paste("Valor p:", round(p_valor, 4)))
## [1] "Valor p: 0.0062"
# Conclusión
alpha <- 0.05 # Nivel de significancia
if (p_valor < alpha) {
print("Rechazamos la hipótesis nula: La preparatoria es inferior.")
} else {
print("No rechazamos la hipótesis nula: No hay evidencia suficiente para afirmar que la preparatoria es inferior.")
}
## [1] "Rechazamos la hipótesis nula: La preparatoria es inferior."
# Gráfica de la distribución normal estándar
x <- seq(-4, 4, length.out = 1000) # Rango de valores para Z
y <- dnorm(x) # Densidad de la distribución normal estándar
# Crear la gráfica
plot(x, y, type = "l", lwd = 2, col = "blue", xlab = "Z", ylab = "Densidad",
main = "Distribución normal estándar y región de rechazo")
# Sombrear la región correspondiente al valor p (cola inferior)
x_shade <- seq(-4, z, length.out = 1000)
y_shade <- dnorm(x_shade)
polygon(c(-4, x_shade, z), c(0, y_shade, 0), col = "lightblue", border = NA)
# Añadir una línea vertical en el estadístico de prueba Z
abline(v = z, col = "red", lty = 2, lwd = 2)
# Añadir leyenda
legend("topright", legend = c("Distribución normal", "Región de rechazo (Valor p)", "Estadístico Z"),
col = c("blue", "lightblue", "red"), lwd = 2, lty = c(1, NA, 2), fill = c(NA, "lightblue", NA))
# Cargar librería para gráficos
#install.packages("ggplot2")
library(ggplot2)
# Parámetros
media_poblacion <- 60
desviacion_estandar <- 8 / sqrt(100) # Error estándar
nivel_significancia <- 0.05
valor_critico <- qnorm(nivel_significancia) # Valor crítico Z
# Crear un rango de valores para la distribución
x <- seq(media_poblacion - 4 * desviacion_estandar,
media_poblacion + 4 * desviacion_estandar,
length.out = 1000)
y <- dnorm(x, mean = media_poblacion, sd = desviacion_estandar)
# Crear un data frame para ggplot
datos <- data.frame(x = x, y = y)
# Gráfico
ggplot(datos, aes(x = x, y = y)) +
geom_line(color = "blue", size = 1) + # Curva de la distribución
geom_area(data = subset(datos, x <= media_poblacion + valor_critico * desviacion_estandar),
aes(x = x, y = y),
fill = "red", alpha = 0.5) + # Región de rechazo
geom_vline(xintercept = media_poblacion + valor_critico * desviacion_estandar,
color = "black", linetype = "dashed", size = 1) + # Línea del valor crítico
annotate("text", x = media_poblacion + valor_critico * desviacion_estandar,
y = 0.1, label = "Z crítico = -1.645",
hjust = 1.2, color = "black") + # Etiqueta del valor crítico
labs(title = "Región de rechazo para prueba de una cola (cola izquierda)",
x = "Media muestral",
y = "Densidad") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Solución:
Variable de interés:
\(Y =\) tiempo (en minutos) de espera
de un cliente para pasar a una caja registradora.
Modelo probabilístico:
\(Y \sim f_Y(y, \theta)\), donde \(\theta = (\mu, \sigma^2) = (1.5,
1.0)\).
Modelo estadístico:
\(Y = (Y_1, Y_2, \dots, Y_{100})\),
donde \(Y_i =\) tiempo de espera del
cliente \(i\).
Respuesta a la pregunta:
Calculamos la probabilidad de que el tiempo total de espera para 100
clientes sea menor o igual a 120 minutos:
\[ P\left( \sum_{i=1}^{100} Y_i \leq 120 \right) = P\left( \frac{1}{100} \sum_{i=1}^{100} Y_i \leq \frac{120}{100} \right) = P(\bar{Y} \leq 1.20) \]
Aplicando el TLC:
\[ P(\bar{Y} \leq 1.20) = P\left( \frac{\bar{Y} - \mu}{\sigma / \sqrt{n}} \leq \frac{1.20 - 1.5}{1.0 / \sqrt{100}} \right) \approx P(Z \leq -3.0) = 0.0013 \]
Esta pequeña probabilidad (0.13%) indica que es prácticamente imposible atender a 100 clientes en menos de 2 horas.
\[ \bar{Y} = \frac{1}{n} \sum_{i=1}^n Y_i \]
Se dice que la estadística \(\hat{\theta} = H(X_1, X_2, \dots, X_n)\) es un estimador insesgado del parámetro \(\theta\) si:
\[ E(\hat{\theta}) = \theta \]
Es decir, si los valores del estimador se centran alrededor del parámetro en cuestión. En caso contrario, se dice que es sesgado.
En inferencia estadística, los estimadores puntuales insesgados más utilizados son:
Parámetro objetivo: \(\theta\) | Tamaño | Estimador: \(\hat{\theta}\) | \(E(\hat{\theta})\) | \(V(\hat{\theta})\) |
---|---|---|---|---|
\(\mu\) | \(n\) | \(\bar{Y}\) | \(\mu\) | \(\frac{\sigma^2}{n}\) |
\(p\) | \(n\) | \(\hat{p} = \frac{Y}{n}\) | \(p\) | \(\frac{pq}{n}\) |
\(\mu_1 - \mu_2\) | \(n_1\) y \(n_2\) | \(\bar{Y}_1 - \bar{Y}_2\) | \(\mu_1 - \mu_2\) | \(\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}\) |
\(p_1 - p_2\) | \(n_1\) y \(n_2\) | \(\hat{p}_1 - \hat{p}_2\) | \(p_1 - p_2\) | \(\frac{p_1 q_1}{n_1} + \frac{p_2 q_2}{n_2}\) |
Sea \(Y_1, Y_2, \dots, Y_n\) una muestra aleatoria con \(E(Y_i) = \mu\) y \(V(Y_i) = \sigma^2\). Demuestre que:
Solución:
Paso 1: Expresamos \((Y_i - \bar{Y})^2\) como: \[ (Y_i - \bar{Y})^2 = Y_i^2 - 2Y_i \bar{Y} + \bar{Y}^2 \]
Paso 2: Sumamos sobre todas las observaciones: \[ \sum_{i=1}^n (Y_i - \bar{Y})^2 = \sum_{i=1}^n Y_i^2 - 2n \bar{Y}^2 + n \bar{Y}^2 = \sum_{i=1}^n Y_i^2 - n \bar{Y}^2 \]
Paso 3: Calculamos la esperanza: \[ E\left( \sum_{i=1}^n (Y_i - \bar{Y})^2 \right) = E\left( \sum_{i=1}^n Y_i^2 - n \bar{Y}^2 \right) = \sum_{i=1}^n E(Y_i^2) - n E(\bar{Y}^2) \]
Paso 4: Recordamos que: \[ E(Y_i^2) = \sigma^2 + \mu^2 \quad \text{y} \quad E(\bar{Y}^2) = \frac{\sigma^2}{n} + \mu^2 \]
Paso 5: Sustituimos: \[ E\left( \sum_{i=1}^n (Y_i - \bar{Y})^2 \right) = n(\sigma^2 + \mu^2) - n\left( \frac{\sigma^2}{n} + \mu^2 \right) = (n-1)\sigma^2 \]
Paso 6: Por tanto: \[ E(S^{*2}) = \frac{1}{n} E\left( \sum_{i=1}^n (Y_i - \bar{Y})^2 \right) = \frac{(n-1)\sigma^2}{n} \] Esto muestra que \(S^{*2}\) es sesgado.
Paso 7: Para \(S^2\): \[ E(S^2) = \frac{1}{n-1} E\left( \sum_{i=1}^n (Y_i - \bar{Y})^2 \right) = \sigma^2 \] Por tanto, \(S^2\) es insesgado.
Es razonable esperar que un buen estimador de un parámetro \(\theta\) sea cada vez mejor conforme crece el tamaño de la muestra y la información se vuelve más completa. La distribución de muestreo de un buen estimador se encuentra cada vez más concentrada alrededor del parámetro \(\theta\). Si un estimador es consistente, converge en probabilidad al valor del parámetro que está intentando estimar conforme el tamaño de la muestra crece. Esto implica que la varianza de un estimador consistente disminuye conforme \(n\) crece.
Se dice que \(\hat{\theta}\) es un estimador consistente de \(\theta\) si:
\[ \lim_{n \to \infty} \hat{\theta} = \theta \]
\[ \lim_{n \to \infty} V(\hat{\theta}) = 0 \]
El hecho de que un estimador sea centrado no garantiza que sus realizaciones caigan cerca del valor del parámetro; hace falta además que tenga la varianza pequeña. La varianza de un estimador insesgado es la cantidad más importante para decidir qué tan bueno es el estimador para estimar el parámetro \(\theta\).
Sean \(\hat{\theta}_1\) y \(\hat{\theta}_2\) cualesquiera dos estimadores insesgados de \(\theta\). Se dice que \(\hat{\theta}_1\) es un estimador más eficiente de \(\theta\) que \(\hat{\theta}_2\) si:
\[ V(\hat{\theta}_1) \leq V(\hat{\theta}_2) \]
\[ e = \frac{V(\hat{\theta}_1)}{V(\hat{\theta}_2)} \]
\[ \epsilon = |\hat{\theta} - \theta| \]
\[ P(\epsilon < b) = P(\theta - b < \hat{\theta} < \theta + b) \]
Solución:
Utilizamos el estimador \(\hat{p} = \frac{Y}{n}\) para estimar \(p\). Así, la estimación de \(p\) es:
\[ \hat{p} = \frac{560}{1000} = 0.56 \]
La distribución de probabilidad de \(\hat{p}\) se aproxima con bastante exactitud mediante la distribución normal para muestras tan grandes como \(n = 1000\). Entonces, cuando \(b = 2\sigma_{\hat{p}}\), se tiene que \(P(\epsilon < b) \approx 0.95\).
Calculamos \(b\):
\[ b = 2\sigma_{\hat{p}} = 2\sqrt{\frac{pq}{n}} \]
Como no conocemos \(p\), usamos \(\hat{p}\) para aproximar:
\[ b \approx 2\sqrt{\frac{(0.56)(0.44)}{1000}} = 0.03 \]
Este resultado significa que la probabilidad de que el error de estimación sea menor que 0.03 es aproximadamente 0.95.
Supongamos que tenemos una población con: - Media poblacional desconocida: \(\mu\). - Desviación estándar poblacional conocida: \(\sigma\). - Una muestra aleatoria de tamaño \(n\) con media muestral \(\overline{X}\).
Queremos construir un intervalo de confianza para \(\mu\) con un nivel de confianza \((1 - \alpha) \times 100\%\).
Por el Teorema del Límite Central, si \(n\) es suficientemente grande o la población es normal, la media muestral \(\overline{X}\) sigue una distribución normal: \[ \overline{X} \sim \mathcal{N}\left(\mu, \frac{\sigma}{\sqrt{n}}\right). \] Esto implica que: \[ Z = \frac{\overline{X} - \mu}{\sigma / \sqrt{n}} \sim \mathcal{N}(0, 1). \]
Queremos un intervalo simétrico alrededor de \(\mu\) tal que: \[ P\left(-z_{\alpha/2} \leq Z \leq z_{\alpha/2}\right) = 1 - \alpha, \] donde: - \(z_{\alpha/2}\) es el valor crítico de la distribución normal estándar que deja \(\alpha/2\) en la cola superior. - \(1 - \alpha\) es el nivel de confianza (ej. 95% si \(\alpha = 0.05\)).
Reescribimos la desigualdad en términos de \(\mu\): \[ -z_{\alpha/2} \leq \frac{\overline{X} - \mu}{\sigma / \sqrt{n}} \leq z_{\alpha/2}. \] Multiplicamos por \(\sigma / \sqrt{n}\): \[ -z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \leq \overline{X} - \mu \leq z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}. \] Restamos \(\overline{X}\): \[ -\overline{X} - z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \leq -\mu \leq -\overline{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}. \] Multiplicamos por \(-1\) (cambiando el sentido de las desigualdades): \[ \overline{X} - z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \leq \mu \leq \overline{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}. \]
El intervalo de confianza para \(\mu\) al \((1 - \alpha) \times 100\%\) es: \[ \boxed{ \left( \overline{X} - z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}, \quad \overline{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \right) } \]
media_muestral <- 50
sigma <- 5
n <- 30
alpha <- 0.05
z_critico <- qnorm(1 - alpha / 2) # ≈ 1.96
margen_error <- z_critico * sigma / sqrt(n)
intervalo <- c(media_muestral - margen_error, media_muestral + margen_error)
cat("Intervalo de confianza al 95%:", intervalo, "\n")
## Intervalo de confianza al 95%: 48.21081 51.78919
Resultado:
El intervalo es \((48.21, 51.79)\).
Con un 95% de confianza, la media poblacional \(\mu\) está entre \(\overline{X} \pm E\).
- Precisión: A mayor \(n\) o menor \(\sigma\), el margen de error \(E\) disminuye.
- Validez: Requiere que \(\sigma\) sea conocido y la muestra sea
aleatoria.
Solución:
En este caso, nos interesa el parámetro \(\theta = \mu\). Por lo tanto, \(\hat{\theta} = \bar{Y}\).
Como la varianza poblacional \(\sigma^2\) se desconoce, usamos \(S^2\) para estimarla:
\[ \sigma_{\bar{Y}} \approx \frac{S}{\sqrt{n}} = \frac{16}{8} = 2 \]
El intervalo de confianza para \(\mu\) es:
\[ \text{IC}(\mu) = \bar{Y} \pm z_{\alpha/2} \cdot \sigma_{\bar{Y}} \approx 33 \pm 1.645 \cdot 2 = (29.71, 36.29) \]
Interpretación: Hay una certeza del 90% de que el tiempo medio real de atención de los clientes en un supermercado local se encuentra entre 29.71 y 36.29 minutos.
Cuando tenemos:
Muestra pequeña (\(n < 30\))
Desviación poblacional desconocida (\(\sigma\))
Población aproximadamente normal
Usamos la distribución t de Student para construir el intervalo.
El estadístico de prueba es:
\[ T = \frac{\bar{X} - \mu}{s/\sqrt{n}} \sim t_{n-1} \]
donde: - \(\bar{X}\) = media muestral - \(s\) = desviación estándar muestral - \(n\) = tamaño muestral - \(t_{n-1}\) = distribución t con \(n-1\) grados de libertad
Para un nivel de confianza \((1-\alpha)\times 100\%\), el intervalo es:
\[ P\left(-t_{\alpha/2,n-1} \leq \frac{\bar{X}-\mu}{s/\sqrt{n}} \leq t_{\alpha/2,n-1}\right) = 1-\alpha \]
Despejando \(\mu\):
\[ \bar{X} - t_{\alpha/2,n-1}\frac{s}{\sqrt{n}} \leq \mu \leq \bar{X} + t_{\alpha/2,n-1}\frac{s}{\sqrt{n}} \]
El intervalo de confianza es:
\[ \boxed{IC_{1-\alpha}(\mu) = \left(\bar{X} - t_{\alpha/2,n-1}\frac{s}{\sqrt{n}},\ \bar{X} + t_{\alpha/2,n-1}\frac{s}{\sqrt{n}}\right)} \]
# Datos
x_bar <- 50 # media muestral
s <- 5 # desviación estándar muestral
n <- 10 # tamaño muestral
alpha <- 0.05 # nivel de significancia
# Cálculo
t_crit <- qt(1 - alpha/2, df = n-1)
margen <- t_crit * s / sqrt(n)
IC <- c(x_bar - margen, x_bar + margen)
cat("Intervalo al 95% de confianza: (", IC[1], ", ", IC[2], ")\n", sep = "")
## Intervalo al 95% de confianza: (46.42322, 53.57678)
Caso | Distribución | Fórmula |
---|---|---|
\(\sigma\) conocido | Normal (\(Z\)) | \(\bar{X} \pm z_{\alpha/2}\frac{\sigma}{\sqrt{n}}\) |
\(\sigma\) desconocido | \(t\)-Student | \(\bar{X} \pm t_{\alpha/2,n-1}\frac{s}{\sqrt{n}}\) |
Solución:
Calculamos la media y la desviación estándar de la muestra:
\[ \bar{Y} = 2959, \quad S = 39.1 \]
Para \(n = 8\) y \(\alpha = 0.05\), el valor crítico de \(t\) es \(t_{0.025, 7} = 2.365\).
El intervalo de confianza es:
\[ \text{IC}(\mu) = 2959 \pm 2.365 \cdot \frac{39.1}{\sqrt{8}} = 2959 \pm 32.7 \]
Interpretación: El intervalo de confianza para la media real de las velocidades es \((2926.3, 2991.7)\) pies por segundo.
Sea: - \(p\) = proporción poblacional desconocida - \(\hat{p} = \frac{X}{n}\) = proporción muestral (estimador de \(p\)) - \(n\) = tamaño muestral - \(X\) = número de éxitos en la muestra
Queremos construir un intervalo de confianza \((1-\alpha)\times 100\%\) para \(p\).
Para \(n\) grande (usando el TLC), la proporción muestral sigue aproximadamente:
\[ \hat{p} \sim N\left(p, \sqrt{\frac{p(1-p)}{n}}\right) \]
Estandarizando:
\[ Z = \frac{\hat{p}-p}{\sqrt{\frac{p(1-p)}{n}}} \sim N(0,1) \]
Queremos encontrar \(p\) tal que:
\[ P\left(-z_{\alpha/2} \leq \frac{\hat{p}-p}{\sqrt{\frac{p(1-p)}{n}}} \leq z_{\alpha/2}\right) = 1-\alpha \]
Despejando \(p\):
\[ \hat{p} - z_{\alpha/2}\sqrt{\frac{p(1-p)}{n}} \leq p \leq \hat{p} + z_{\alpha/2}\sqrt{\frac{p(1-p)}{n}} \]
Como \(p\) es desconocido, aproximamos \(\sqrt{\frac{p(1-p)}{n}}\) con \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\):
\[ \boxed{IC_{1-\alpha}(p) = \left(\hat{p} - z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}},\ \hat{p} + z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\right)} \]
# Datos
x <- 45 # número de éxitos
n <- 100 # tamaño muestral
alpha <- 0.05
# Cálculos
p_hat <- x/n
z <- qnorm(1 - alpha/2)
margen <- z * sqrt(p_hat*(1-p_hat)/n)
IC <- c(p_hat - margen, p_hat + margen)
cat("Intervalo al 95% de confianza para p: (",
round(IC[1],4), ", ", round(IC[2],4), ")\n", sep="")
## Intervalo al 95% de confianza para p: (0.3525, 0.5475)
Cuando no se tiene información previa, se usa \(p=0.5\) para obtener el intervalo más conservador:
\[ \boxed{IC_{1-\alpha}(p) = \left(\hat{p} - z_{\alpha/2}\sqrt{\frac{0.25}{n}},\ \hat{p} + z_{\alpha/2}\sqrt{\frac{0.25}{n}}\right)} \]
Cuando \(n\) es pequeño, se recomienda la corrección de continuidad de Yates:
\[ \hat{p}_{corr} = \frac{X + 0.5z_{\alpha/2}^2}{n + z_{\alpha/2}^2} \]
\[ n_{efectivo} = n + z_{\alpha/2}^2 \]
Y el intervalo se calcula con estos valores ajustados.
Método | Fórmula | Cuando usar |
---|---|---|
Estándar | \(\hat{p} \pm z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\) | \(n\hat{p} \geq 5\) y \(n(1-\hat{p}) \geq 5\) |
Conservador | \(\hat{p} \pm z_{\alpha/2}\sqrt{\frac{0.25}{n}}\) | Cuando no se tiene información previa |
Corrección | \(\frac{X + 0.5z^2}{n + z^2} \pm z\sqrt{\frac{\hat{p}(1-\hat{p}) + z^2/4n}{n}}\) | Muestras pequeñas |
A continuación presento los casos principales para construir intervalos de confianza para la diferencia de medias poblacionales \(\mu_1 - \mu_2\):
Fórmula: \[ \boxed{IC_{1-\alpha}(\mu_1 - \mu_2) = (\bar{X}_1 - \bar{X}_2) \pm z_{\alpha/2}\sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}} \]
Supuestos: - Poblaciones normales o \(n_1, n_2 \geq 30\) (por TLC) - Muestras independientes - Varianzas poblacionales conocidas
Fórmula: \[ \boxed{IC_{1-\alpha}(\mu_1 - \mu_2) = (\bar{X}_1 - \bar{X}_2) \pm t_{\alpha/2, n_1+n_2-2}\cdot s_p\sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} \] donde \(s_p^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1+n_2-2}\) es la varianza combinada.
Supuestos: - Poblaciones aproximadamente normales - Muestras independientes - Varianzas homogéneas (verificable con test F)
Problema:
Se compararon dos métodos de entrenamiento para empleados en una
fábrica. Los tiempos de montaje (en minutos) para cada grupo fueron:
Estime la diferencia real de las medias \((\mu_1 - \mu_2)\) con un coeficiente de confianza de 0.95. Suponga que los tiempos de montaje tienen aproximadamente una distribución normal y que las varianzas son aproximadamente iguales para los dos métodos.
Solución:
Cálculo de las medias y varianzas muestrales:
Cálculo de la varianza combinada \(S_p^2\): \[ S_p^2 = \frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2} = \frac{(9-1)195.56 + (9-1)160.22}{9 + 9 - 2} = 22.24 \]
Cálculo del intervalo de confianza para \(\mu_1 - \mu_2\):
Interpretación:
El intervalo de confianza para la diferencia de medias es \((-1.05, 8.37)\). Este intervalo incluye
tanto valores positivos como negativos, lo que indica que no hay
evidencia estadística significativa para afirmar que haya una diferencia
entre ambos procedimientos.
Fórmula (aproximación de Welch): \[ \boxed{IC_{1-\alpha}(\mu_1 - \mu_2) = (\bar{X}_1 - \bar{X}_2) \pm t_{\alpha/2, \nu}\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}} \] con grados de libertad \(\nu\) aproximados por: \[ \nu = \frac{\left(\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}\right)^2}{\frac{(s_1^2/n_1)^2}{n_1-1} + \frac{(s_2^2/n_2)^2}{n_2-1}} \]
Supuestos: - Poblaciones aproximadamente normales - Muestras independientes - Varianzas heterogéneas
Fórmula: \[ \boxed{IC_{1-\alpha}(\mu_D) = \bar{D} \pm t_{\alpha/2, n-1}\frac{s_D}{\sqrt{n}}} \] donde \(D_i = X_{1i} - X_{2i}\) son las diferencias pareadas.
Supuestos: - Diferencias normalmente distribuidas - Observaciones apareadas/dependientes
Caso | Varianzas | Muestras | Fórmula Clave | Grados Libertad |
---|---|---|---|---|
1 | Conocidas | Independientes | \(z\sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}\) | - |
2 | Iguales | Independientes | \(t s_p\sqrt{\frac{1}{n_1} + \frac{1}{n_2}}\) | \(n_1+n_2-2\) |
3 | Diferentes | Independientes | \(t\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}\) | \(\nu\) (Welch) |
4 | - | Pareadas | \(t \frac{s_D}{\sqrt{n}}\) | \(n-1\) |
Contexto:
Comparación del rendimiento de 2 máquinas. Se conocen las varianzas
históricas: - Máquina 1: \(\sigma_1^2 =
4\), \(n_1 = 30\), \(\bar{X}_1 = 100\) unidades/hora - Máquina
2: \(\sigma_2^2 = 9\), \(n_2 = 35\), \(\bar{X}_2 = 98\) unidades/hora - Nivel de
confianza: 95%
Cálculo en R:
# Parámetros
sigma1 <- 2 # sqrt(4)
sigma2 <- 3 # sqrt(9)
n1 <- 30; xbar1 <- 100
n2 <- 35; xbar2 <- 98
alpha <- 0.05
# Valor crítico
z <- qnorm(1 - alpha/2)
# Margen de error
margen <- z * sqrt(sigma1^2/n1 + sigma2^2/n2)
# Intervalo
IC <- c((xbar1 - xbar2) - margen, (xbar1 - xbar2) + margen)
cat("IC 95% para diferencia de medias (varianzas conocidas): [",
round(IC[1], 2), ", ", round(IC[2], 2), "]\n", sep = "")
## IC 95% para diferencia de medias (varianzas conocidas): [0.78, 3.22]
Contexto:
Comparación de calificaciones en 2 grupos de estudiantes (misma prueba):
- Grupo A: \(n_1 = 20\), \(\bar{X}_1 = 78\), \(s_1 = 5\) - Grupo B: \(n_2 = 25\), \(\bar{X}_2 = 75\), \(s_2 = 6\) - Test F confirma varianzas
iguales (\(p = 0.45\)) - Nivel de
confianza: 99%
Cálculo en R:
# Datos
n1 <- 20; xbar1 <- 78; s1 <- 5
n2 <- 25; xbar2 <- 75; s2 <- 6
alpha <- 0.01
# Varianza combinada
sp <- sqrt(((n1-1)*s1^2 + (n2-1)*s2^2)/(n1 + n2 - 2))
# Valor crítico t
t <- qt(1 - alpha/2, df = n1 + n2 - 2)
# Margen de error
margen <- t * sp * sqrt(1/n1 + 1/n2)
# Intervalo
IC <- c((xbar1 - xbar2) - margen, (xbar1 - xbar2) + margen)
cat("IC 99% para diferencia de medias (varianzas iguales): [",
round(IC[1], 2), ", ", round(IC[2], 2), "]\n", sep = "")
## IC 99% para diferencia de medias (varianzas iguales): [-1.51, 7.51]
Contexto:
Tiempos de respuesta de 2 algoritmos: - Algoritmo X: \(n_1 = 15\), \(\bar{X}_1 = 120\) ms, \(s_1 = 25\) ms - Algoritmo Y: \(n_2 = 20\), \(\bar{X}_2 = 110\) ms, \(s_2 = 15\) ms - Test F rechaza igualdad de
varianzas (\(p = 0.02\)) - Nivel de
confianza: 90%
Cálculo en R:
# Datos
n1 <- 15; xbar1 <- 120; s1 <- 25
n2 <- 20; xbar2 <- 110; s2 <- 15
alpha <- 0.10
# Grados de libertad (Welch-Satterthwaite)
nu <- (s1^2/n1 + s2^2/n2)^2 /
((s1^2/n1)^2/(n1-1) + (s2^2/n2)^2/(n2-1))
# Valor crítico t
t <- qt(1 - alpha/2, df = nu)
# Margen de error
margen <- t * sqrt(s1^2/n1 + s2^2/n2)
# Intervalo
IC <- c((xbar1 - xbar2) - margen, (xbar1 - xbar2) + margen)
cat("IC 90% para diferencia de medias (Welch): [",
round(IC[1], 2), ", ", round(IC[2], 2), "]\n", sep = "")
## IC 90% para diferencia de medias (Welch): [-2.51, 22.51]
Contexto:
Presión arterial antes/después de un tratamiento (10 pacientes):
Paciente | Antes | Después | Diferencia |
---|---|---|---|
1 | 140 | 132 | -8 |
… | … | … | … |
10 | 135 | 128 | -7 |
Cálculo en R:
# Datos
n <- 10
D_bar <- -6.5
s_D <- 2.5
alpha <- 0.05
# Valor crítico t
t <- qt(1 - alpha/2, df = n-1)
# Margen de error
margen <- t * s_D / sqrt(n)
# Intervalo
IC <- c(D_bar - margen, D_bar + margen)
cat("IC 95% para diferencia pareada: [",
round(IC[1], 2), ", ", round(IC[2], 2), "]\n", sep = "")
## IC 95% para diferencia pareada: [-8.29, -4.71]
\[ \left( \frac{s_1^2}{s_2^2} \cdot \frac{1}{F_{\alpha/2, n_1-1, n_2-1}}, \frac{s_1^2}{s_2^2} \cdot F_{\alpha/2, n_2-1, n_1-1} \right) \]
Donde: - \(F_{\alpha/2, n_1-1, n_2-1}\) es el valor crítico superior de la distribución F con \(n_1-1\) grados de libertad en el numerador y \(n_2-1\) grados de libertad en el denominador - \(F_{\alpha/2, n_2-1, n_1-1}\) es el valor crítico superior con los grados de libertad invertidos
Tenemos los siguientes datos muestrales: - Desviación estándar muestra 1 (\(s_1\)): 5.2 - Desviación estándar muestra 2 (\(s_2\)): 4.8 - Tamaño muestra 1 (\(n_1\)): 30 - Tamaño muestra 2 (\(n_2\)): 25 - Nivel de confianza: 95%
El cociente observado es:
\[ \frac{s_1^2}{s_2^2} = \frac{5.2^2}{4.8^2} = \frac{27.04}{23.04} = 1.1736111 \]
ratio_observado <- s1^2 / s2^2
ratio_observado
## [1] 1.173611
Necesitamos los percentiles de la distribución F con: - Grados de libertad numerador: \(n_1-1 = 29\) - Grados de libertad denominador: \(n_2-1 = 24\)
Para \(\alpha = 1 - 0.95 = 0.05\):
\[ F_{\alpha/2, n_1-1, n_2-1} = F_{0.025, 29, 24} = 2.2174427 \]
\[ F_{\alpha/2, n_2-1, n_1-1} = F_{0.025, 24, 29} = 2.154006 \]
alpha <- 1 - conf.level
f_lower <- qf(alpha/2, n1-1, n2-1, lower.tail = FALSE)
f_upper <- qf(alpha/2, n2-1, n1-1, lower.tail = FALSE)
f_lower;f_upper
## [1] 2.217443
## [1] 2.154006
El intervalo se calcula como:
\[ \left( \frac{s_1^2}{s_2^2} \cdot \frac{1}{F_{\alpha/2, n_2-1, n_1-1}}, \frac{s_1^2}{s_2^2} \cdot F_{\alpha/2, n_1-1, n_2-1} \right) \]
Sustituyendo valores:
\[ \left( 1.1736111 \times \frac{1}{2.154006}, 1.1736111 \times 2.2174427 \right) = (0.5448504, 2.6024154) \]
lower_bound <- ratio_observado / f_upper
upper_bound <- ratio_observado * f_lower
lower_bound
## [1] 0.5448504
upper_bound
## [1] 2.602415
\[ (0.545, 2.602) \]
library(ggplot2)
df <- data.frame(
Estadistico = "Cociente varianzas",
Valor = ratio_observado,
Lower = lower_bound,
Upper = upper_bound
)
ggplot(df, aes(x = Estadistico, y = Valor)) +
geom_point(size = 3, color = "blue") +
geom_errorbar(aes(ymin = Lower, ymax = Upper), width = 0.2, color = "red", linewidth = 1) +
geom_hline(yintercept = 1, linetype = "dashed", color = "darkgreen") +
labs(title = "Intervalo de confianza para el cociente de varianzas",
subtitle = paste0("Nivel de confianza del ", conf.level*100, "%"),
y = expression(frac(sigma[1]^2, sigma[2]^2)),
x = "") +
theme_minimal() +
scale_y_continuous(limits = c(0, max(upper_bound)*1.1))
Con una confianza del 95%, podemos afirmar que el verdadero cociente de varianzas poblacionales \(\frac{\sigma_1^2}{\sigma_2^2}\) se encuentra entre 0.545 y 2.602.
La línea verde discontinua representa el valor 1 (igualdad de varianzas). Como nuestro intervalo incluye el valor 1, por lo que no podemos rechazar la hipótesis de igualdad de varianzas.
# Ejemplo práctico en R
varianza_intervalo <- function(s1, s2, n1, n2, conf.level = 0.95) {
alpha <- 1 - conf.level
ratio <- s1^2 / s2^2
f_lower <- qf(alpha/2, n1-1, n2-1, lower.tail = TRUE)
f_upper <- qf(alpha/2, n2-1, n1-1, lower.tail = FALSE)
lower_bound <- ratio * (1/f_upper)
upper_bound <- ratio * (1/f_lower)
c(lower = lower_bound, upper = upper_bound)
}
# Ejemplo con datos
s1 <- 5.2
s2 <- 4.8
n1 <- 30
n2 <- 25
conf.level <- 0.95
intervalo <- varianza_intervalo(s1, s2, n1, n2, conf.level)
intervalo
## lower upper
## 0.5448504 2.5279654
Para el ejemplo con \(s_1 = 5.2\), \(s_2 = 4.8\), \(n_1 = 30\) y \(n_2 = 25\), el intervalo de confianza del 95% para \(\frac{\sigma_1^2}{\sigma_2^2}\) es:
\[ (0.545, 2.528) \]
Esto significa que podemos estar un 95% seguros de que el verdadero cociente de varianzas poblacionales se encuentra entre 0.545 y 2.528.
Río 1: 9, 8, 10, 12, 13, 12, 10, 14, 10,
12
Tamaño de muestra (\(n_1\)): 10
Media muestral (\(\bar{X}_1\)):
\[
\bar{X}_1 = \frac{9 + 8 + 10 + 12 + 13 + 12 + 10 + 14 + 10 + 12}{10} =
\frac{110}{10} = 11 \text{ ppm}
\]
Varianza muestral (\(S_1^2\)):
\[
S_1^2 = \frac{\sum (X_i - \bar{X}_1)^2}{n_1 - 1} = \frac{(9-11)^2 +
(8-11)^2 + \dots + (12-11)^2}{9} = \frac{34}{9} \approx 3.7778 \text{
ppm}^2
\]
Río 2: 7, 10, 8, 8, 9, 10, 8
Tamaño de muestra (\(n_2\)): 7
Media muestral (\(\bar{X}_2\)):
\[
\bar{X}_2 = \frac{7 + 10 + 8 + 8 + 9 + 10 + 8}{7} = \frac{60}{7} \approx
8.5714 \text{ ppm}
\]
Varianza muestral (\(S_2^2\)):
\[
S_2^2 = \frac{\sum (Y_i - \bar{X}_2)^2}{n_2 - 1} = \frac{(7-8.5714)^2 +
\dots + (8-8.5714)^2}{6} \approx \frac{8.8571}{6} \approx 1.4762 \text{
ppm}^2
\]
Suponiendo que las poblaciones son normales e independientes, el
intervalo de confianza del 95% para el cociente de varianzas está dado
por:
\[
\left( \frac{S_1^2 / S_2^2}{F_{\alpha/2, n_1-1, n_2-1}}, \frac{S_1^2 /
S_2^2}{F_{1-\alpha/2, n_1-1, n_2-1}} \right)
\]
\(\alpha = 0.05\), \(\alpha/2 = 0.025\)
\(S_1^2 / S_2^2 = 3.7778 / 1.4762
\approx 2.5598\)
Valores críticos de la distribución \(F\):
Intervalo de confianza:
\[
\left( \frac{2.5598}{5.1116}, \frac{2.5598}{0.2315} \right) \approx
(0.5008, 11.056)
\]
Conclusión:
Como el intervalo incluye el valor 1, no se puede rechazar la
hipótesis de que las varianzas son iguales (no hay evidencia
suficiente para afirmar que son diferentes).
Dado que en (a) no se rechaza la igualdad de varianzas, usamos el intervalo de confianza basado en la distribución \(t\) con varianzas iguales (agrupadas).
Varianza agrupada (\(S_p^2\)):
\[
S_p^2 = \frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2} = \frac{9
\times 3.7778 + 6 \times 1.4762}{15} \approx \frac{34 + 8.8571}{15}
\approx 2.8571
\]
Error estándar de la diferencia:
\[
SE = \sqrt{S_p^2 \left( \frac{1}{n_1} + \frac{1}{n_2} \right)} =
\sqrt{2.8571 \left( \frac{1}{10} + \frac{1}{7} \right)} \approx
\sqrt{2.8571 \times 0.2429} \approx 0.8333
\]
Grados de libertad: \(n_1 + n_2 - 2 =
15\)
Valor crítico \(t_{0.025, 15} \approx 2.1314\)
Intervalo de confianza: \[
(\bar{X}_1 - \bar{X}_2) \pm t_{\alpha/2, df} \times SE = (11 - 8.5714)
\pm 2.1314 \times 0.8333 \approx 2.4286 \pm 1.776
\]
Límites: \((0.6526, 4.2046)\)
Conclusión:
Como el intervalo no incluye el 0, hay evidencia de que las
medias son diferentes (\(\mu_1 >
\mu_2\)).
# Datos
rio1 <- c(9, 8, 10, 12, 13, 12, 10, 14, 10, 12)
rio2 <- c(7, 10, 8, 8, 9, 10, 8)
# (a) Intervalo para el cociente de varianzas
var_test <- var.test(rio1, rio2, conf.level = 0.95)
cat("Intervalo de confianza para el cociente de varianzas (σ1²/σ2²):\n")
## Intervalo de confianza para el cociente de varianzas (σ1²/σ2²):
print(var_test$conf.int)
## [1] 0.5006751 11.9458974
## attr(,"conf.level")
## [1] 0.95
# (b) Intervalo para la diferencia de medias (asumiendo varianzas iguales)
t_test <- t.test(rio1, rio2, var.equal = TRUE, conf.level = 0.95)
cat("\nIntervalo de confianza para la diferencia de medias (μ1 - μ2):\n")
##
## Intervalo de confianza para la diferencia de medias (μ1 - μ2):
print(t_test$conf.int)
## [1] 0.719429 4.137714
## attr(,"conf.level")
## [1] 0.95
# Datos
rio1 <- c(9, 8, 10, 12, 13, 12, 10, 14, 10, 12)
rio2 <- c(7, 10, 8, 8, 9, 10, 8)
# (a) Intervalo para el cociente de varianzas
var_test <- var.test(rio1, rio2, conf.level = 0.95)
cat("Intervalo de confianza para el cociente de varianzas (σ1²/σ2²):\n")
## Intervalo de confianza para el cociente de varianzas (σ1²/σ2²):
print(var_test$conf.int)
## [1] 0.5006751 11.9458974
## attr(,"conf.level")
## [1] 0.95
# (b) Intervalo para la diferencia de medias (asumiendo varianzas iguales)
t_test <- t.test(rio1, rio2, var.equal = TRUE, conf.level = 0.95)
cat("\nIntervalo de confianza para la diferencia de medias (μ1 - μ2):\n")
##
## Intervalo de confianza para la diferencia de medias (μ1 - μ2):
print(t_test$conf.int)
## [1] 0.719429 4.137714
## attr(,"conf.level")
## [1] 0.95
# --- Gráficos ---
par(mfrow = c(1, 2)) # Divide la ventana gráfica en 1 fila y 2 columnas
# Gráfico 1: Boxplot para comparar las distribuciones de los datos
boxplot(list(Río1 = rio1, Río2 = rio2),
col = c("lightblue", "lightgreen"),
main = "Niveles de sustancia tóxica (ppm)",
xlab = "Río", ylab = "Concentración (ppm)")
# Gráfico 2: Intervalos de confianza
# Preparamos los datos para el gráfico de intervalos
ic_var <- var_test$conf.int
ic_medias <- t_test$conf.int
plot(1, type = "n", xlim = c(0.5, 2.5), ylim = c(0, max(ic_var, ic_medias) + 2),
main = "Intervalos de Confianza del 95%",
xlab = "", ylab = "Valor", xaxt = "n")
axis(1, at = c(1, 2), labels = c("IC(σ1²/σ2²)", "IC(μ1 - μ2)"))
# Intervalo para el cociente de varianzas
segments(1, ic_var[1], 1, ic_var[2], lwd = 2, col = "blue")
points(1, var_test$estimate, pch = 19, col = "blue")
text(1, max(ic_var) + 1, labels = paste0("(", round(ic_var[1], 2), ", ", round(ic_var[2], 2), ")"), cex = 0.8)
# Intervalo para la diferencia de medias
segments(2, ic_medias[1], 2, ic_medias[2], lwd = 2, col = "red")
points(2, t_test$estimate[1] - t_test$estimate[2], pch = 19, col = "red")
text(2, max(ic_medias) + 1, labels = paste0("(", round(ic_medias[1], 2), ", ", round(ic_medias[2], 2), ")"), cex = 0.8)
# Línea de referencia para el cociente de varianzas (1 = varianzas iguales)
abline(h = 1, lty = 2, col = "green")
# Línea de referencia para la diferencia de medias (0 = no diferencia)
abline(h = 0, lty = 2, col = "orange")
Usted trabaja para una compañía que fabrica propulsores para uso en motores de turbina y se desempeña como ingeniero de producción. La compañía le ha encomendado la tarea de seleccionar el proceso que tenga la menor variabilidad en la rugosidad de la superficie. Para ello, usted toma una muestra de \(𝑛_1 = 16\) partes del primer proceso, la cual tiene una desviación estándar de \(4.7\) micropulgadas, y una muestra aleatoria de \(𝑛_2 = 16\) partes del segundo proceso, la cual tiene una desviación estándar de \(5.1\) micropulgadas. Use un intervalo de confianza de 90% para responder a la tarea que le fue encargada
Se desea determinar cuál de dos procesos de fabricación de propulsores tiene menor variabilidad en la rugosidad de la superficie, utilizando un intervalo de confianza del 90% para el cociente de varianzas (\(\sigma_1^2 / \sigma_2^2\)).
Datos:
- Proceso 1:
- Tamaño de muestra (\(n_1\)): \(16\) partes.
- Desviación estándar muestral (\(s_1\)): \(4.7\) micropulgadas.
- Varianza muestral (\(s_1^2\)): \(4.7^2 = 22.09\).
Para comparar la variabilidad de dos poblaciones normales
independientes, se utiliza un intervalo de confianza para el
cociente de varianzas basado en la distribución \(F\) de Fisher-Snedecor:
\[
\left( \frac{s_1^2 / s_2^2}{F_{\alpha/2, n_1-1, n_2-1}}, \frac{s_1^2 /
s_2^2}{F_{1-\alpha/2, n_1-1, n_2-1}} \right)
\]
- Nivel de confianza: \(90\%\) (\(\alpha
= 0.10\)).
- Grados de libertad: \(df_1
= n_1 - 1 = 15\), \(df_2 = n_2 - 1 =
15\).
Paso 1: Calcular el cociente de varianzas
muestrales:
\[
\frac{s_1^2}{s_2^2} = \frac{22.09}{26.01} \approx 0.849.
\]
Paso 2: Obtener los valores críticos de la
distribución \(F\):
- \(F_{0.05, 15, 15}\) (percentil
superior al \(5\%\)): \(2.40\).
- \(F_{0.95, 15, 15}\) (percentil
inferior al \(5\%\)):
\[
F_{0.95, 15, 15} = \frac{1}{F_{0.05, 15, 15}} = \frac{1}{2.40} \approx
0.4167.
\]
Paso 3: Construir el intervalo:
\[
\left( \frac{0.849}{2.40}, \frac{0.849}{0.4167} \right) = \left( 0.354,
2.037 \right).
\]
# Datos
n1 <- 16; s1 <- 4.7; var1 <- s1^2
n2 <- 16; s2 <- 5.1; var2 <- s2^2
confianza <- 0.90
alpha <- 1 - confianza
# Cociente de varianzas
cociente <- var1 / var2
# Valores críticos de F
F_sup <- qf(1 - alpha/2, df1 = n1-1, df2 = n2-1) # 2.40
F_inf <- qf(alpha/2, df1 = n1-1, df2 = n2-1) # 0.4167
# Intervalo de confianza
IC_inf <- cociente / F_sup
IC_sup <- cociente / F_inf
cat("Intervalo del 90% para σ1²/σ2²:", round(IC_inf, 3), "-", round(IC_sup, 3))
## Intervalo del 90% para σ1²/σ2²: 0.353 - 2.041
Nota: Si el intervalo no hubiera incluido el \(1\) (ej: si el límite superior fuera \(< 1\)), el Proceso \(1\) tendría menor variabilidad. En este caso, no se puede afirmar.
Dado un nivel de confianza \((1 - \alpha) \times 100\%\), el intervalo se construye como: \[ P\left( \chi^2_{1-\alpha/2, n} \leq \frac{\sum (X_i - \mu)^2}{\sigma^2} \leq \chi^2_{\alpha/2, n} \right) = 1 - \alpha \] Despejando \(\sigma^2\), se obtiene: \[ \sigma^2 \in \left( \frac{\sum (X_i - \mu)^2}{\chi^2_{\alpha/2, n}}, \frac{\sum (X_i - \mu)^2}{\chi^2_{1-\alpha/2, n}} \right) \]
Supongamos que: - Media conocida (\(\mu\)): 10. - Muestra: \(X = \{9, 11, 10, 8, 12\}\) (\(n = 5\)). - Nivel de confianza: 95% (\(\alpha = 0.05\)).
Interpretación: Con un 95% de confianza, la varianza poblacional \(\sigma^2\) está entre \(0.78\) y \(12.03\).
# Datos
mu <- 10
muestra <- c(9, 11, 10, 8, 12)
n <- length(muestra)
confianza <- 0.95
alpha <- 1 - confianza
# Suma de cuadrados respecto a mu
S2_mu <- sum((muestra - mu)^2)
# Cuantiles chi-cuadrado
chi_sup <- qchisq(1 - alpha/2, df = n)
chi_inf <- qchisq(alpha/2, df = n)
# Intervalo de confianza
IC_inf <- S2_mu / chi_sup
IC_sup <- S2_mu / chi_inf
cat("Intervalo de confianza al 95% para σ²:", IC_inf, ",", IC_sup)
## Intervalo de confianza al 95% para σ²: 0.7792713 , 12.03063
Cuando la media poblacional (\(\mu\)) no es conocida, se utiliza la cuasivarianza muestral (\(S^2\)) como estimador de \(\sigma^2\), y la distribución de referencia cambia. A continuación, se detalla la teoría y metodología para este caso común en la práctica estadística.
El estadístico pivotal se basa en la cuasivarianza muestral (\(S^2\)): \[ S^2 = \frac{1}{n-1} \sum_{i=1}^n (X_i - \bar{X})^2 \] Bajo los supuestos, la cantidad: \[ Q = \frac{(n-1)S^2}{\sigma^2} \sim \chi^2(n-1) \] sigue una distribución chi-cuadrado con \(n-1\) grados de libertad (no \(n\), porque se estimó \(\mu\) con \(\bar{X}\)).
Para un nivel de confianza \((1-\alpha) \times 100\%\), el intervalo se deriva de: \[ P\left( \chi^2_{1-\alpha/2, n-1} \leq \frac{(n-1)S^2}{\sigma^2} \leq \chi^2_{\alpha/2, n-1} \right) = 1 - \alpha \] Despejando \(\sigma^2\): \[ \sigma^2 \in \left( \frac{(n-1)S^2}{\chi^2_{\alpha/2, n-1}}, \frac{(n-1)S^2}{\chi^2_{1-\alpha/2, n-1}} \right) \]
Supongamos: - Muestra: \(X = \{12, 15, 10, 11, 14\}\) (\(n = 5\)). - Nivel de confianza: 95% (\(\alpha = 0.05\)).
Interpretación: Con 95% de confianza, \(\sigma^2\) está entre 1.54 y 35.54.
# Datos
muestra <- c(12, 15, 10, 11, 14)
n <- length(muestra)
confianza <- 0.95
alpha <- 1 - confianza
# Media y cuasivarianza muestral
X_bar <- mean(muestra)
S2 <- var(muestra) # Función que calcula S² = Σ(Xi - X̄)²/(n-1)
# Cuantiles chi-cuadrado
chi_sup <- qchisq(1 - alpha/2, df = n-1)
chi_inf <- qchisq(alpha/2, df = n-1)
# Intervalo de confianza
IC_inf <- (n-1) * S2 / chi_sup
IC_sup <- (n-1) * S2 / chi_inf
cat("Intervalo al 95% para σ²:", round(IC_inf, 2), ",", round(IC_sup, 2))
## Intervalo al 95% para σ²: 1.54 , 35.51
Caso | Distribución Usada | Grados de Libertad | Intervalo para \(\sigma^2\) |
---|---|---|---|
Media conocida (\(\mu\)) | \(\chi^2(n)\) | \(n\) | \(\left( \frac{S_{\mu}^2}{\chi^2_{\alpha/2, n}}, \frac{S_{\mu}^2}{\chi^2_{1-\alpha/2, n}} \right)\) |
Media desconocida | \(\chi^2(n-1)\) | \(n-1\) | \(\left( \frac{(n-1)S^2}{\chi^2_{\alpha/2, n-1}}, \frac{(n-1)S^2}{\chi^2_{1-\alpha/2, n-1}} \right)\) |
Cuasivarianza muestral: \[ S^2 = \frac{1}{n-1} \sum_{i=1}^n (X_i - \bar{X})^2 \]
Intervalo de confianza: \[ \sigma^2 \in \left( \frac{(n-1)S^2}{\chi^2_{\alpha/2, n-1}}, \frac{(n-1)S^2}{\chi^2_{1-\alpha/2, n-1}} \right) \]
Este método es fundamental en experimentos científicos donde \(\mu\) no se conoce a priori y se requiere estimar la variabilidad de los datos.
En inferencia estadística, seleccionar un tamaño de muestra adecuado es crucial para garantizar que los resultados sean confiables y precisos. A continuación, se presenta la teoría para determinar el tamaño de muestra en los casos de media poblacional y proporción poblacional.
Si la desviación estándar poblacional es conocida, usamos la distribución normal (Z): \[ n = \left( \frac{z_{\alpha/2} \cdot \sigma}{E} \right)^2 \] donde: - \(z_{\alpha/2}\) = valor crítico de la distribución normal estándar para un nivel de confianza \((1 - \alpha)\). - \(\sigma\) = desviación estándar poblacional. - \(E\) = margen de error (precisión deseada).
Si queremos estimar la media con un 95% de confianza (\(z_{0.025} = 1.96\)), \(\sigma = 5\) y \(E = 1\): \[ n = \left( \frac{1.96 \cdot 5}{1} \right)^2 = 96.04 \approx 97 \text{ (redondeado hacia arriba)}. \]
Si \(\sigma\) es desconocida, se usa
la distribución \(t\) de Student y una
estimación inicial de la desviación estándar (\(S\)) a partir de una muestra piloto: \[
n = \left( \frac{t_{\alpha/2, n-1} \cdot S}{E} \right)^2
\] - Como \(t_{\alpha/2, n-1}\)
depende de \(n\), el cálculo requiere
iteraciones.
- En la práctica, si \(n\) es grande
(\(n \geq 30\)), se aproxima con \(z_{\alpha/2}\).
Para estimar una proporción poblacional (\(p\)) con margen de error \(E\) y nivel de confianza \((1 - \alpha)\), usamos la aproximación normal (válida si \(np \geq 5\) y \(n(1-p) \geq 5\)): \[ n = \left( \frac{z_{\alpha/2}}{E} \right)^2 \cdot p(1 - p) \] - Si \(p\) es desconocido, se usa el valor más conservador \(p = 0.5\) (maximiza la varianza): \[ n = \left( \frac{z_{\alpha/2}}{2E} \right)^2 \]
Para estimar una proporción con un 95% de confianza (\(z_{0.025} = 1.96\)), \(E = 0.03\) y \(p\) desconocido: \[ n = \left( \frac{1.96}{2 \cdot 0.03} \right)^2 = 1067.11 \approx 1068 \text{ personas}. \]
Parámetro | Fórmula (Población Infinita) | Caso Conservador (\(p\) desconocido) |
---|---|---|
Media (\(\mu\)) | \[n = \left( \frac{z_{\alpha/2} \cdot \sigma}{E} \right)^2\] | No aplica. |
Proporción (\(p\)) | \[n = \left( \frac{z_{\alpha/2}}{E} \right)^2 p(1 - p)\] | \[n = \left( \frac{z_{\alpha/2}}{2E} \right)^2\] |
Solución paso a paso:
El intervalo de confianza para \(p\) es:
\[ \text{IC}(p) = \hat{p} \pm z_{\alpha/2} \cdot \sqrt{\frac{p(1-p)}{n}} = \hat{p} \pm \epsilon \]
Para \(\alpha = 0.10\), se tiene \(z_{\alpha/2} = z_{0.05} = 1.645\).
Como \(\epsilon = z_{\alpha/2} \cdot \sqrt{\frac{p(1-p)}{n}}\), se tiene:
\[ 0.04 = 1.645 \cdot \sqrt{\frac{0.6 \cdot 0.4}{n}} \]
Resolviendo para \(n\):
\[ n = \left( \frac{1.645 \cdot \sqrt{0.24}}{0.04} \right)^2 \approx 406 \]
Si no se conoce \(p\), se utiliza \(p = 0.5\), lo que daría \(n = 423\).
# Parámetros dados
E <- 0.04 # Margen de error
confianza <- 0.90 # Nivel de confianza (90%)
p <- 0.6 # Proporción esperada
# Cálculo del valor crítico z_(α/2)
alpha <- 1 - confianza
z_critico <- qnorm(1 - alpha/2) # qnorm() devuelve el cuantil de la normal estándar
# Cálculo del tamaño de muestra
n <- ( (z_critico / E)^2 ) * p * (1 - p)
# Redondeamos hacia arriba (porque el tamaño de muestra debe ser entero)
n_final <- ceiling(n)
# Resultado
cat("Tamaño de muestra requerido (n):", n_final, "\n")
## Tamaño de muestra requerido (n): 406
n_conservador <- ( (z_critico / (2 * E))^2 )
ceiling(n_conservador) # Resultado: 423
## [1] 423
La prueba de hipótesis es un procedimiento estadístico formal utilizado para determinar si existe suficiente evidencia en una muestra de datos para inferir que ciertas condiciones son válidas para toda una población. Se basa en la formulación de dos hipótesis mutuamente excluyentes sobre un parámetro de la población.
Formular las hipótesis nula (\(H_0\)) y alternativa (\(H_1\)).
Elegir el nivel de significancia (\(\alpha\)).
Seleccionar el estadístico de prueba apropiado.
Calcular el valor del estadístico de prueba a partir de los datos de la muestra.
Determinar el valor p o la región crítica.
Tomar una decisión:
Formular una conclusión en el contexto del problema.
Problema: Se sabe que la desviación estándar de la altura de los estudiantes universitarios es de 6 cm. Se toma una muestra aleatoria de 64 estudiantes y se encuentra que la altura media es de 170 cm. ¿Hay evidencia suficiente para decir que la altura media de todos los estudiantes universitarios es diferente de 168 cm, a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
1. Definición de las Hipótesis:
2. Nivel de Significancia (\(\alpha\)):
El nivel de significancia dado es \(\alpha = 0.05\).
3. Datos del Problema:
4. Cálculo del Estadístico de Prueba Z:
Dado que conocemos la desviación estándar de la población y la muestra es suficientemente grande (n > 30), podemos usar el estadístico de prueba Z:
\[Z = \frac{\bar{x} - \mu_0}{\frac{\sigma}{\sqrt{n}}}\]
Sustituyendo los valores:
\[Z = \frac{170 - 168}{\frac{6}{\sqrt{64}}} = \frac{2}{\frac{6}{8}} = \frac{2}{0.75} \approx 2.67\]
El valor del estadístico de prueba Z es aproximadamente 2.67.
5. Cálculo del Valor p:
Para una prueba de dos colas, el valor p es la probabilidad de observar un estadístico de prueba tan extremo (en cualquier dirección) como el calculado, asumiendo que la hipótesis nula es verdadera. Se calcula como el doble de la probabilidad de la cola más pequeña.
\[p\text{-valor} = 2 \times P(Z \geq |2.67|) = 2 \times (1 - P(Z < 2.67))\]
En R, podemos calcular esto usando la función
pnorm()
:
z_calculado <- 2.67
p_valor <- 2 * (1 - pnorm(abs(z_calculado)))
cat("Valor p:", p_valor, "\n")
## Valor p: 0.007585125
El valor p será aproximadamente 0.0076.
6. Decisión:
Comparamos el valor p con el nivel de significancia (\(\alpha = 0.05\)):
\[0.0076 < 0.05\]
Dado que el valor p es menor que el nivel de significancia, rechazamos la hipótesis nula.
7. Conclusión:
Con un nivel de significancia de \(\alpha = 0.05\), existe evidencia estadística suficiente para decir que la altura media de todos los estudiantes universitarios es diferente de 168 cm.
Solución en R (Código Completo y Visualización):
# Datos del problema
desviacion_estandar <- 6
tamano_muestra <- 64
media_muestra <- 170
media_hipotetica <- 168
alfa <- 0.05
# Calcular el estadístico de prueba Z
z_calculado <- (media_muestra - media_hipotetica) / (desviacion_estandar / sqrt(tamano_muestra))
cat("Estadístico de prueba Z:", z_calculado, "\n")
## Estadístico de prueba Z: 2.666667
# Calcular el valor p (prueba de dos colas)
p_valor <- 2 * (1 - pnorm(abs(z_calculado)))
cat("Valor p:", p_valor, "\n")
## Valor p: 0.007660761
# Calcular los valores críticos para una prueba de dos colas
z_critico_superior <- qnorm(1 - alfa / 2)
z_critico_inferior <- qnorm(alfa / 2)
cat("Valor crítico Z (superior):", z_critico_superior, "\n")
## Valor crítico Z (superior): 1.959964
cat("Valor crítico Z (inferior):", z_critico_inferior, "\n")
## Valor crítico Z (inferior): -1.959964
# Decisión
if (p_valor < alfa) {
cat("El valor p es menor que alfa. Se rechaza la hipótesis nula.\n")
} else {
cat("El valor p no es menor que alfa. No se rechaza la hipótesis nula.\n")
}
## El valor p es menor que alfa. Se rechaza la hipótesis nula.
# Visualización de la región crítica y el estadístico de prueba
library(ggplot2)
# Crear datos para la curva normal estándar
x <- seq(-4, 4, length.out = 200)
y <- dnorm(x)
df <- data.frame(x = x, y = y)
# Crear el gráfico
ggplot(df, aes(x = x, y = y)) +
geom_line() +
geom_area(aes(x = ifelse(x < z_critico_inferior | x > z_critico_superior, x, NA)), fill = "red", alpha = 0.5) +
geom_vline(xintercept = z_critico_inferior, linetype = "dashed", color = "red") +
geom_vline(xintercept = z_critico_superior, linetype = "dashed", color = "red") +
geom_vline(xintercept = z_calculado, color = "blue") +
labs(title = "Prueba de Hipótesis (Dos Colas)",
subtitle = paste("Alfa =", alfa),
x = "Z",
y = "Densidad") +
annotate("text", x = z_critico_inferior - 0.5, y = 0.1, label = paste("Z crítico =", round(z_critico_inferior, 3)), color = "red") +
annotate("text", x = z_critico_superior + 0.5, y = 0.1, label = paste("Z crítico =", round(z_critico_superior, 3)), color = "red") +
annotate("text", x = z_calculado + 0.5, y = 0.05, label = paste("Z calculado =", round(z_calculado, 2)), color = "blue") +
annotate("text", x = -3, y = 0.3, label = "Región Crítica", color = "red") +
annotate("text", x = 3, y = 0.3, label = "Región Crítica", color = "red") +
annotate("text", x = z_calculado, y = 0.2, label = paste("p-valor =", round(p_valor, 4)), color = "blue") +
theme_minimal()
## Warning: Removed 98 rows containing non-finite outside the scale range
## (`stat_align()`).
Interpretación de la Salida de R:
La salida de R mostrará el valor del estadístico de prueba Z (aproximadamente 2.67), el valor p (aproximadamente 0.0076) y los valores críticos para una prueba de dos colas (aproximadamente -1.96 y 1.96). El gráfico visualizará la curva normal estándar con las dos regiones críticas (áreas rojas en las colas) y la ubicación del estadístico de prueba calculado (línea azul). Verás que la línea azul cae fuera de la región entre los valores críticos, lo que lleva al rechazo de la hipótesis nula. El valor p también se indicará visualmente (aunque no como un área sombreada en este gráfico específico).
Conclusión Final:
Con un nivel de significancia de \(\alpha = 0.05\), existe evidencia estadística suficiente para concluir que la altura media de todos los estudiantes universitarios es diferente de 168 cm.
Región: El gráfico muestra la distribución normal estándar. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico z observado. Las áreas amarillas en las colas representan el valor p.
Problema: Una compañía afirma que el tiempo promedio que tardan sus empleados en completar una tarea es de 15 minutos. Se toma una muestra aleatoria de 36 empleados y se encuentra que el tiempo medio es de 16 minutos. Se sabe que la desviación estándar poblacional es de 3 minutos. ¿Hay evidencia suficiente para decir que el tiempo promedio para completar la tarea es mayor de 15 minutos, a un nivel de significancia de \(\alpha = 0.01\)?
1. Definición de las Hipótesis:
2. Nivel de Significancia (\(\alpha\)):
El nivel de significancia dado es \(\alpha = 0.01\).
3. Datos del Problema:
4. Cálculo del Estadístico de Prueba Z:
Utilizamos el estadístico de prueba Z:
\[Z = \frac{\bar{x} - \mu_0}{\frac{\sigma}{\sqrt{n}}}\]
Sustituyendo los valores:
\[Z = \frac{16 - 15}{\frac{3}{\sqrt{36}}} = \frac{1}{\frac{3}{6}} = \frac{1}{0.5} = 2\]
El valor del estadístico de prueba Z es 2.
5. Cálculo del Valor p:
Para una prueba de cola derecha, el valor p es la probabilidad de observar un estadístico de prueba tan extremo (o más extremo hacia la derecha) como el calculado, asumiendo que la hipótesis nula es verdadera.
\[p\text{-valor} = P(Z \geq 2) = 1 - P(Z < 2)\]
En R, podemos calcular esto usando la función
pnorm()
:
z_calculado <- 2
p_valor <- 1 - pnorm(z_calculado)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.02275013
El valor p será aproximadamente 0.0228.
6. Decisión:
Comparamos el valor p con el nivel de significancia (\(\alpha = 0.01\)):
\[0.0228 > 0.01\]
Dado que el valor p es mayor que el nivel de significancia, no rechazamos la hipótesis nula.
7. Conclusión:
Con un nivel de significancia de \(\alpha = 0.01\), no hay evidencia estadística suficiente para decir que el tiempo promedio para completar la tarea es mayor de 15 minutos.
Solución en R (Código Completo y Visualización):
# Datos del problema
desviacion_estandar <- 3
tamano_muestra <- 36
media_muestra <- 16
media_hipotetica <- 15
alfa <- 0.01
# Calcular el estadístico de prueba Z
z_calculado <- (media_muestra - media_hipotetica) / (desviacion_estandar / sqrt(tamano_muestra))
cat("Estadístico de prueba Z:", z_calculado, "\n")
## Estadístico de prueba Z: 2
# Calcular el valor p (prueba de cola derecha)
p_valor <- 1 - pnorm(z_calculado)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.02275013
# Calcular el valor crítico para una prueba de cola derecha
z_critico <- qnorm(1 - alfa)
cat("Valor crítico Z (cola derecha):", z_critico, "\n")
## Valor crítico Z (cola derecha): 2.326348
# Decisión
if (p_valor < alfa) {
cat("El valor p es menor que alfa. Se rechaza la hipótesis nula.\n")
} else {
cat("El valor p no es menor que alfa. No se rechaza la hipótesis nula.\n")
}
## El valor p no es menor que alfa. No se rechaza la hipótesis nula.
# Visualización de la región crítica y el estadístico de prueba
library(ggplot2)
# Crear datos para la curva normal estándar
x <- seq(-4, 4, length.out = 200)
y <- dnorm(x)
df <- data.frame(x = x, y = y)
# Crear el gráfico
ggplot(df, aes(x = x, y = y)) +
geom_line() +
geom_area(aes(x = ifelse(x > z_critico, x, NA)), fill = "red", alpha = 0.5) +
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = z_calculado, color = "blue") +
labs(title = "Prueba de Hipótesis (Cola Derecha)",
subtitle = paste("Alfa =", alfa),
x = "Z",
y = "Densidad") +
annotate("text", x = z_critico + 0.5, y = 0.1, label = paste("Z crítico =", round(z_critico, 3)), color = "red") +
annotate("text", x = z_calculado - 0.5, y = 0.05, label = paste("Z calculado =", round(z_calculado, 2)), color = "blue") +
annotate("text", x = 3, y = 0.3, label = "Región Crítica", color = "red") +
annotate("text", x = z_calculado, y = 0.2, label = paste("p-valor =", round(p_valor, 4)), color = "blue") +
theme_minimal()
## Warning: Removed 158 rows containing non-finite outside the scale range
## (`stat_align()`).
Interpretación de la Salida de R:
La salida de R mostrará el valor del estadístico de prueba Z (2), el valor p (aproximadamente 0.0228) y el valor crítico para una prueba de cola derecha (aproximadamente 2.33). El gráfico visualizará la curva normal estándar con la región crítica (área roja en la cola derecha) y la ubicación del estadístico de prueba calculado (línea azul). Verás que la línea azul no cae en la región crítica. El valor p (el área a la derecha de la línea azul) es mayor que el área de la región crítica (alfa).
Conclusión Final:
Con un nivel de significancia de \(\alpha = 0.01\), no hay evidencia estadística suficiente para decir que el tiempo promedio para completar la tarea es mayor de 15 minutos.
Problema: Un estudio afirma que el peso promedio de los recién nacidos es de 3.5 kg. Se toma una muestra aleatoria de 100 recién nacidos y se encuentra que el peso medio es de 3.4 kg. Se sabe que la desviación estándar poblacional es de 0.4 kg. ¿Hay evidencia suficiente para decir que el peso promedio de los recién nacidos es menor de 3.5 kg, a un nivel de significancia de \(\alpha = 0.05\)?
1. Definición de las Hipótesis:
2. Nivel de Significancia (\(\alpha\)):
El nivel de significancia dado es \(\alpha = 0.05\).
3. Datos del Problema:
4. Cálculo del Estadístico de Prueba Z:
Utilizamos el estadístico de prueba Z:
\[Z = \frac{\bar{x} - \mu_0}{\frac{\sigma}{\sqrt{n}}}\]
Sustituyendo los valores:
\[Z = \frac{3.4 - 3.5}{\frac{0.4}{\sqrt{100}}} = \frac{-0.1}{\frac{0.4}{10}} = \frac{-0.1}{0.04} = -2.5\]
El valor del estadístico de prueba Z es -2.5.
5. Cálculo del Valor p:
Para una prueba de cola izquierda, el valor p es la probabilidad de observar un estadístico de prueba tan extremo (o más extremo hacia la izquierda) como el calculado, asumiendo que la hipótesis nula es verdadera.
\[p\text{-valor} = P(Z \leq -2.5)\]
En R, podemos calcular esto usando la función
pnorm()
:
z_calculado <- -2.5
p_valor <- pnorm(z_calculado)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.006209665
El valor p será aproximadamente 0.0062.
6. Decisión:
Comparamos el valor p con el nivel de significancia (\(\alpha = 0.05\)):
\[0.0062 < 0.05\]
Dado que el valor p es menor que el nivel de significancia, rechazamos la hipótesis nula.
7. Conclusión:
Con un nivel de significancia de \(\alpha = 0.05\), existe evidencia estadística suficiente para decir que el peso promedio de los recién nacidos es menor de 3.5 kg.
Solución en R (Código Completo y Visualización):
# Datos del problema
desviacion_estandar <- 0.4
tamano_muestra <- 100
media_muestra <- 3.4
media_hipotetica <- 3.5
alfa <- 0.05
# Calcular el estadístico de prueba Z
z_calculado <- (media_muestra - media_hipotetica) / (desviacion_estandar / sqrt(tamano_muestra))
cat("Estadístico de prueba Z:", z_calculado, "\n")
## Estadístico de prueba Z: -2.5
# Calcular el valor p (prueba de cola izquierda)
p_valor <- pnorm(z_calculado)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.006209665
# Calcular el valor crítico para una prueba de cola izquierda
z_critico <- qnorm(alfa)
cat("Valor crítico Z (cola izquierda):", z_critico, "\n")
## Valor crítico Z (cola izquierda): -1.644854
# Decisión
if (p_valor < alfa) {
cat("El valor p es menor que alfa. Se rechaza la hipótesis nula.\n")
} else {
cat("El valor p no es menor que alfa. No se rechaza la hipótesis nula.\n")
}
## El valor p es menor que alfa. Se rechaza la hipótesis nula.
# Visualización de la región crítica y el estadístico de prueba
library(ggplot2)
# Crear datos para la curva normal estándar
x <- seq(-4, 4, length.out = 200)
y <- dnorm(x)
df <- data.frame(x = x, y = y)
# Crear el gráfico
ggplot(df, aes(x = x, y = y)) +
geom_line() +
geom_area(aes(x = ifelse(x < z_critico, x, NA)), fill = "red", alpha = 0.5) +
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = z_calculado, color = "blue") +
labs(title = "Prueba de Hipótesis (Cola Izquierda)",
subtitle = paste("Alfa =", alfa),
x = "Z",
y = "Densidad") +
annotate("text", x = z_critico - 0.5, y = 0.1, label = paste("Z crítico =", round(z_critico, 3)), color = "red") +
annotate("text", x = z_calculado + 0.5, y = 0.05, label = paste("Z calculado =", round(z_calculado, 2)), color = "blue") +
annotate("text", x = -3, y = 0.3, label = "Región Crítica", color = "red") +
annotate("text", x = z_calculado - 0.5, y = 0.2, label = paste("p-valor =", round(p_valor, 4)), color = "blue") +
theme_minimal()
## Warning: Removed 141 rows containing non-finite outside the scale range
## (`stat_align()`).
Interpretación de la Salida de R:
La salida de R mostrará el valor del estadístico de prueba Z (-2.5), el valor p (aproximadamente 0.0062) y el valor crítico para una prueba de cola izquierda (aproximadamente -1.645). El gráfico visualizará la curva normal estándar con la región crítica (área roja en la cola izquierda) y la ubicación del estadístico de prueba calculado (línea azul). Verás que la línea azul cae dentro de la región crítica. El valor p (el área a la izquierda de la línea azul) es menor que el área de la región crítica (alfa).
Conclusión Final:
Con un nivel de significancia de \(\alpha = 0.05\), existe evidencia estadística suficiente para decir que el peso promedio de los recién nacidos es menor de 3.5 kg.
¡Espero que esta solución te sea útil en esta mañana desde Cartagena! ¿Hay algún otro ejercicio de prueba de hipótesis que te gustaría resolver?
Problema: Un fabricante afirma que el contenido promedio de un cierto producto es de 50 ml. Se toma una muestra aleatoria de 25 unidades y se encuentra que el contenido medio es de 49 ml con una desviación estándar muestral de 2 ml. ¿Hay evidencia suficiente para rechazar la afirmación del fabricante a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadístico de prueba: \[\bar{x} = 49, \mu_0 = 50, s = 2, n = 25\] \[t = \frac{49 - 50}{2 / \sqrt{25}} = \frac{-1}{2 / 5} = \frac{-1}{0.4} = -2.5\]
Grados de libertad: \(gl = n - 1 = 25 - 1 = 24\)
Valor p: Para una prueba de dos colas, \(p = 2 \times P(|T_{24}| \ge |-2.5|) = 2 \times P(T_{24} \ge 2.5)\). Usando una tabla t o software, \(P(T_{24} \ge 2.5) \approx 0.0124\). \[p = 2 \times 0.0124 = 0.0248\]
Decisión: Como \(p = 0.0248 \le \alpha = 0.05\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.05 para rechazar la afirmación del fabricante de que el contenido promedio del producto es de 50 ml. La media del contenido parece ser diferente de 50 ml.
Solución en R:
# Datos
media_muestra <- 49
media_nula <- 50
desviacion_estandar_muestra <- 2
tamano_muestra <- 25
alfa <- 0.05
grados_libertad <- tamano_muestra - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_muestra - media_nula) / (desviacion_estandar_muestra / sqrt(tamano_muestra))
cat("Estadístico t:", t_estadistico, "\n")
## Estadístico t: -2.5
# Calcular el valor p (prueba de dos colas)
p_valor <- 2 * pt(abs(t_estadistico), df = grados_libertad, lower.tail = FALSE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.01965418
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## Rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr) # Se añade dplyr para el operador %>%
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Crear el gráfico
data.frame(x = seq(-4, 4, 0.01)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dt, args = list(df = grados_libertad)) +
# Región crítica
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "red", alpha = 0.3,
xlim = c(-4, -qt(1 - alfa/2, df = grados_libertad))) +
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "red", alpha = 0.3,
xlim = c(qt(1 - alfa/2, df = grados_libertad), 4)) +
# Valor p
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "blue", alpha = 0.3,
xlim = c(-4, -abs(t_estadistico))) +
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "blue", alpha = 0.3,
xlim = c(abs(t_estadistico), 4)) +
# Líneas críticas
geom_vline(xintercept = c(-qt(1 - alfa/2, df = grados_libertad),
qt(1 - alfa/2, df = grados_libertad)),
linetype = "dashed", color = "red") +
# Línea del estadístico observado
geom_vline(xintercept = t_estadistico, color = "darkgreen", linewidth = 1.5) +
# Anotaciones
annotate("text", x = -2.5, y = 0.1, label = "Región crítica", color = "red") +
annotate("text", x = 2.5, y = 0.1, label = paste("Valor p =", round(p_valor, 4)), color = "blue") +
annotate("text", x = t_estadistico, y = 0.2,
label = paste("t =", round(t_estadistico, 2)),
color = "darkgreen", vjust = -0.5) +
labs(title = "Prueba t de Student (dos colas)",
subtitle = paste("Distribución t con", grados_libertad, "grados de libertad"),
x = "Valor t", y = "Densidad de probabilidad") +
theme_minimal()
Región: El gráfico muestra la distribución t con 24 grados de libertad. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico t observado. Las áreas amarillas en las colas representan el valor p.
Problema: Un entrenador personal cree que sus clientes pueden correr una milla en menos de 8 minutos en promedio después de 6 semanas de entrenamiento. Se toma una muestra aleatoria de 16 clientes y se encuentra que el tiempo medio para correr una milla es de 7.8 minutos con una desviación estándar muestral de 0.5 minutos. ¿Hay evidencia suficiente para apoyar la creencia del entrenador a un nivel de significancia de \(\alpha = 0.01\)? (Nota: la hipótesis del entrenador es que la media es menor de 8, así que esta será una prueba de cola inferior en realidad. El problema original tenía una inconsistencia).
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadístico de prueba: \[\bar{x} = 7.8, \mu_0 = 8, s = 0.5, n = 16\] \[t = \frac{7.8 - 8}{0.5 / \sqrt{16}} = \frac{-0.2}{0.5 / 4} = \frac{-0.2}{0.125} = -1.6\]
Grados de libertad: \(gl = n - 1 = 16 - 1 = 15\)
Valor p: Para una prueba de cola inferior, \(p = P(T_{15} \le -1.6)\). Usando una tabla t o software, \(P(T_{15} \le -1.6) \approx 0.0655\).
Decisión: Como \(p = 0.0655 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para apoyar la creencia del entrenador de que sus clientes pueden correr una milla en menos de 8 minutos en promedio después de 6 semanas de entrenamiento.
Solución en R:
# Datos
media_muestra <- 7.8
media_nula <- 8
desviacion_estandar_muestra <- 0.5
tamano_muestra <- 16
alfa <- 0.01
grados_libertad <- tamano_muestra - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_muestra - media_nula) / (desviacion_estandar_muestra / sqrt(tamano_muestra))
cat("Estadístico t:", round(t_estadistico, 4), "\n")
## Estadístico t: -1.6
# Calcular el valor p (prueba de cola inferior)
p_valor <- pt(t_estadistico, df = grados_libertad, lower.tail = TRUE)
cat("Valor p:", round(p_valor, 6), "\n") # Más decimales para valores pequeños
## Valor p: 0.065223
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización mejorada
library(ggplot2)
library(dplyr)
# Calcular valor crítico
t_critico <- qt(alfa, df = grados_libertad)
# Crear gráfico con mejor formato
data.frame(x = seq(-5, 3, 0.01)) %>% # Rango ajustado para mejor visualización
ggplot(aes(x = x)) +
# Distribución base
stat_function(fun = dt, args = list(df = grados_libertad),
color = "gray40", linewidth = 0.8) +
# Región crítica (rojo)
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "red", alpha = 0.4,
xlim = c(-5, t_critico)) +
# Área del valor p (azul)
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "blue", alpha = 0.3,
xlim = c(-5, t_estadistico)) +
# Línea crítica
geom_vline(xintercept = t_critico,
linetype = "dashed", color = "red", linewidth = 1) +
# Línea del estadístico observado
geom_vline(xintercept = t_estadistico,
color = "darkgreen", linewidth = 1.5) +
# Anotaciones mejor posicionadas
annotate("text", x = t_critico - 0.8, y = 0.1,
label = paste0("t crítico\n(", round(t_critico, 3), ")"),
color = "red", size = 3.5, hjust = 1) +
annotate("text", x = t_estadistico, y = 0.2,
label = paste0("t = ", round(t_estadistico, 2)),
color = "darkgreen", vjust = -0.5, size = 4) +
annotate("text", x = -3.5, y = 0.15,
label = paste0("Valor p = ", format.pval(p_valor, digits = 3)),
color = "blue", size = 4.5, fontface = "bold") +
# Etiquetas y tema mejorado
labs(title = "Prueba t de Student (cola inferior)",
subtitle = paste0("H₀: μ ≥ ", media_nula, " vs H₁: μ < ", media_nula,
" (α = ", alfa, "; gl = ", grados_libertad, ")"),
x = "Estadístico t", y = "Densidad de probabilidad") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, size = 11),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)) +
scale_x_continuous(breaks = seq(-5, 3, 1), limits = c(-5, 3)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) # Ajuste del espacio superior
Región: El gráfico muestra la distribución t con 15 grados de libertad. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Una empresa de software afirma que el tiempo promedio que tardan los usuarios en aprender a usar su nueva aplicación es de 20 minutos. Se toma una muestra aleatoria de 10 usuarios y se encuentra que el tiempo medio es de 22 minutos con una desviación estándar muestral de 3 minutos. ¿Hay evidencia suficiente para decir que el tiempo promedio es mayor de 20 minutos, a un nivel de significancia de \(\alpha = 0.10\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Estadístico de prueba: \[\bar{x} = 22, \mu_0 = 20, s = 3, n = 10\] \[t = \frac{22 - 20}{3 / \sqrt{10}} = \frac{2}{3 / 3.162} = \frac{2}{0.949} \approx 2.11\]
Grados de libertad: \(gl = n - 1 = 10 - 1 = 9\)
Valor p: Para una prueba de cola superior, \(p = P(T_{9} \ge 2.11)\). Usando una tabla t o software, \(P(T_{9} \ge 2.11) \approx 0.031\).
Decisión: Como \(p = 0.031 \le \alpha = 0.10\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.10 para decir que el tiempo promedio que tardan los usuarios en aprender a usar la nueva aplicación es mayor de 20 minutos.
Solución en R:
# Datos del análisis
media_muestra <- 22
media_nula <- 20
desviacion_estandar_muestra <- 3
tamano_muestra <- 10
alfa <- 0.10
grados_libertad <- tamano_muestra - 1
# Cálculo del estadístico t
t_estadistico <- (media_muestra - media_nula) / (desviacion_estandar_muestra / sqrt(tamano_muestra))
cat("Estadístico t calculado:", round(t_estadistico, 4), "\n")
## Estadístico t calculado: 2.1082
# Cálculo del valor p (prueba unilateral derecha)
p_valor <- pt(t_estadistico, df = grados_libertad, lower.tail = FALSE)
cat("Valor p obtenido:", format.pval(p_valor, digits = 4), "\n")
## Valor p obtenido: 0.03213
# Toma de decisión
decision <- ifelse(p_valor <= alfa,
"Rechazamos la hipótesis nula (p ≤ α)",
"No rechazamos la hipótesis nula (p > α)")
cat("Conclusión:", decision, "\n")
## Conclusión: Rechazamos la hipótesis nula (p ≤ α)
# Visualización mejorada
library(ggplot2)
library(dplyr)
# Valores críticos
t_critico <- qt(1 - alfa, df = grados_libertad)
# Creación del gráfico con mejoras sustanciales
data.frame(x = seq(-3, 5, 0.01)) %>% # Rango ajustado
ggplot(aes(x = x)) +
# 1. Distribución base
stat_function(fun = dt, args = list(df = grados_libertad),
color = "gray30", linewidth = 0.8) +
# 2. Región crítica (rojo semitransparente)
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "#FF6B6B", alpha = 0.4,
xlim = c(t_critico, 5)) +
# 3. Área del valor p (azul semitransparente)
stat_function(fun = dt, args = list(df = grados_libertad),
geom = "area", fill = "#4E79A7", alpha = 0.5,
xlim = c(t_estadistico, 5)) +
# 4. Líneas de referencia
geom_vline(xintercept = t_critico,
linetype = "dashed", color = "#D32F2F", linewidth = 1.2) +
geom_vline(xintercept = t_estadistico,
color = "#2E7D32", linewidth = 1.5) +
# 5. Anotaciones profesionales
annotate("text", x = t_critico + 0.3, y = 0.1,
label = sprintf("t crítico = %.2f", t_critico),
color = "#D32F2F", size = 4, hjust = 0) +
annotate("text", x = t_estadistico, y = 0.25,
label = sprintf("t observado = %.2f", t_estadistico),
color = "#2E7D32", vjust = -0.5, size = 4.5) +
annotate("text", x = 4, y = 0.15,
label = sprintf("Valor p = %.4f", p_valor),
color = "#4E79A7", size = 5, fontface = "bold") +
# 6. Elementos estéticos y formato
labs(title = "Prueba t de Student (Unilateral Derecha)",
subtitle = sprintf("H₀: μ ≤ %.1f vs H₁: μ > %.1f | α = %.2f | gl = %d",
media_nula, media_nula, alfa, grados_libertad),
x = "Valor del estadístico t",
y = "Densidad de probabilidad") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 15),
plot.subtitle = element_text(hjust = 0.5, size = 12),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13),
axis.text = element_text(size = 11),
plot.margin = margin(15, 15, 15, 15)
) +
scale_x_continuous(breaks = seq(-3, 5, 1), limits = c(-3, 5)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
Problema: Una encuesta anterior reveló que el 60% de los adultos en una ciudad apoyaba una cierta política. Después de una campaña informativa, se realiza una nueva encuesta a 400 adultos y se encuentra que el 66% ahora apoya la política. ¿Hay evidencia suficiente para decir que la proporción de adultos que apoya la política ha cambiado significativamente a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Verificación de condiciones: \(n = 400\), \(p_0 = 0.60\). \(np_0 = 400 \times 0.60 = 240 \ge 10\), \(n(1-p_0) = 400 \times 0.40 = 160 \ge 10\). Las condiciones se cumplen.
Proporción muestral: \(\hat{p} = 0.66\)
Estadístico de prueba: \[z = \frac{0.66 - 0.60}{\sqrt{\frac{0.60(1 - 0.60)}{400}}} = \frac{0.06}{\sqrt{\frac{0.24}{400}}} = \frac{0.06}{\sqrt{0.0006}} = \frac{0.06}{0.0245} \approx 2.45\]
Valor p: Para una prueba de dos colas, \(p = 2 \times P(Z \ge |2.45|) = 2 \times P(Z \ge 2.45)\). Usando una tabla Z o software, \(P(Z \ge 2.45) \approx 1 - 0.9929 = 0.0071\). \[p = 2 \times 0.0071 = 0.0142\]
Decisión: Como \(p = 0.0142 \le \alpha = 0.05\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que la proporción de adultos que apoya la política ha cambiado significativamente.
Solución en R:
# Datos del análisis
proporcion_muestra <- 0.66
proporcion_nula <- 0.60
tamano_muestra <- 400
alfa <- 0.05
# Verificación de condiciones para prueba z
if (tamano_muestra * proporcion_nula < 10 | tamano_muestra * (1 - proporcion_nula) < 10) {
warning("Las condiciones para la aproximación normal no se cumplen")
}
# Cálculo del estadístico z
error_estandar <- sqrt((proporcion_nula * (1 - proporcion_nula)) / tamano_muestra)
z_estadistico <- (proporcion_muestra - proporcion_nula) / error_estandar
cat("Estadístico z calculado:", round(z_estadistico, 4), "\n")
## Estadístico z calculado: 2.4495
cat("Error estándar:", round(error_estandar, 5), "\n")
## Error estándar: 0.02449
# Cálculo del valor p (prueba bilateral)
p_valor <- 2 * pnorm(abs(z_estadistico), lower.tail = FALSE)
cat("Valor p obtenido:", format.pval(p_valor, digits = 4), "\n")
## Valor p obtenido: 0.01431
# Toma de decisión
decision <- ifelse(p_valor <= alfa,
"Rechazamos la hipótesis nula (p ≤ α)",
"No rechazamos la hipótesis nula (p > α)")
cat("Conclusión:", decision, "\n")
## Conclusión: Rechazamos la hipótesis nula (p ≤ α)
# Visualización mejorada
library(ggplot2)
library(dplyr)
# Valores críticos
z_critico <- qnorm(1 - alfa/2)
# Creación del gráfico profesional
data.frame(x = seq(-4, 4, 0.01)) %>%
ggplot(aes(x = x)) +
# 1. Distribución normal estándar
stat_function(fun = dnorm, color = "gray40", linewidth = 0.8) +
# 2. Regiones críticas (rojo)
stat_function(fun = dnorm, geom = "area",
fill = "#E74C3C", alpha = 0.4,
xlim = c(-4, -z_critico)) +
stat_function(fun = dnorm, geom = "area",
fill = "#E74C3C", alpha = 0.4,
xlim = c(z_critico, 4)) +
# 3. Áreas del valor p (azul)
stat_function(fun = dnorm, geom = "area",
fill = "#3498DB", alpha = 0.5,
xlim = c(-4, -abs(z_estadistico))) +
stat_function(fun = dnorm, geom = "area",
fill = "#3498DB", alpha = 0.5,
xlim = c(abs(z_estadistico), 4)) +
# 4. Líneas de referencia
geom_vline(xintercept = c(-z_critico, z_critico),
linetype = "dashed", color = "#C0392B", linewidth = 1) +
geom_vline(xintercept = z_estadistico,
color = "#27AE60", linewidth = 1.5) +
# 5. Anotaciones profesionales
annotate("text", x = -z_critico - 0.5, y = 0.1,
label = sprintf("-z crítico\n(%.2f)", -z_critico),
color = "#C0392B", size = 3.8) +
annotate("text", x = z_critico + 0.5, y = 0.1,
label = sprintf("z crítico\n(%.2f)", z_critico),
color = "#C0392B", size = 3.8) +
annotate("text", x = z_estadistico, y = 0.2,
label = sprintf("z = %.2f", z_estadistico),
color = "#27AE60", vjust = -0.8, size = 4.2) +
annotate("text", x = 0, y = 0.3,
label = sprintf("Valor p = %.4f", p_valor),
color = "#3498DB", size = 4.5, fontface = "bold") +
# 6. Elementos estéticos y formato
labs(title = "Prueba Z para Proporciones (Bilateral)",
subtitle = sprintf("H₀: π = %.2f vs H₁: π ≠ %.2f | α = %.2f | n = %d",
proporcion_nula, proporcion_nula, alfa, tamano_muestra),
x = "Estadístico Z",
y = "Densidad de probabilidad") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 15),
plot.subtitle = element_text(hjust = 0.5, size = 12),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13),
axis.text = element_text(size = 11),
plot.margin = margin(15, 15, 15, 15)
) +
scale_x_continuous(breaks = seq(-4, 4, 1)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
Región: El gráfico muestra la distribución normal estándar. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico z observado. Las áreas amarillas en las colas representan el valor p.
Problema: Una compañía afirma que al menos el 80% de sus clientes están satisfechos con su producto. Se toma una muestra aleatoria de 250 clientes y se encuentra que el 76% está satisfecho. ¿Hay evidencia suficiente para rechazar la afirmación de la compañía a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Verificación de condiciones: \(n = 250\), \(p_0 = 0.80\). \(np_0 = 250 \times 0.80 = 200 \ge 10\), \(n(1-p_0) = 250 \times 0.20 = 50 \ge 10\). Las condiciones se cumplen.
Proporción muestral: \(\hat{p} = 0.76\)
Estadístico de prueba: \[z = \frac{0.76 - 0.80}{\sqrt{\frac{0.80(1 - 0.80)}{250}}} = \frac{-0.04}{\sqrt{\frac{0.16}{250}}} = \frac{-0.04}{\sqrt{0.00064}} = \frac{-0.04}{0.0253} \approx -1.58\]
Valor p: Para una prueba de cola inferior, \(p = P(Z \le -1.58)\). Usando una tabla Z o software, \(P(Z \le -1.58) \approx 0.0571\).
Decisión: Como \(p = 0.0571 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para rechazar la afirmación de la compañía de que al menos el 80% de sus clientes están satisfechos.
Solución en R:
# Datos del análisis
proporcion_muestra <- 0.76
proporcion_nula <- 0.80
tamano_muestra <- 250
alfa <- 0.01
# Verificación de condiciones para prueba z
if (tamano_muestra * proporcion_nula < 10 | tamano_muestra * (1 - proporcion_nula) < 10) {
warning("Advertencia: Las condiciones para la aproximación normal no se cumplen")
}
# Cálculo del estadístico z
error_estandar <- sqrt((proporcion_nula * (1 - proporcion_nula)) / tamano_muestra)
z_estadistico <- (proporcion_muestra - proporcion_nula) / error_estandar
cat("Estadístico z calculado:", round(z_estadistico, 4), "\n")
## Estadístico z calculado: -1.5811
cat("Error estándar:", round(error_estandar, 5), "\n")
## Error estándar: 0.0253
# Cálculo del valor p (prueba unilateral inferior)
p_valor <- pnorm(z_estadistico, lower.tail = TRUE)
cat("Valor p obtenido:", format.pval(p_valor, digits = 4), "\n")
## Valor p obtenido: 0.05692
# Toma de decisión
decision <- ifelse(p_valor <= alfa,
"Rechazamos la hipótesis nula (p ≤ α)",
"No rechazamos la hipótesis nula (p > α)")
cat("Conclusión:", decision, "\n")
## Conclusión: No rechazamos la hipótesis nula (p > α)
# Visualización mejorada
library(ggplot2)
library(dplyr)
# Valor crítico
z_critico <- qnorm(alfa)
# Creación del gráfico profesional
data.frame(x = seq(-4, 4, 0.01)) %>%
ggplot(aes(x = x)) +
# 1. Distribución normal base
stat_function(fun = dnorm, color = "gray40", linewidth = 0.8) +
# 2. Región crítica (rojo)
stat_function(fun = dnorm, geom = "area",
fill = "#E74C3C", alpha = 0.4,
xlim = c(-4, z_critico)) +
# 3. Área del valor p (azul)
stat_function(fun = dnorm, geom = "area",
fill = "#3498DB", alpha = 0.5,
xlim = c(-4, z_estadistico)) +
# 4. Líneas de referencia
geom_vline(xintercept = z_critico,
linetype = "dashed", color = "#C0392B", linewidth = 1.2) +
geom_vline(xintercept = z_estadistico,
color = "#27AE60", linewidth = 1.5) +
# 5. Anotaciones profesionales
annotate("text", x = z_critico - 0.5, y = 0.1,
label = sprintf("z crítico\n= %.2f", z_critico),
color = "#C0392B", size = 4, hjust = 1) +
annotate("text", x = z_estadistico, y = 0.2,
label = sprintf("z = %.2f", z_estadistico),
color = "#27AE60", vjust = -0.8, size = 4.5) +
annotate("text", x = -2.5, y = 0.15,
label = sprintf("Valor p = %.4f", p_valor),
color = "#3498DB", size = 5, fontface = "bold") +
# 6. Elementos estéticos y formato
labs(title = "Prueba Z para Proporciones (Unilateral Inferior)",
subtitle = sprintf("H₀: π ≥ %.2f vs H₁: π < %.2f | α = %.2f | n = %d",
proporcion_nula, proporcion_nula, alfa, tamano_muestra),
x = "Estadístico Z",
y = "Densidad de probabilidad") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 15),
plot.subtitle = element_text(hjust = 0.5, size = 12),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13),
axis.text = element_text(size = 11),
plot.margin = margin(15, 15, 15, 15)
) +
scale_x_continuous(breaks = seq(-4, 4, 1)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
Región: El gráfico muestra la distribución normal estándar. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico z observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Un político cree que su tasa de aprobación es mayor del 45%. Se realiza una encuesta a 300 votantes y se encuentra que 141 lo aprueban. ¿Hay evidencia suficiente para apoyar su creencia a un nivel de significancia de \(\alpha = 0.10\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Verificación de condiciones: \(n = 300\), \(p_0 = 0.45\). \(np_0 = 300 \times 0.45 = 135 \ge 10\), \(n(1-p_0) = 300 \times 0.55 = 165 \ge 10\). Las condiciones se cumplen.
Proporción muestral: \(\hat{p} = 141 / 300 = 0.47\)
Estadístico de prueba: \[z = \frac{0.47 - 0.45}{\sqrt{\frac{0.45(1 - 0.45)}{300}}} = \frac{0.02}{\sqrt{\frac{0.2475}{300}}} = \frac{0.02}{\sqrt{0.000825}} = \frac{0.02}{0.0287} \approx 0.70\]
Valor p: Para una prueba de cola superior, \(p = P(Z \ge 0.70)\). Usando una tabla Z o software, \(P(Z \ge 0.70) \approx 1 - 0.7580 = 0.2420\).
Decisión: Como \(p = 0.2420 > \alpha = 0.10\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.10 para apoyar la creencia del político de que su tasa de aprobación es mayor del 45%.
Solución en R:
# Datos del análisis
proporcion_muestra <- 141 / 300 # 141 éxitos en 300 ensayos
proporcion_nula <- 0.45
tamano_muestra <- 300
alfa <- 0.10
# Verificación de condiciones para prueba z
np <- tamano_muestra * proporcion_nula
nq <- tamano_muestra * (1 - proporcion_nula)
if (np < 10 | nq < 10) {
warning("Advertencia: Las condiciones para la aproximación normal no se cumplen (np = ",
round(np, 1), ", nq = ", round(nq, 1), ")")
} else {
cat("Condiciones para aproximación normal cumplidas (np =", round(np, 1), ", nq =", round(nq, 1), ")\n")
}
## Condiciones para aproximación normal cumplidas (np = 135 , nq = 165 )
# Cálculos intermedios
error_estandar <- sqrt((proporcion_nula * (1 - proporcion_nula)) / tamano_muestra)
cat("Proporción muestral:", round(proporcion_muestra, 4), "\n")
## Proporción muestral: 0.47
cat("Error estándar:", round(error_estandar, 5), "\n")
## Error estándar: 0.02872
# Cálculo del estadístico z
z_estadistico <- (proporcion_muestra - proporcion_nula) / error_estandar
cat("Estadístico z calculado:", round(z_estadistico, 4), "\n")
## Estadístico z calculado: 0.6963
# Cálculo del valor p (prueba unilateral superior)
p_valor <- pnorm(z_estadistico, lower.tail = FALSE)
cat("Valor p obtenido:", format.pval(p_valor, digits = 4), "\n")
## Valor p obtenido: 0.2431
# Toma de decisión
decision <- ifelse(p_valor <= alfa,
paste("Rechazamos H₀ (p =", round(p_valor, 4), "≤ α =", alfa, ")"),
paste("No rechazamos H₀ (p =", round(p_valor, 4), "> α =", alfa, ")"))
cat("Conclusión:", decision, "\n")
## Conclusión: No rechazamos H₀ (p = 0.2431 > α = 0.1 )
# Visualización mejorada
library(ggplot2)
library(dplyr)
# Valor crítico
z_critico <- qnorm(1 - alfa)
# Creación del gráfico profesional
data.frame(x = seq(-3, 4, 0.01)) %>% # Rango ajustado
ggplot(aes(x = x)) +
# 1. Distribución normal base
stat_function(fun = dnorm, color = "gray40", linewidth = 0.8) +
# 2. Región crítica (rojo)
stat_function(fun = dnorm, geom = "area",
fill = "#e63946", alpha = 0.4,
xlim = c(z_critico, 4)) +
# 3. Área del valor p (azul)
stat_function(fun = dnorm, geom = "area",
fill = "#457b9d", alpha = 0.5,
xlim = c(z_estadistico, 4)) +
# 4. Líneas de referencia
geom_vline(xintercept = z_critico,
linetype = "dashed", color = "#d62828", linewidth = 1.2) +
geom_vline(xintercept = z_estadistico,
color = "#2a9d8f", linewidth = 1.5) +
# 5. Anotaciones profesionales
annotate("text", x = z_critico + 0.3, y = 0.1,
label = sprintf("z crítico = %.2f", z_critico),
color = "#d62828", size = 4, hjust = 0) +
annotate("text", x = z_estadistico, y = 0.25,
label = sprintf("z = %.2f", z_estadistico),
color = "#2a9d8f", vjust = -0.8, size = 4.5) +
annotate("text", x = 2.5, y = 0.15,
label = sprintf("Valor p = %.4f", p_valor),
color = "#457b9d", size = 5, fontface = "bold") +
# 6. Elementos estéticos y formato
labs(title = "Prueba Z para Proporciones (Unilateral Superior)",
subtitle = sprintf("H₀: π ≤ %.2f vs H₁: π > %.2f | α = %.2f | n = %d",
proporcion_nula, proporcion_nula, alfa, tamano_muestra),
x = "Estadístico Z",
y = "Densidad de probabilidad") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 15),
plot.subtitle = element_text(hjust = 0.5, size = 12),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13),
axis.text = element_text(size = 11),
plot.margin = margin(15, 15, 15, 15)
) +
scale_x_continuous(breaks = seq(-3, 4, 1)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
# Instalar R y rpy2 |
#!apt-get install -y r-base |
!pip install rpy2 |
# Importar rpy2 para ejecutar código en R |
#%load_ext rpy2.ipython |
#%%R |
Problema: Se quiere evaluar la efectividad de un nuevo programa de entrenamiento. Se midió el tiempo (en segundos) que tardaron 10 atletas en correr 400 metros antes y después del programa. Los datos son:
Atleta | Antes | Después | Diferencia (Antes - Después) |
---|---|---|---|
1 | 55.2 | 54.1 | 1.1 |
2 | 56.8 | 55.5 | 1.3 |
3 | 57.1 | 56.9 | 0.2 |
4 | 58.0 | 57.2 | 0.8 |
5 | 54.9 | 54.9 | 0.0 |
6 | 56.3 | 55.8 | 0.5 |
7 | 55.5 | 55.0 | 0.5 |
8 | 57.5 | 56.6 | 0.9 |
9 | 56.0 | 55.9 | 0.1 |
10 | 57.8 | 57.0 | 0.8 |
¿Hay evidencia suficiente para decir que el programa de entrenamiento tiene un efecto significativo en el tiempo de carrera a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Diferencias individuales: (Calculadas en la tabla)
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales de las diferencias:
Estadístico de prueba: \[t = \frac{0.62 - 0}{0.363 / \sqrt{10}} = \frac{0.62}{0.1147} \approx 5.405\]
Grados de libertad: \(gl = n - 1 = 10 - 1 = 9\)
Valor p: Para una prueba de dos colas, \(p = 2 \times P(|T_{9}| \ge |5.405|) = 2 \times P(T_{9} \ge 5.405)\). Usando software, \(P(T_{9} \ge 5.405) \approx 0.0002\). \[p = 2 \times 0.0002 = 0.0004\]
Decisión: Como \(p = 0.0004 \le \alpha = 0.05\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que el programa de entrenamiento tiene un efecto significativo en el tiempo de carrera de los atletas.
Solución en R:
# Datos
antes <- c(55.2, 56.8, 57.1, 58.0, 54.9, 56.3, 55.5, 57.5, 56.0, 57.8)
despues <- c(54.1, 55.5, 56.9, 57.2, 54.9, 55.8, 55.0, 56.6, 55.9, 57.0)
diferencias <- antes - despues
n <- length(diferencias)
media_d <- mean(diferencias)
sd_d <- sd(diferencias)
alfa <- 0.05
gl <- n - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_d - 0) / (sd_d / sqrt(n))
cat("Estadístico t:", t_estadistico, "\n")
## Estadístico t: 4.516479
# Calcular el valor p (prueba de dos colas)
p_valor <- 2 * pt(abs(t_estadistico), df = gl, lower.tail = FALSE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.001454121
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## Rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear el gráfico
df <- data.frame(x = seq(-4, 4, 0.01))
t_critico <- qt(1 - alfa/2, df = gl)
ggplot(df, aes(x = x)) +
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (roja)
geom_area(data = subset(df, x < -t_critico),
aes(y = dt(x, df = gl)), fill = "red", alpha = 0.5) +
geom_area(data = subset(df, x > t_critico),
aes(y = dt(x, df = gl)), fill = "red", alpha = 0.5) +
# Valor p (amarillo)
geom_area(data = subset(df, x > abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "yellow", alpha = 0.5) +
geom_area(data = subset(df, x < -abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "yellow", alpha = 0.5) +
# Líneas críticas
geom_vline(xintercept = c(-t_critico, t_critico), linetype = "dashed", color = "red") +
# Línea del estadístico observado
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1) +
# Anotaciones
annotate("text", x = -t_critico - 0.5, y = 0.05, label = "-t crítico", color = "red") +
annotate("text", x = t_critico + 0.5, y = 0.05, label = "t crítico", color = "red") +
annotate("text", x = t_estadistico + 0.5, y = 0.1, label = "t observado", color = "blue") +
annotate("text", x = 0, y = 0.2, label = paste("Valor p =", round(p_valor, 4)), color = "black") +
labs(title = "Prueba t para la diferencia de medias (pareadas, dos colas)",
x = "Estadístico t",
y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución t con 9 grados de libertad. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico t observado. Las áreas amarillas en las colas representan el valor p.
Problema: Se quiere saber si un nuevo método de enseñanza aumenta la puntuación de los estudiantes en un examen. Se midió la puntuación de 15 estudiantes antes y después de aplicar el método. Se calcula la diferencia (Después - Antes) para cada estudiante. La media de las diferencias es \(\bar{d} = 3.5\) y la desviación estándar de las diferencias es \(s_d = 2.0\). ¿Hay evidencia suficiente para decir que el método aumenta las puntuaciones a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Diferencias individuales: (Resumidas por \(\bar{d}\) y \(s_d\))
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales de las diferencias: \(\bar{d} = 3.5\), \(s_d = 2.0\), \(n = 15\)
Estadístico de prueba: \[t = \frac{3.5 - 0}{2.0 / \sqrt{15}} = \frac{3.5}{0.516} \approx 6.783\]
Grados de libertad: \(gl = n - 1 = 15 - 1 = 14\)
Valor p: Para una prueba de cola superior, \(p = P(T_{14} \ge 6.783)\). Usando software, \(P(T_{14} \ge 6.783) \approx 0.000003\).
Decisión: Como \(p \approx 0.000003 \le \alpha = 0.01\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.01 para decir que el nuevo método de enseñanza aumenta significativamente las puntuaciones de los estudiantes en el examen.
Solución en R:
# Datos resumidos
media_d <- 3.5
sd_d <- 2.0
n <- 15
alfa <- 0.01
gl <- n - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_d - 0) / (sd_d / sqrt(n))
cat("Estadístico t:", round(t_estadistico, 4), "\n")
## Estadístico t: 6.7777
# Calcular el valor p (prueba de cola superior)
p_valor <- pt(t_estadistico, df = gl, lower.tail = FALSE)
cat("Valor p:", format.pval(p_valor, digits = 4), "\n")
## Valor p: 4.456e-06
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## Rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
# Calculamos valores importantes
t_critico <- qt(1 - alfa, df = gl)
x_vals <- seq(-4, max(4, t_estadistico + 1), 0.01) # Ajustamos el rango según el t observado
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución base
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (roja)
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "red", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > t_estadistico),
aes(y = dt(x, df = gl)), fill = "yellow", alpha = 0.3) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.1,
label = paste("t crítico =", round(t_critico, 3)),
color = "red", hjust = 1.1) +
annotate("text", x = t_estadistico, y = 0.15,
label = paste("t =", round(t_estadistico, 3)),
color = "blue", hjust = -0.1) +
annotate("text", x = mean(c(t_estadistico, max(x_vals))), y = 0.05,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkgoldenrod", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de una cola (cola superior)",
subtitle = paste("Grados de libertad =", gl),
x = "Valor del estadístico t",
y = "Densidad de probabilidad") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5))
Región: El gráfico muestra la distribución t con 14 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola derecha representa el valor p.
Problema: Se mide la presión arterial sistólica de 8 pacientes antes y después de tomar un nuevo medicamento. Se calcula la diferencia (Después - Antes). La media de las diferencias es \(\bar{d} = -2.5\) mmHg y la desviación estándar de las diferencias es \(s_d = 1.5\) mmHg. ¿Hay evidencia suficiente para decir que el medicamento reduce la presión arterial a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Diferencias individuales: (Resumidas por \(\bar{d}\) y \(s_d\))
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales de las diferencias: \(\bar{d} = -2.5\), \(s_d = 1.5\), \(n = 8\)
Estadístico de prueba: \[t = \frac{-2.5 - 0}{1.5 / \sqrt{8}} = \frac{-2.5}{0.530} \approx -4.717\]
Grados de libertad: \(gl = n - 1 = 8 - 1 = 7\)
Valor p: Para una prueba de cola inferior, \(p = P(T_{7} \le -4.717)\). Usando software, \(P(T_{7} \le -4.717) \approx 0.0014\).
Decisión: Como \(p \approx 0.0014 \le \alpha = 0.05\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que el medicamento reduce significativamente la presión arterial sistólica de los pacientes.
Solución en R:
# Datos resumidos
media_d <- -2.5
sd_d <- 1.5
n <- 8
alfa <- 0.05
gl <- n - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_d - 0) / (sd_d / sqrt(n))
cat("Estadístico t:", round(t_estadistico, 4), "\n")
## Estadístico t: -4.714
# Calcular el valor p (prueba de cola inferior)
p_valor <- pt(t_estadistico, df = gl, lower.tail = TRUE)
cat("Valor p:", format.pval(p_valor, digits = 4), "\n")
## Valor p: 0.001086
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## Rechazamos la hipótesis nula.
# Visualización mejorada
library(ggplot2)
# Calculamos valores importantes
t_critico <- qt(alfa, df = gl)
x_vals <- seq(min(-4, t_estadistico - 1), max(4, abs(t_estadistico) + 1), 0.01)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución base
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (roja)
geom_area(data = subset(data.frame(x = x_vals), x < t_critico),
aes(y = dt(x, df = gl)), fill = "red", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < t_estadistico),
aes(y = dt(x, df = gl)), fill = "yellow", alpha = 0.3) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.1,
label = paste("t crítico =", round(t_critico, 3)),
color = "red", hjust = -0.1) +
annotate("text", x = t_estadistico, y = 0.15,
label = paste("t =", round(t_estadistico, 3)),
color = "blue", hjust = 1.1) +
annotate("text", x = mean(c(min(x_vals), t_estadistico)), y = 0.05,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkgoldenrod", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de una cola (cola inferior)",
subtitle = paste("Grados de libertad =", gl),
x = "Valor del estadístico t",
y = "Densidad de probabilidad") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5))
Región: El gráfico muestra la distribución t con 7 grados de libertad. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Un estudio evalúa si un nuevo tipo de neumático mejora el rendimiento de combustible en al menos 2 km/litro. Se midió el rendimiento de 6 vehículos con los neumáticos antiguos y los nuevos, y se calculó la diferencia (Nuevo - Antiguo). La media de las diferencias es \(\bar{d} = 2.3\) km/litro y la desviación estándar de las diferencias es \(s_d = 0.8\) km/litro. ¿Hay evidencia suficiente para apoyar la afirmación a un nivel de significancia de \(\alpha = 0.10\)?
Solución en Markdown:
Diferencias individuales: (Resumidas por \(\bar{d}\) y \(s_d\))
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Estadísticos muestrales de las diferencias: \(\bar{d} = 2.3\), \(s_d = 0.8\), \(n = 6\)
Estadístico de prueba: \[t = \frac{2.3 - 2}{0.8 / \sqrt{6}} = \frac{0.3}{0.327} \approx 0.917\]
Grados de libertad: \(gl = n - 1 = 6 - 1 = 5\)
Valor p: Para una prueba de cola superior, \(p = P(T_{5} \ge 0.917)\). Usando software, \(P(T_{5} \ge 0.917) \approx 0.204\).
Decisión: Como \(p \approx 0.204 > \alpha = 0.10\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.10 para apoyar la afirmación de que el nuevo tipo de neumático mejora el rendimiento de combustible en más de 2 km/litro en promedio.
Solución en R:
# Datos resumidos
# Parámetros del problema
media_d <- 2.3
sd_d <- 0.8
n <- 6
mu_d0 <- 2
alfa <- 0.10
gl <- n - 1
# Calcular el estadístico de prueba t
t_estadistico <- (media_d - mu_d0) / (sd_d / sqrt(n))
cat("Estadístico t:", round(t_estadistico, 4), "\n")
## Estadístico t: 0.9186
# Calcular el valor p (prueba de cola superior)
p_valor <- pt(t_estadistico, df = gl, lower.tail = FALSE)
cat("Valor p:", format.pval(p_valor, digits = 3), "\n")
## Valor p: 0.2
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula (hay evidencia de que μ_d >", mu_d0, ").\n")
} else {
cat("No rechazamos la hipótesis nula (no hay evidencia suficiente de que μ_d >", mu_d0, ").\n")
}
## No rechazamos la hipótesis nula (no hay evidencia suficiente de que μ_d > 2 ).
# Visualización mejorada
library(ggplot2)
# Valores críticos
t_critico <- qt(1 - alfa, df = gl)
x_max <- max(4, t_estadistico + 1, t_critico + 1) # Rango dinámico
ggplot(data.frame(x = seq(-3, x_max, 0.01)), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (roja)
geom_area(data = data.frame(x = seq(t_critico, x_max, 0.01)),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.4) +
# Valor p (amarillo)
geom_area(data = data.frame(x = seq(t_estadistico, x_max, 0.01)),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.5) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.1,
label = paste("t crítico =", round(t_critico, 3)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.15,
label = paste("t =", round(t_estadistico, 3)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = (t_estadistico + x_max)/2, y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de una cola superior",
subtitle = paste("Hipótesis: μ_d >", mu_d0, "| Grados libertad =", gl),
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = paste("Media observada =", media_d, "| Desviación estándar =", sd_d)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 1, size = 9, color = "gray30"))
Región: El gráfico muestra la distribución t con 5 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola derecha representa el valor p.
Cuando se tienen dos muestras independientes y se conoce la varianza de cada población, podemos realizar una prueba z para comparar las medias de estas dos poblaciones. La independencia de las muestras significa que las observaciones en un grupo no están relacionadas con las observaciones en el otro grupo.
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales y poblacionales:
Estadístico de prueba: \[z = \frac{(10.5 - 10.2) - 0}{\sqrt{\frac{0.8^2}{35} + \frac{0.6^2}{40}}} = \frac{0.3}{\sqrt{\frac{0.64}{35} + \frac{0.36}{40}}} = \frac{0.3}{\sqrt{0.0183 + 0.009}} = \frac{0.3}{\sqrt{0.0273}} \approx \frac{0.3}{0.165} \approx 1.818\]
Valor p: Para una prueba de dos colas, \(p = 2 \times P(Z \ge |1.818|) = 2 \times P(Z \ge 1.818)\). Usando una tabla Z o software, \(P(Z \ge 1.818) \approx 1 - 0.9655 = 0.0345\). \[p = 2 \times 0.0345 = 0.0690\]
Decisión: Como \(p = 0.0690 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que hay una diferencia significativa en el rendimiento promedio de los dos tipos de gasolina.
Solución en R:
# Datos
media_muestra1 <- 10.5
n1 <- 35
sigma1 <- 0.8
media_muestra2 <- 10.2
n2 <- 40
sigma2 <- 0.6
alfa <- 0.05
# Calcular el estadístico de prueba z
diferencia_medias <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sigma1^2 / n1) + (sigma2^2 / n2))
z_estadistico <- diferencia_medias / error_estandar
cat("Diferencia de medias:", round(diferencia_medias, 4), "\n")
## Diferencia de medias: 0.3
cat("Error estándar:", round(error_estandar, 4), "\n")
## Error estándar: 0.1652
cat("Estadístico z:", round(z_estadistico, 4), "\n")
## Estadístico z: 1.8162
# Calcular el valor p (prueba de dos colas)
p_valor <- 2 * pnorm(abs(z_estadistico), lower.tail = FALSE)
cat("Valor p:", format.pval(p_valor, digits = 4), "\n")
## Valor p: 0.06935
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula (existe diferencia significativa entre las medias).\n")
} else {
cat("No rechazamos la hipótesis nula (no hay evidencia suficiente de diferencia).\n")
}
## No rechazamos la hipótesis nula (no hay evidencia suficiente de diferencia).
# Visualización mejorada
library(ggplot2)
# Valores críticos
z_critico <- qnorm(1 - alfa/2)
x_lim <- max(4, abs(z_estadistico) + 1) # Límite dinámico del gráfico
# Crear dataframe para las áreas
df <- data.frame(x = seq(-x_lim, x_lim, 0.01))
df$y <- dnorm(df$x)
# Gráfico
ggplot(df, aes(x = x)) +
# Distribución normal
geom_line(aes(y = y)) +
# Regiones críticas (rojo)
geom_area(data = subset(df, x < -z_critico),
aes(y = y), fill = "#FF6B6B", alpha = 0.4) +
geom_area(data = subset(df, x > z_critico),
aes(y = y), fill = "#FF6B6B", alpha = 0.4) +
# Valor p (amarillo)
geom_area(data = subset(df, x < -abs(z_estadistico)),
aes(y = y), fill = "#FFD166", alpha = 0.5) +
geom_area(data = subset(df, x > abs(z_estadistico)),
aes(y = y), fill = "#FFD166", alpha = 0.5) +
# Líneas de referencia
geom_vline(xintercept = c(-z_critico, z_critico),
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = -z_critico, y = 0.05,
label = paste("-z* =", round(-z_critico, 3)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 3)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = z_estadistico, y = 0.15,
label = paste("z =", round(z_estadistico, 3)),
color = "blue", hjust = ifelse(z_estadistico > 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = 0, y = 0.3,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba Z para diferencia de medias (dos colas)",
subtitle = paste("Comparación de dos muestras independientes (α =", alfa, ")"),
x = "Estadístico Z",
y = "Densidad de probabilidad",
caption = paste("Muestra 1: n =", n1, "media =", media_muestra1, "σ =", sigma1,
"\nMuestra 2: n =", n2, "media =", media_muestra2, "σ =", sigma2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0, size = 9, color = "gray30"),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución normal estándar. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico z observado. Las áreas amarillas en las colas representan el valor p.
Problema: Un fabricante afirma que las baterías de su nueva línea duran más en promedio que las de su línea anterior. Se tomaron muestras aleatorias de la duración (en horas) de ambas líneas. Para la nueva línea (muestra 1), se midieron 20 baterías con una media de \(\bar{x}_1 = 25.5\) horas. Para la línea anterior (muestra 2), se midieron 25 baterías con una media de \(\bar{x}_2 = 24.8\) horas. Se sabe que las desviaciones estándar poblacionales son \(\sigma_1 = 1.2\) horas y \(\sigma_2 = 1.5\) horas. ¿Hay evidencia suficiente para apoyar la afirmación del fabricante a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales y poblacionales:
Estadístico de prueba: \[z = \frac{(25.5 - 24.8) - 0}{\sqrt{\frac{1.2^2}{20} + \frac{1.5^2}{25}}} = \frac{0.7}{\sqrt{\frac{1.44}{20} + \frac{2.25}{25}}} = \frac{0.7}{\sqrt{0.072 + 0.09}} = \frac{0.7}{\sqrt{0.162}} \approx \frac{0.7}{0.402} \approx 1.741\]
Valor p: Para una prueba de cola superior, \(p = P(Z \ge 1.741)\). Usando una tabla Z o software, \(P(Z \ge 1.741) \approx 1 - 0.9592 = 0.0408\).
Decisión: Como \(p = 0.0408 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para apoyar la afirmación del fabricante de que la nueva línea de baterías dura más en promedio.
Solución en R:
# Datos
media_muestra1 <- 25.5
n1 <- 20
sigma1 <- 1.2
media_muestra2 <- 24.8
n2 <- 25
sigma2 <- 1.5
alfa <- 0.01
# 1. Cálculos estadísticos
diferencia <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sigma1^2/n1) + (sigma2^2/n2))
z_estadistico <- diferencia / error_estandar
z_critico <- qnorm(1 - alfa)
# 2. Resultados numéricos
cat("--- Resultados de la prueba Z ---\n")
## --- Resultados de la prueba Z ---
cat(sprintf("Diferencia de medias: %.3f\n", diferencia))
## Diferencia de medias: 0.700
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 0.402
cat(sprintf("Estadístico z: %.3f\n", z_estadistico))
## Estadístico z: 1.739
cat(sprintf("Valor crítico (z*): %.3f\n", z_critico))
## Valor crítico (z*): 2.326
# 3. Valor p y decisión
p_valor <- pnorm(z_estadistico, lower.tail = FALSE)
cat(sprintf("Valor p: %.4f\n", p_valor))
## Valor p: 0.0410
if(p_valor <= alfa) {
cat("Conclusión: Rechazamos H0 (p =", format.pval(p_valor), "< α =", alfa, ")\n")
cat("Hay evidencia suficiente para concluir que μ1 > μ2\n")
} else {
cat("Conclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")\n")
cat("No hay evidencia suficiente para concluir que μ1 > μ2\n")
}
## Conclusión: No rechazamos H0 (p = 0.041003 > α = 0.01 )
## No hay evidencia suficiente para concluir que μ1 > μ2
# 4. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico
lim_superior <- max(4, z_estadistico + 1, z_critico + 1)
x_vals <- seq(-3, lim_superior, 0.01)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución normal
stat_function(fun = dnorm, color = "black") +
# Región crítica (rojo)
geom_area(data = subset(data.frame(x = x_vals), x > z_critico),
aes(y = dnorm(x)), fill = "red", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > z_estadistico),
aes(y = dnorm(x)), fill = "yellow", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 3)),
color = "red", hjust = -0.1) +
annotate("text", x = z_estadistico, y = 0.1,
label = paste("z =", round(z_estadistico, 3)),
color = "blue", hjust = -0.1) +
annotate("label", x = mean(c(z_estadistico, lim_superior)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
fill = "yellow", alpha = 0.7) +
# Configuración del gráfico
labs(title = "Prueba Z de cola superior para diferencia de medias",
subtitle = paste("Comparación: μ1 =", media_muestra1, "vs μ2 =", media_muestra2),
x = "Estadístico Z",
y = "Densidad",
caption = paste("n1 =", n1, "σ1 =", sigma1, "| n2 =", n2, "σ2 =", sigma2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9))
Cuando se tienen dos muestras independientes y las varianzas poblacionales son desconocidas pero se asume que son iguales (\(\sigma_1^2 = \sigma_2^2 = \sigma^2\)), se utiliza una prueba t de Student con grados de libertad combinados (pooled).
Problema: Se quiere comparar el rendimiento promedio en una prueba de dos grupos de estudiantes que utilizaron diferentes métodos de estudio. El grupo 1 (n=15) tuvo una media de \(\bar{x}_1 = 82\) y una desviación estándar de \(s_1 = 6\). El grupo 2 (n=12) tuvo una media de \(\bar{x}_2 = 78\) y una desviación estándar de \(s_2 = 8\). Asumiendo que las varianzas de las poblaciones son iguales, ¿hay una diferencia significativa en el rendimiento promedio de los dos métodos de estudio a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Varianza combinada: \[s_p^2 = \frac{(15 - 1)6^2 + (12 - 1)8^2}{15 + 12 - 2} = \frac{14 \times 36 + 11 \times 64}{25} = \frac{504 + 704}{25} = \frac{1208}{25} = 48.32\] \[s_p = \sqrt{48.32} \approx 6.951\]
Estadístico de prueba: \[t = \frac{(82 - 78) - 0}{6.951 \sqrt{\frac{1}{15} + \frac{1}{12}}} = \frac{4}{6.951 \sqrt{0.0667 + 0.0833}} = \frac{4}{6.951 \sqrt{0.15}} = \frac{4}{6.951 \times 0.387} \approx \frac{4}{2.69} \approx 1.487\]
Grados de libertad: \(gl = 15 + 12 - 2 = 25\)
Valor p: Para una prueba de dos colas, \(p = 2 \times P(|T_{25}| \ge |1.487|) = 2 \times P(T_{25} \ge 1.487)\). Usando software, \(P(T_{25} \ge 1.487) \approx 0.074\). \[p = 2 \times 0.074 = 0.148\]
Decisión: Como \(p = 0.148 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que hay una diferencia significativa en el rendimiento promedio de los dos métodos de estudio (asumiendo varianzas iguales).
Solución en R:
# Datos
media_muestra1 <- 82
sd_muestra1 <- 6
n1 <- 15
media_muestra2 <- 78
sd_muestra2 <- 8
n2 <- 12
alfa <- 0.05
gl <- n1 + n2 - 2 # Grados de libertad
# 1. Cálculos preliminares
sp_cuadrado <- ((n1 - 1) * sd_muestra1^2 + (n2 - 1) * sd_muestra2^2) / gl
sp <- sqrt(sp_cuadrado)
error_estandar <- sp * sqrt(1/n1 + 1/n2)
diferencia <- media_muestra1 - media_muestra2
cat("--- Resultados de la prueba t ---\n")
## --- Resultados de la prueba t ---
cat(sprintf("Varianza combinada (sp²): %.3f\n", sp_cuadrado))
## Varianza combinada (sp²): 48.320
cat(sprintf("Desviación estándar combinada (sp): %.3f\n", sp))
## Desviación estándar combinada (sp): 6.951
cat(sprintf("Diferencia de medias: %.2f\n", diferencia))
## Diferencia de medias: 4.00
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 2.692
# 2. Estadístico de prueba y valor p
t_estadistico <- diferencia / error_estandar
t_critico <- qt(1 - alfa/2, df = gl)
p_valor <- 2 * pt(abs(t_estadistico), df = gl, lower.tail = FALSE)
cat(sprintf("\nEstadístico t: %.3f\n", t_estadistico))
##
## Estadístico t: 1.486
cat(sprintf("Valores críticos: ±%.3f\n", t_critico))
## Valores críticos: ±2.060
cat(sprintf("Valor p: %.4f\n", p_valor))
## Valor p: 0.1498
# 3. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "< α =", alfa, ")")
cat("\nExiste evidencia significativa de diferencia entre las medias poblacionales")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente de diferencia entre las medias poblacionales")
}
##
## Conclusión: No rechazamos H0 (p = 0.14984 > α = 0.05 )
## No hay evidencia suficiente de diferencia entre las medias poblacionales
# 4. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico
x_lim <- max(4, abs(t_estadistico) + 1, t_critico + 1)
x_vals <- seq(-x_lim, x_lim, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Regiones críticas (rojo)
geom_area(data = subset(data.frame(x = x_vals), x < -t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < -abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
geom_area(data = subset(data.frame(x = x_vals), x > abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = c(-t_critico, t_critico),
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = -t_critico, y = 0.05,
label = paste("t* =", round(-t_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = ifelse(t_estadistico > 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = 0, y = 0.25,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t para dos muestras independientes",
subtitle = "Hipótesis: μ1 ≠ μ2 (dos colas) | Varianzas iguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con 25 grados de libertad. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico t observado. Las áreas amarillas en las colas representan el valor p.
Problema: Un estudio compara el tiempo de reacción (en milisegundos) de dos grupos de personas ante un estímulo visual. El grupo A (n=20) tuvo una media de \(\bar{x}_1 = 250\) ms y una desviación estándar de \(s_1 = 25\) ms. El grupo B (n=18) tuvo una media de \(\bar{x}_2 = 235\) ms y una desviación estándar de \(s_2 = 30\) ms. Asumiendo varianzas iguales, ¿hay evidencia suficiente para decir que el tiempo de reacción promedio del grupo A es mayor que el del grupo B a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Varianza combinada: \[s_p^2 = \frac{(20 - 1)25^2 + (18 - 1)30^2}{20 + 18 - 2} = \frac{19 \times 625 + 17 \times 900}{36} = \frac{11875 + 15300}{36} = \frac{27175}{36} \approx 754.86\] \[s_p = \sqrt{754.86} \approx 27.475\]
Estadístico de prueba: \[t = \frac{(250 - 235) - 0}{27.475 \sqrt{\frac{1}{20} + \frac{1}{18}}} = \frac{15}{27.475 \sqrt{0.05 + 0.0556}} = \frac{15}{27.475 \sqrt{0.1056}} = \frac{15}{27.475 \times 0.325} \approx \frac{15}{8.92} \approx 1.682\]
Grados de libertad: \(gl = 20 + 18 - 2 = 36\)
Valor p: Para una prueba de cola superior, \(p = P(T_{36} \ge 1.682)\). Usando software, \(P(T_{36} \ge 1.682) \approx 0.050\).
Decisión: Como \(p = 0.050 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para decir que el tiempo de reacción promedio del grupo A es significativamente mayor que el del grupo B (asumiendo varianzas iguales).
Solución en R:
# Datos completos
media_muestra1 <- 245 # Valor faltante en el código original
sd_muestra1 <- 28 # Valor faltante en el código original
n1 <- 20
media_muestra2 <- 235
sd_muestra2 <- 30
n2 <- 18
alfa <- 0.01
gl <- n1 + n2 - 2
# 1. Cálculos preliminares
sp_cuadrado <- ((n1 - 1) * sd_muestra1^2 + (n2 - 1) * sd_muestra2^2) / gl
sp <- sqrt(sp_cuadrado)
error_estandar <- sp * sqrt(1/n1 + 1/n2)
diferencia <- media_muestra1 - media_muestra2
cat("--- Resultados de la prueba t ---\n")
## --- Resultados de la prueba t ---
cat(sprintf("Varianza combinada (sp²): %.2f\n", sp_cuadrado))
## Varianza combinada (sp²): 838.78
cat(sprintf("Desviación estándar combinada (sp): %.2f\n", sp))
## Desviación estándar combinada (sp): 28.96
cat(sprintf("Diferencia de medias: %.1f\n", diferencia))
## Diferencia de medias: 10.0
cat(sprintf("Error estándar: %.2f\n", error_estandar))
## Error estándar: 9.41
# 2. Estadístico de prueba y valor p
t_estadistico <- diferencia / error_estandar
t_critico <- qt(1 - alfa, df = gl)
p_valor <- pt(t_estadistico, df = gl, lower.tail = FALSE)
cat(sprintf("\nEstadístico t: %.3f\n", t_estadistico))
##
## Estadístico t: 1.063
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: 2.434
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.14748
# 3. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "< α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 > μ2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 > μ2")
}
##
## Conclusión: No rechazamos H0 (p = 0.14748 > α = 0.01 )
## No hay evidencia suficiente para concluir que μ1 > μ2
# 4. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-3, t_estadistico - 1)
x_lim_sup <- max(4, t_estadistico + 1, t_critico + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo)
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = mean(c(t_estadistico, x_lim_sup)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t para dos muestras independientes (cola superior)",
subtitle = "Hipótesis: μ1 > μ2 | Varianzas iguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con 36 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola derecha representa el valor p.
Problema: Se compara el rendimiento de dos tipos de fertilizante en el crecimiento de plantas. El fertilizante A (n=10) produjo una altura media de \(\bar{x}_1 = 45\) cm con una desviación estándar de \(s_1 = 5\) cm. El fertilizante B (n=14) produjo una altura media de \(\bar{x}_2 = 48\) cm con una desviación estándar de \(s_2 = 6\) cm. Asumiendo varianzas iguales, ¿hay evidencia suficiente para decir que el fertilizante A produce una altura promedio menor que el fertilizante B a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Varianza combinada: \[s_p^2 = \frac{(10 - 1)5^2 + (14 - 1)6^2}{10 + 14 - 2} = \frac{9 \times 25 + 13 \times 36}{22} = \frac{225 + 468}{22} = \frac{693}{22} \approx 31.5\] \[s_p = \sqrt{31.5} \approx 5.612\]
Estadístico de prueba: \[t = \frac{(45 - 48) - 0}{5.612 \sqrt{\frac{1}{10} + \frac{1}{14}}} = \frac{-3}{5.612 \sqrt{0.1 + 0.0714}} = \frac{-3}{5.612 \sqrt{0.1714}} = \frac{-3}{5.612 \times 0.414} \approx \frac{-3}{2.323} \approx -1.291\]
Grados de libertad: \(gl = 10 + 14 - 2 = 22\)
Valor p: Para una prueba de cola inferior, \(p = P(T_{22} \le -1.291)\). Usando software, \(P(T_{22} \le -1.291) \approx 0.105\).
Decisión: Como \(p = 0.105 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que el fertilizante A produce una altura promedio menor que el fertilizante B (asumiendo varianzas iguales).
Solución en R:
# Datos
media_muestra1 <- 45
sd_muestra1 <- 5
n1 <- 10
media_muestra2 <- 48
sd_muestra2 <- 6
n2 <- 14
alfa <- 0.05
gl <- n1 + n2 - 2
# 1. Cálculos preliminares
sp_cuadrado <- ((n1 - 1) * sd_muestra1^2 + (n2 - 1) * sd_muestra2^2) / gl
sp <- sqrt(sp_cuadrado)
error_estandar <- sp * sqrt(1/n1 + 1/n2)
diferencia <- media_muestra1 - media_muestra2
cat("--- Resultados de la prueba t ---\n")
## --- Resultados de la prueba t ---
cat(sprintf("Varianza combinada (sp²): %.2f\n", sp_cuadrado))
## Varianza combinada (sp²): 31.50
cat(sprintf("Desviación estándar combinada (sp): %.2f\n", sp))
## Desviación estándar combinada (sp): 5.61
cat(sprintf("Diferencia de medias: %.1f\n", diferencia))
## Diferencia de medias: -3.0
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 2.324
# 2. Estadístico de prueba y valor p
t_estadistico <- diferencia / error_estandar
t_critico <- qt(alfa, df = gl) # Valor crítico para cola inferior
p_valor <- pt(t_estadistico, df = gl) # Cola inferior
cat(sprintf("\nEstadístico t: %.3f\n", t_estadistico))
##
## Estadístico t: -1.291
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: -1.717
cat(sprintf("Valor p: %.4f\n", p_valor))
## Valor p: 0.1051
# 3. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 < μ2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 < μ2")
}
##
## Conclusión: No rechazamos H0 (p = 0.10505 > α = 0.05 )
## No hay evidencia suficiente para concluir que μ1 < μ2
# 4. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-4, t_estadistico - 1, t_critico - 1)
x_lim_sup <- max(4, -t_estadistico + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo - cola inferior)
geom_area(data = subset(data.frame(x = x_vals), x < t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = ifelse(t_estadistico < 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = mean(c(x_lim_inf, t_estadistico)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t para dos muestras independientes (cola inferior)",
subtitle = "Hipótesis: μ1 < μ2 | Varianzas iguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con 22 grados de libertad. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Una compañía afirma que la diferencia en el tiempo promedio de ensamblaje de un producto utilizando dos métodos diferentes es de al menos 5 minutos (Método 1 - Método 2 \(\ge\) 5). Se toman muestras: Método 1 (n=18, \(\bar{x}_1 = 32\) min, \(s_1 = 4\) min) y Método 2 (n=20, \(\bar{x}_2 = 26\) min, \(s_2 = 5\) min). Asumiendo varianzas iguales, ¿hay evidencia suficiente para rechazar la afirmación de la compañía a un nivel de significancia de \(\alpha = 0.10\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Estadísticos muestrales:
Varianza combinada: \[s_p^2 = \frac{(18 - 1)4^2 + (20 - 1)5^2}{18 + 20 - 2} = \frac{17 \times 16 + 19 \times 25}{36} = \frac{272 + 475}{36} = \frac{747}{36} \approx 20.75\] \[s_p = \sqrt{20.75} \approx 4.555\]
Estadístico de prueba: \[t = \frac{(32 - 26) - 5}{4.555 \sqrt{\frac{1}{18} + \frac{1}{20}}} = \frac{1}{4.555 \sqrt{0.0556 + 0.05}} = \frac{1}{4.555 \sqrt{0.1056}} = \frac{1}{4.555 \times 0.325} \approx \frac{1}{1.479} \approx 0.676\]
Grados de libertad: \(gl = 18 + 20 - 2 = 36\)
Valor p: Para una prueba de cola inferior, \(p = P(T_{36} \le 0.676)\). Usando software, \(P(T_{36} \le 0.676) \approx 0.75\).
Decisión: Como \(p = 0.75 > \alpha = 0.10\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.10 para rechazar la afirmación de la compañía de que la diferencia en el tiempo promedio de ensamblaje es de al menos 5 minutos.
Solución en R:
# Datos
media_muestra1 <- 32
sd_muestra1 <- 4
n1 <- 18
media_muestra2 <- 26
sd_muestra2 <- 5
n2 <- 20
mu_diff0 <- 5 # Diferencia hipotética bajo H0
alfa <- 0.10
gl <- n1 + n2 - 2
# 1. Cálculos preliminares
sp_cuadrado <- ((n1 - 1) * sd_muestra1^2 + (n2 - 1) * sd_muestra2^2) / gl
sp <- sqrt(sp_cuadrado)
error_estandar <- sp * sqrt(1/n1 + 1/n2)
diferencia_observada <- media_muestra1 - media_muestra2
cat("--- Resultados de la prueba t ---\n")
## --- Resultados de la prueba t ---
cat(sprintf("Varianza combinada (sp²): %.3f\n", sp_cuadrado))
## Varianza combinada (sp²): 20.750
cat(sprintf("Desviación estándar combinada (sp): %.3f\n", sp))
## Desviación estándar combinada (sp): 4.555
cat(sprintf("Diferencia observada: %.2f\n", diferencia_observada))
## Diferencia observada: 6.00
cat(sprintf("Diferencia hipotética (μ_diff0): %.2f\n", mu_diff0))
## Diferencia hipotética (μ_diff0): 5.00
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 1.480
# 2. Estadístico de prueba y valor p
t_estadistico <- (diferencia_observada - mu_diff0) / error_estandar
t_critico <- qt(alfa, df = gl) # Valor crítico para cola inferior
p_valor <- pt(t_estadistico, df = gl) # Cola inferior
cat(sprintf("\nEstadístico t: %.3f\n", t_estadistico))
##
## Estadístico t: 0.676
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: -1.306
cat(sprintf("Valor p: %.4f\n", p_valor))
## Valor p: 0.7482
# 3. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 - μ2 <", mu_diff0)
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 - μ2 <", mu_diff0)
}
##
## Conclusión: No rechazamos H0 (p = 0.74822 > α = 0.1 )
## No hay evidencia suficiente para concluir que μ1 - μ2 < 5
# 4. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-4, t_estadistico - 1, t_critico - 1)
x_lim_sup <- max(4, -t_estadistico + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo - cola inferior)
geom_area(data = subset(data.frame(x = x_vals), x < t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = ifelse(t_estadistico < 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = mean(c(x_lim_inf, t_estadistico)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t para diferencia de medias (cola inferior)",
subtitle = bquote("Hipótesis:" ~ mu[1] - mu[2] < .(mu_diff0) ~ "| Varianzas iguales"),
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con 36 grados de libertad. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola izquierda representa el valor p.
Cuando se tienen dos muestras independientes y las varianzas poblacionales son desconocidas y no se asume que sean iguales (\(\sigma_1^2 \neq \sigma_2^2\)), se utiliza una prueba t de Student con una corrección en los grados de libertad, a menudo referida como la prueba t de Welch o prueba t de Satterthwaite.
Problema: Se quiere comparar el salario promedio de empleados en dos empresas diferentes. En la empresa A (n=20), el salario medio muestral es \(\bar{x}_1 = \$55,000\) con una desviación estándar muestral de \(s_1 = \$5,000\). En la empresa B (n=15), el salario medio muestral es \(\bar{x}_2 = \$52,000\) con una desviación estándar muestral de \(s_2 = \$6,000\). Asumiendo que las varianzas de los salarios en las dos empresas no son iguales, ¿hay una diferencia significativa en los salarios promedio a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Estadístico de prueba: \[t = \frac{(55000 - 52000) - 0}{\sqrt{\frac{5000^2}{20} + \frac{6000^2}{15}}} = \frac{3000}{\sqrt{\frac{25000000}{20} + \frac{36000000}{15}}} = \frac{3000}{\sqrt{1250000 + 2400000}} = \frac{3000}{\sqrt{3650000}} \approx \frac{3000}{1910.5} \approx 1.570\]
Grados de libertad: \[gl \approx \frac{\left(\frac{5000^2}{20} + \frac{6000^2}{15}\right)^2}{\frac{(5000^2/20)^2}{20 - 1} + \frac{(6000^2/15)^2}{15 - 1}} = \frac{(1250000 + 2400000)^2}{\frac{(1250000)^2}{19} + \frac{(2400000)^2}{14}} = \frac{(3650000)^2}{82236842.1 + 411428571.4} = \frac{1.33225 \times 10^{13}}{493665413.5} \approx 27.0\] Redondeando, \(gl \approx 27\).
Valor p: Para una prueba de dos colas, \(p = 2 \times P(|T_{27}| \ge |1.570|) = 2 \times P(T_{27} \ge 1.570)\). Usando software, \(P(T_{27} \ge 1.570) \approx 0.064\). \[p = 2 \times 0.064 = 0.128\]
Decisión: Como \(p = 0.128 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que hay una diferencia significativa en los salarios promedio de los empleados en las dos empresas (asumiendo varianzas desiguales).
Solución en R:
# Datos
media_muestra1 <- 55000
sd_muestra1 <- 5000
n1 <- 20
media_muestra2 <- 52000
sd_muestra2 <- 6000
n2 <- 15
alfa <- 0.05
# 1. Cálculo del estadístico t de Welch
diferencia <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sd_muestra1^2/n1) + (sd_muestra2^2/n2))
t_estadistico <- diferencia / error_estandar
# 2. Cálculo de grados de libertad (aproximación Welch-Satterthwaite)
gl_numerador <- (sd_muestra1^2/n1 + sd_muestra2^2/n2)^2
gl_denominador <- (sd_muestra1^2/n1)^2/(n1-1) + (sd_muestra2^2/n2)^2/(n2-1)
gl <- gl_numerador / gl_denominador
# Redondear los grados de libertad (la aproximación produce valores no enteros)
gl <- round(gl)
# 3. Cálculo del valor p (dos colas)
t_critico <- qt(1 - alfa/2, df = gl)
p_valor <- 2 * pt(abs(t_estadistico), df = gl, lower.tail = FALSE)
# 4. Resultados
cat("--- Prueba t de Welch para dos muestras independientes ---\n")
## --- Prueba t de Welch para dos muestras independientes ---
cat(sprintf("Diferencia de medias: %.2f\n", diferencia))
## Diferencia de medias: 3000.00
cat(sprintf("Error estándar: %.2f\n", error_estandar))
## Error estándar: 1910.50
cat(sprintf("Estadístico t: %.3f (gl = %.1f)\n", t_estadistico, gl))
## Estadístico t: 1.570 (gl = 27.0)
cat(sprintf("Valores críticos: ±%.3f\n", t_critico))
## Valores críticos: ±2.052
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.12800
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nExiste evidencia significativa de diferencia entre las medias poblacionales")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente de diferencia entre las medias poblacionales")
}
##
## Conclusión: No rechazamos H0 (p = 0.128 > α = 0.05 )
## No hay evidencia suficiente de diferencia entre las medias poblacionales
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim <- max(4, abs(t_estadistico) + 1, t_critico + 1)
x_vals <- seq(-x_lim, x_lim, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t con gl aproximados
stat_function(fun = dt, args = list(df = gl)) +
# Regiones críticas (rojo)
geom_area(data = subset(data.frame(x = x_vals), x < -t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < -abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
geom_area(data = subset(data.frame(x = x_vals), x > abs(t_estadistico)),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = c(-t_critico, t_critico),
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = -t_critico, y = 0.05,
label = paste("t* =", round(-t_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = ifelse(t_estadistico > 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = 0, y = 0.25,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de Welch para diferencia de medias",
subtitle = "Hipótesis: μ1 ≠ μ2 (dos colas) | Varianzas desiguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.0f, sd = %.0f\nMuestra 2: n = %d, media = %.0f, sd = %.0f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con los grados de libertad aproximados. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico t observado. Las áreas amarillas en las colas representan el valor p.
Problema: Se compara el rendimiento de combustible (en km/litro) de dos marcas de automóviles. Para la marca X (n=25), la media muestral es \(\bar{x}_1 = 12.5\) km/litro con una desviación estándar muestral de \(s_1 = 1.5\) km/litro. Para la marca Y (n=30), la media muestral es \(\bar{x}_2 = 12.0\) km/litro con una desviación estándar muestral de \(s_2 = 1.0\) km/litro. Asumiendo varianzas desiguales, ¿hay evidencia suficiente para decir que la marca X tiene un rendimiento promedio mayor que la marca Y a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Estadístico de prueba: \[t = \frac{(12.5 - 12.0) - 0}{\sqrt{\frac{1.5^2}{25} + \frac{1.0^2}{30}}} = \frac{0.5}{\sqrt{\frac{2.25}{25} + \frac{1}{30}}} = \frac{0.5}{\sqrt{0.09 + 0.0333}} = \frac{0.5}{\sqrt{0.1233}} \approx \frac{0.5}{0.351} \approx 1.425\]
Grados de libertad: \[gl \approx \frac{\left(\frac{1.5^2}{25} + \frac{1.0^2}{30}\right)^2}{\frac{(1.5^2/25)^2}{25 - 1} + \frac{(1.0^2/30)^2}{30 - 1}} = \frac{(0.09 + 0.0333)^2}{\frac{(0.09)^2}{24} + \frac{(0.0333)^2}{29}} = \frac{(0.12 (0.1233)^2}{\frac{0.0081}{24} + \frac{0.001109}{29}} = \frac{0.0152}{\frac{0.0003375}{1} + \frac{0.0000382}{1}} = \frac{0.0152}{0.0003757} \approx 40.46\]
Valor p: Para una prueba de cola superior, \(p = P(T_{40} \ge 1.425)\). Usando software, \(P(T_{40} \ge 1.425) \approx 0.080\).
Decisión: Como \(p = 0.080 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para decir que la marca X tiene un rendimiento promedio de combustible significativamente mayor que la marca Y (asumiendo varianzas desiguales).
Solución en R (continuación):
# Datos completos
media_muestra1 <- 13.5 # Valor faltante en el código original
sd_muestra1 <- 1.2 # Valor faltante en el código original
n1 <- 25
media_muestra2 <- 12.0
sd_muestra2 <- 1.0
n2 <- 30
alfa <- 0.01
# 1. Cálculos preliminares
diferencia <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sd_muestra1^2/n1) + (sd_muestra2^2/n2))
t_estadistico <- diferencia / error_estandar
# 2. Grados de libertad (Welch-Satterthwaite)
gl_numerador <- (sd_muestra1^2/n1 + sd_muestra2^2/n2)^2
gl_denominador <- (sd_muestra1^2/n1)^2/(n1-1) + (sd_muestra2^2/n2)^2/(n2-1)
gl <- gl_numerador / gl_denominador
gl <- round(gl) # Redondear a entero más cercano
# 3. Valor p y valor crítico (cola superior)
t_critico <- qt(1 - alfa, df = gl)
p_valor <- pt(t_estadistico, df = gl, lower.tail = FALSE)
# 4. Resultados
cat("--- Prueba t de Welch para dos muestras independientes ---\n")
## --- Prueba t de Welch para dos muestras independientes ---
cat(sprintf("Diferencia de medias: %.2f\n", diferencia))
## Diferencia de medias: 1.50
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 0.302
cat(sprintf("Estadístico t: %.3f (gl = %.0f)\n", t_estadistico, gl))
## Estadístico t: 4.974 (gl = 47)
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: 2.408
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.00000
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 > μ2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 > μ2")
}
##
## Conclusión: Rechazamos H0 (p = 4.5881e-06 ≤ α = 0.01 )
## Hay evidencia suficiente para concluir que μ1 > μ2
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_sup <- max(4, t_estadistico + 1, t_critico + 1)
x_vals <- seq(-3, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo - cola superior)
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = mean(c(t_estadistico, x_lim_sup)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de Welch para diferencia de medias",
subtitle = "Hipótesis: μ1 > μ2 (cola superior) | Varianzas desiguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con los grados de libertad aproximados. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola derecha representa el valor p.
Problema: Se compara la efectividad de dos métodos de enseñanza en las calificaciones de un examen. El método A (n=18) tuvo una media de \(\bar{x}_1 = 78\) con una desviación estándar de \(s_1 = 7\). El método B (n=22) tuvo una media de \(\bar{x}_2 = 82\) con una desviación estándar de \(s_2 = 9\). Asumiendo varianzas desiguales, ¿hay evidencia suficiente para decir que el método A resulta en calificaciones promedio más bajas que el método B a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Estadístico de prueba: \[t = \frac{(78 - 82) - 0}{\sqrt{\frac{7^2}{18} + \frac{9^2}{22}}} = \frac{-4}{\sqrt{\frac{49}{18} + \frac{81}{22}}} = \frac{-4}{\sqrt{2.722 + 3.682}} = \frac{-4}{\sqrt{6.404}} \approx \frac{-4}{2.531} \approx -1.580\]
Grados de libertad: \[gl \approx \frac{\left(\frac{7^2}{18} + \frac{9^2}{22}\right)^2}{\frac{(7^2/18)^2}{18 - 1} + \frac{(9^2/22)^2}{22 - 1}} = \frac{(2.722 + 3.682)^2}{\frac{(2.722)^2}{17} + \frac{(3.682)^2}{21}} = \frac{(6.404)^2}{\frac{7.419}{17} + \frac{13.557}{21}} = \frac{41.01}{0.436 + 0.646} = \frac{41.01}{1.082} \approx 37.9\] Redondeando, \(gl \approx 38\).
Valor p: Para una prueba de cola inferior, \(p = P(T_{38} \le -1.580)\). Usando software, \(P(T_{38} \le -1.580) \approx 0.061\).
Decisión: Como \(p = 0.061 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que el método A resulta en calificaciones promedio más bajas que el método B (asumiendo varianzas desiguales).
Solución en R:
# Datos
media_muestra1 <- 78
sd_muestra1 <- 7
n1 <- 18
media_muestra2 <- 82
sd_muestra2 <- 9
n2 <- 22
alfa <- 0.05
# 1. Cálculos preliminares
diferencia <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sd_muestra1^2/n1) + (sd_muestra2^2/n2))
t_estadistico <- diferencia / error_estandar
# 2. Grados de libertad (Welch-Satterthwaite)
gl_numerador <- (sd_muestra1^2/n1 + sd_muestra2^2/n2)^2
gl_denominador <- (sd_muestra1^2/n1)^2/(n1-1) + (sd_muestra2^2/n2)^2/(n2-1)
gl <- gl_numerador / gl_denominador
gl <- round(gl) # Redondear a entero más cercano
# 3. Valor p y valor crítico (cola inferior)
t_critico <- qt(alfa, df = gl)
p_valor <- pt(t_estadistico, df = gl, lower.tail = TRUE)
# 4. Resultados
cat("--- Prueba t de Welch para dos muestras independientes ---\n")
## --- Prueba t de Welch para dos muestras independientes ---
cat(sprintf("Diferencia de medias: %.2f\n", diferencia))
## Diferencia de medias: -4.00
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 2.531
cat(sprintf("Estadístico t: %.3f (gl = %.0f)\n", t_estadistico, gl))
## Estadístico t: -1.581 (gl = 38)
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: -1.686
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.06112
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 < μ2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 < μ2")
}
##
## Conclusión: No rechazamos H0 (p = 0.061125 > α = 0.05 )
## No hay evidencia suficiente para concluir que μ1 < μ2
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-4, t_estadistico - 1, t_critico - 1)
x_lim_sup <- max(4, abs(t_estadistico) + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo - cola inferior)
geom_area(data = subset(data.frame(x = x_vals), x < t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = ifelse(t_estadistico < 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = mean(c(x_lim_inf, t_estadistico)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de Welch para diferencia de medias",
subtitle = "Hipótesis: μ1 < μ2 (cola inferior) | Varianzas desiguales",
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución t con los grados de libertad aproximados. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico t observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Una compañía desarrolla un nuevo proceso de fabricación que afirma reduce el tiempo de producción en más de 3 minutos. Se toman muestras del tiempo de producción con el proceso antiguo (n=12, \(\bar{x}_1 = 25\) min, \(s_1 = 3\) min) y el nuevo proceso (n=15, \(\bar{x}_2 = 20\) min, \(s_2 = 4\) min). Asumiendo varianzas desiguales, ¿hay evidencia suficiente para apoyar la afirmación de la compañía a un nivel de significancia de \(\alpha = 0.01\)? (Aquí, \(\mu_1\) es la media del proceso antiguo y \(\mu_2\) es la media del proceso nuevo, por lo que queremos probar \(H_1: \mu_1 - \mu_2 > 3\)).
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Estadístico de prueba: \[t = \frac{(25 - 20) - 3}{\sqrt{\frac{3^2}{12} + \frac{4^2}{15}}} = \frac{2}{\sqrt{\frac{9}{12} + \frac{16}{15}}} = \frac{2}{\sqrt{0.75 + 1.067}} = \frac{2}{\sqrt{1.817}} \approx \frac{2}{1.348} \approx 1.484\]
Grados de libertad: \[gl \approx \frac{\left(\frac{3^2}{12} + \frac{4^2}{15}\right)^2}{\frac{(3^2/12)^2}{12 - 1} + \frac{(4^2/15)^2}{15 - 1}} = \frac{(0.75 + 1.067)^2}{\frac{(0.75)^2}{11} + \frac{(1.067)^2}{14}} = \frac{(1.817)^2}{\frac{0.5625}{11} + \frac{1.1385}{14}} = \frac{3.3015}{0.0511 + 0.0813} = \frac{3.3015}{0.1324} \approx 24.9\] Redondeando, \(gl \approx 25\).
Valor p: Para una prueba de cola superior, \(p = P(T_{25} \ge 1.484)\). Usando software, \(P(T_{25} \ge 1.484) \approx 0.075\).
Decisión: Como \(p = 0.075 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para apoyar la afirmación de la compañía de que el nuevo proceso reduce el tiempo de producción en más de 3 minutos en promedio (asumiendo varianzas desiguales).
Solución en R:
# Datos
media_muestra1 <- 25
sd_muestra1 <- 3
n1 <- 12
media_muestra2 <- 20
sd_muestra2 <- 4
n2 <- 15
mu_diff0 <- 3 # Diferencia hipotética bajo H0
alfa <- 0.01
# 1. Cálculos preliminares
diferencia_observada <- media_muestra1 - media_muestra2
error_estandar <- sqrt((sd_muestra1^2/n1) + (sd_muestra2^2/n2))
t_estadistico <- (diferencia_observada - mu_diff0) / error_estandar
# 2. Grados de libertad (Welch-Satterthwaite)
gl_numerador <- (sd_muestra1^2/n1 + sd_muestra2^2/n2)^2
gl_denominador <- (sd_muestra1^2/n1)^2/(n1-1) + (sd_muestra2^2/n2)^2/(n2-1)
gl <- gl_numerador / gl_denominador
gl <- round(gl) # Redondear a entero más cercano
# 3. Valor p y valor crítico (cola superior)
t_critico <- qt(1 - alfa, df = gl)
p_valor <- pt(t_estadistico, df = gl, lower.tail = FALSE)
# 4. Resultados
cat("--- Prueba t de Welch para dos muestras independientes ---\n")
## --- Prueba t de Welch para dos muestras independientes ---
cat(sprintf("Diferencia observada: %.2f\n", diferencia_observada))
## Diferencia observada: 5.00
cat(sprintf("Diferencia hipotética (μ_diff0): %.2f\n", mu_diff0))
## Diferencia hipotética (μ_diff0): 3.00
cat(sprintf("Error estándar: %.3f\n", error_estandar))
## Error estándar: 1.348
cat(sprintf("Estadístico t: %.3f (gl = %.0f)\n", t_estadistico, gl))
## Estadístico t: 1.484 (gl = 25)
cat(sprintf("Valor crítico: %.3f\n", t_critico))
## Valor crítico: 2.485
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.07517
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que μ1 - μ2 >", mu_diff0)
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que μ1 - μ2 >", mu_diff0)
}
##
## Conclusión: No rechazamos H0 (p = 0.075173 > α = 0.01 )
## No hay evidencia suficiente para concluir que μ1 - μ2 > 3
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_sup <- max(4, t_estadistico + 1, t_critico + 1)
x_vals <- seq(min(-3, t_estadistico - 1), x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución t
stat_function(fun = dt, args = list(df = gl)) +
# Región crítica (rojo - cola superior)
geom_area(data = subset(data.frame(x = x_vals), x > t_critico),
aes(y = dt(x, df = gl)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > t_estadistico),
aes(y = dt(x, df = gl)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = t_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = t_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = t_critico, y = 0.05,
label = paste("t* =", round(t_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = t_estadistico, y = 0.12,
label = paste("t =", round(t_estadistico, 2)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = mean(c(t_estadistico, x_lim_sup)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba t de Welch para diferencia de medias",
subtitle = bquote("Hipótesis:" ~ mu[1] - mu[2] > .(mu_diff0) ~ "(cola superior) | Varianzas desiguales"),
x = "Estadístico t",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: n = %d, media = %.1f, sd = %.1f\nMuestra 2: n = %d, media = %.1f, sd = %.1f",
n1, media_muestra1, sd_muestra1, n2, media_muestra2, sd_muestra2)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Cuando se tienen dos muestras independientes y los tamaños de muestra son suficientemente grandes (generalmente \(n_1p_1 \ge 10\), \(n_1(1-p_1) \ge 10\), \(n_2p_2 \ge 10\), y \(n_2(1-p_2) \ge 10\)), podemos utilizar una prueba z para comparar las proporciones de dos poblaciones.
Problema: Se quiere comparar la proporción de votantes que prefieren a dos candidatos en una elección. En una encuesta aleatoria de 200 votantes, 110 prefieren al candidato A. En otra encuesta aleatoria independiente de 250 votantes, 120 prefieren al candidato B. ¿Hay una diferencia significativa en la proporción de votantes que prefieren a cada candidato a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Proporción muestral combinada: \[\hat{p} = \frac{110 + 120}{200 + 250} = \frac{230}{450} \approx 0.511\]
Estadístico de prueba: \[z = \frac{(0.55 - 0.48) - 0}{\sqrt{0.511(1 - 0.511)\left(\frac{1}{200} + \frac{1}{250}\right)}} = \frac{0.07}{\sqrt{0.511 \times 0.489 \times (0.005 + 0.004)}} = \frac{0.07}{\sqrt{0.2498 \times 0.009}} = \frac{0.07}{\sqrt{0.002248}} \approx \frac{0.07}{0.0474} \approx 1.477\]
Valor p: Para una prueba de dos colas, \(p = 2 \times P(Z \ge |1.477|) = 2 \times P(Z \ge 1.477)\). Usando software, \(P(Z \ge 1.477) \approx 1 - 0.9303 = 0.0697\). \[p = 2 \times 0.0697 = 0.1394\]
Decisión: Como \(p = 0.1394 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que hay una diferencia significativa en la proporción de votantes que prefieren a cada candidato.
Solución en R:
# Datos
x1 <- 110 # Éxitos en muestra 1
n1 <- 200 # Tamaño muestra 1
x2 <- 120 # Éxitos en muestra 2
n2 <- 250 # Tamaño muestra 2
alfa <- 0.05 # Nivel de significancia
# 1. Cálculo de proporciones muestrales
p_hat1 <- x1 / n1
p_hat2 <- x2 / n2
diferencia <- p_hat1 - p_hat2
# 2. Proporción combinada bajo H0
p_pooled <- (x1 + x2) / (n1 + n2)
# 3. Estadístico de prueba z
error_estandar <- sqrt(p_pooled * (1 - p_pooled) * (1/n1 + 1/n2))
z_estadistico <- diferencia / error_estandar
# 4. Valor p (dos colas)
z_critico <- qnorm(1 - alfa/2)
p_valor <- 2 * pnorm(abs(z_estadistico), lower.tail = FALSE)
# 5. Resultados
cat("--- Prueba z para diferencia de proporciones ---\n")
## --- Prueba z para diferencia de proporciones ---
cat(sprintf("Proporción muestra 1: %.4f\n", p_hat1))
## Proporción muestra 1: 0.5500
cat(sprintf("Proporción muestra 2: %.4f\n", p_hat2))
## Proporción muestra 2: 0.4800
cat(sprintf("Diferencia observada: %.4f\n", diferencia))
## Diferencia observada: 0.0700
cat(sprintf("Proporción combinada: %.4f\n", p_pooled))
## Proporción combinada: 0.5111
cat(sprintf("Error estándar: %.4f\n", error_estandar))
## Error estándar: 0.0474
cat(sprintf("\nEstadístico z: %.3f\n", z_estadistico))
##
## Estadístico z: 1.476
cat(sprintf("Valores críticos: ±%.3f\n", z_critico))
## Valores críticos: ±1.960
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.13992
# 6. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nExiste evidencia significativa de diferencia entre las proporciones poblacionales")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente de diferencia entre las proporciones poblacionales")
}
##
## Conclusión: No rechazamos H0 (p = 0.13992 > α = 0.05 )
## No hay evidencia suficiente de diferencia entre las proporciones poblacionales
# 7. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim <- max(4, abs(z_estadistico) + 1, z_critico + 1)
x_vals <- seq(-x_lim, x_lim, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución normal estándar
stat_function(fun = dnorm) +
# Regiones críticas (rojo)
geom_area(data = subset(data.frame(x = x_vals), x < -z_critico),
aes(y = dnorm(x)), fill = "#FF6B6B", alpha = 0.3) +
geom_area(data = subset(data.frame(x = x_vals), x > z_critico),
aes(y = dnorm(x)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < -abs(z_estadistico)),
aes(y = dnorm(x)), fill = "#FFD166", alpha = 0.4) +
geom_area(data = subset(data.frame(x = x_vals), x > abs(z_estadistico)),
aes(y = dnorm(x)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = c(-z_critico, z_critico),
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = -z_critico, y = 0.05,
label = paste("-z* =", round(-z_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = z_estadistico, y = 0.12,
label = paste("z =", round(z_estadistico, 2)),
color = "blue", hjust = ifelse(z_estadistico > 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = 0, y = 0.25,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba z para diferencia de proporciones",
subtitle = "Hipótesis: p1 ≠ p2 (dos colas)",
x = "Estadístico z",
y = "Densidad de probabilidad",
caption = sprintf("Muestra 1: %d/%d (%.1f%%)\nMuestra 2: %d/%d (%.1f%%)",
x1, n1, p_hat1*100, x2, n2, p_hat2*100)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución normal estándar. Las áreas rojas en las colas representan la región crítica. La línea azul indica el estadístico z observado. Las áreas amarillas en las colas representan el valor p.
Problema: Una compañía farmacéutica cree que la proporción de pacientes que experimentan alivio con su nuevo medicamento es mayor que con el medicamento estándar. En un ensayo clínico con 150 pacientes que recibieron el nuevo medicamento, 90 experimentaron alivio. En un ensayo independiente con 200 pacientes que recibieron el medicamento estándar, 110 experimentaron alivio. ¿Hay evidencia suficiente para apoyar la creencia de la compañía a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Proporción muestral combinada: \[\hat{p} = \frac{90 + 110}{150 + 200} = \frac{200}{350} \approx 0.571\]
Estadístico de prueba: \[z = \frac{(0.60 - 0.55) - 0}{\sqrt{0.571(1 - 0.571)\left(\frac{1}{150} + \frac{1}{200}\right)}} = \frac{0.05}{\sqrt{0.571 \times 0.429 \times (0.0067 + 0.005)}} = \frac{0.05}{\sqrt{0.245 \times 0.0117}} = \frac{0.05}{\sqrt{0.002867}} \approx \frac{0.05}{0.0535} \approx 0.935\]
Valor p: Para una prueba de cola superior, \(p = P(Z \ge 0.935)\). Usando software, \(P(Z \ge 0.935) \approx 1 - 0.8251 = 0.1749\).
Decisión: Como \(p = 0.1749 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para apoyar la creencia de la compañía de que la proporción de pacientes que experimentan alivio con el nuevo medicamento es mayor que con el medicamento estándar.
Solución en R:
# Datos
x1 <- 90 # Éxitos en grupo 1
n1 <- 150 # Tamaño grupo 1
x2 <- 110 # Éxitos en grupo 2
n2 <- 200 # Tamaño grupo 2
alfa <- 0.01 # Nivel de significancia
# 1. Cálculo de proporciones muestrales
p_hat1 <- x1 / n1
p_hat2 <- x2 / n2
diferencia <- p_hat1 - p_hat2
# 2. Proporción combinada bajo H0
p_pooled <- (x1 + x2) / (n1 + n2)
# 3. Estadístico de prueba z
error_estandar <- sqrt(p_pooled * (1 - p_pooled) * (1/n1 + 1/n2))
z_estadistico <- diferencia / error_estandar
# 4. Valor p (cola superior)
z_critico <- qnorm(1 - alfa)
p_valor <- pnorm(z_estadistico, lower.tail = FALSE)
# 5. Resultados
cat("--- Prueba z para diferencia de proporciones (cola superior) ---\n")
## --- Prueba z para diferencia de proporciones (cola superior) ---
cat(sprintf("Proporción grupo 1: %.4f (%.0f/%d)\n", p_hat1, x1, n1))
## Proporción grupo 1: 0.6000 (90/150)
cat(sprintf("Proporción grupo 2: %.4f (%.0f/%d)\n", p_hat2, x2, n2))
## Proporción grupo 2: 0.5500 (110/200)
cat(sprintf("Diferencia observada: %.4f\n", diferencia))
## Diferencia observada: 0.0500
cat(sprintf("Proporción combinada: %.4f\n", p_pooled))
## Proporción combinada: 0.5714
cat(sprintf("Error estándar: %.4f\n", error_estandar))
## Error estándar: 0.0535
cat(sprintf("\nEstadístico z: %.3f\n", z_estadistico))
##
## Estadístico z: 0.935
cat(sprintf("Valor crítico: %.3f\n", z_critico))
## Valor crítico: 2.326
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.17479
# 6. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que p1 > p2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que p1 > p2")
}
##
## Conclusión: No rechazamos H0 (p = 0.17479 > α = 0.01 )
## No hay evidencia suficiente para concluir que p1 > p2
# 7. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-3, z_estadistico - 1)
x_lim_sup <- max(4, z_estadistico + 1, z_critico + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución normal estándar
stat_function(fun = dnorm) +
# Región crítica (rojo)
geom_area(data = subset(data.frame(x = x_vals), x > z_critico),
aes(y = dnorm(x)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > z_estadistico),
aes(y = dnorm(x)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = z_estadistico, y = 0.12,
label = paste("z =", round(z_estadistico, 2)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = mean(c(z_estadistico, x_lim_sup)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba z para diferencia de proporciones",
subtitle = "Hipótesis: p1 > p2 (cola superior)",
x = "Estadístico z",
y = "Densidad de probabilidad",
caption = sprintf("Grupo 1: %d/%d (%.1f%%)\nGrupo 2: %d/%d (%.1f%%)",
x1, n1, p_hat1*100, x2, n2, p_hat2*100)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución normal estándar. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico z observado. El área amarilla en la cola derecha representa el valor p.
Problema: Un analista cree que la proporción de clientes satisfechos con un nuevo servicio es menor que la proporción de clientes satisfechos con el servicio anterior. En una encuesta a 180 clientes del nuevo servicio, 110 estaban satisfechos. En una encuesta independiente a 220 clientes del servicio anterior, 150 estaban satisfechos. ¿Hay evidencia suficiente para apoyar la creencia del analista a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Proporción muestral combinada: \[\hat{p} = \frac{110 + 150}{180 + 220} = \frac{260}{400} = 0.65\]
Estadístico de prueba: \[z = \frac{(0.611 - 0.682) - 0}{\sqrt{0.65(1 - 0.65)\left(\frac{1}{180} + \frac{1}{220}\right)}} = \frac{-0.071}{\sqrt{0.65 \times 0.35 \times (0.0056 + 0.0045)}} = \frac{-0.071}{\sqrt{0.2275 \times 0.0101}} = \frac{-0.071}{\sqrt{0.0023}} \approx \frac{-0.071}{0.048} \approx -1.479\]
Valor p: Para una prueba de cola inferior, \(p = P(Z \le -1.479)\). Usando software, \(P(Z \le -1.479) \approx 0.0695\).
Decisión: Como \(p = 0.0695 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para apoyar la creencia del analista de que la proporción de clientes satisfechos con el nuevo servicio es menor que con el servicio anterior.
Solución en R:
# Datos
x1 <- 110 # Éxitos en grupo 1
n1 <- 180 # Tamaño grupo 1
x2 <- 150 # Éxitos en grupo 2
n2 <- 220 # Tamaño grupo 2
alfa <- 0.05 # Nivel de significancia
# 1. Cálculo de proporciones muestrales
p_hat1 <- x1 / n1
p_hat2 <- x2 / n2
diferencia <- p_hat1 - p_hat2
# 2. Proporción combinada bajo H0
p_pooled <- (x1 + x2) / (n1 + n2)
# 3. Estadístico de prueba z
error_estandar <- sqrt(p_pooled * (1 - p_pooled) * (1/n1 + 1/n2))
z_estadistico <- diferencia / error_estandar
# 4. Valor p (cola inferior)
z_critico <- qnorm(alfa)
p_valor <- pnorm(z_estadistico)
# 5. Resultados
cat("--- Prueba z para diferencia de proporciones (cola inferior) ---\n")
## --- Prueba z para diferencia de proporciones (cola inferior) ---
cat(sprintf("Proporción grupo 1: %.4f (%.0f/%d = %.1f%%)\n", p_hat1, x1, n1, p_hat1*100))
## Proporción grupo 1: 0.6111 (110/180 = 61.1%)
cat(sprintf("Proporción grupo 2: %.4f (%.0f/%d = %.1f%%)\n", p_hat2, x2, n2, p_hat2*100))
## Proporción grupo 2: 0.6818 (150/220 = 68.2%)
cat(sprintf("Diferencia observada (p1 - p2): %.4f\n", diferencia))
## Diferencia observada (p1 - p2): -0.0707
cat(sprintf("Proporción combinada: %.4f\n", p_pooled))
## Proporción combinada: 0.6500
cat(sprintf("Error estándar: %.4f\n", error_estandar))
## Error estándar: 0.0479
cat(sprintf("\nEstadístico z: %.3f\n", z_estadistico))
##
## Estadístico z: -1.475
cat(sprintf("Valor crítico: %.3f\n", z_critico))
## Valor crítico: -1.645
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.07011
# 6. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que p1 < p2")
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que p1 < p2")
}
##
## Conclusión: No rechazamos H0 (p = 0.070107 > α = 0.05 )
## No hay evidencia suficiente para concluir que p1 < p2
# 7. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-4, z_estadistico - 1, z_critico - 1)
x_lim_sup <- max(4, abs(z_estadistico) + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución normal estándar
stat_function(fun = dnorm) +
# Región crítica (rojo - cola inferior)
geom_area(data = subset(data.frame(x = x_vals), x < z_critico),
aes(y = dnorm(x)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x < z_estadistico),
aes(y = dnorm(x)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 2)),
color = "red", hjust = 1.1, size = 3.5) +
annotate("text", x = z_estadistico, y = 0.12,
label = paste("z =", round(z_estadistico, 2)),
color = "blue", hjust = ifelse(z_estadistico < 0, -0.1, 1.1), size = 3.5) +
annotate("text", x = mean(c(x_lim_inf, z_estadistico)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba z para diferencia de proporciones",
subtitle = "Hipótesis: p1 < p2 (cola inferior)",
x = "Estadístico z",
y = "Densidad de probabilidad",
caption = sprintf("Grupo 1: %d/%d (%.1f%%)\nGrupo 2: %d/%d (%.1f%%)",
x1, n1, p_hat1*100, x2, n2, p_hat2*100)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución normal estándar. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico z observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Una campaña de salud pública tiene como objetivo aumentar la proporción de personas que hacen ejercicio regularmente en al menos un 5% (\(\Delta p \ge 0.05\)). Antes de la campaña, en una encuesta a 300 personas, el 20% hacía ejercicio regularmente. Después de la campaña, en una encuesta independiente a 400 personas, el 28% hacía ejercicio regularmente. ¿Hay evidencia suficiente para decir que la campaña logró su objetivo a un nivel de significancia de \(\alpha = 0.10\)? (Aquí, \(p_1\) es la proporción después de la campaña y \(p_2\) es la proporción antes de la campaña, por lo que queremos probar \(H_1: p_1 - p_2 > 0.05\)).
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Estadísticos muestrales:
Proporción muestral combinada (bajo \(H_0\) no es directamente necesaria para el estadístico): Sin embargo, para la varianza bajo \(H_0\) si \(p_1 - p_2 = 0.05\), esto se complica. Usaremos la estimación separada de las varianzas para ser conservadores.
Estadístico de prueba: \[z = \frac{(0.28 - 0.20) - 0.05}{\sqrt{\frac{0.28(1 - 0.28)}{400} + \frac{0.20(1 - 0.20)}{300}}} = \frac{0.03}{\sqrt{\frac{0.2016}{400} + \frac{0.16}{300}}} = \frac{0.03}{\sqrt{0.000504 + 0.000533}} = \frac{0.03}{\sqrt{0.001037}} \approx \frac{0.03}{0.0322} \approx 0.932\]
Valor p: Para una prueba de cola superior, \(p = P(Z \ge 0.932)\). Usando software, \(P(Z \ge 0.932) \approx 1 - 0.8243 = 0.1757\).
Decisión: Como \(p = 0.1757 > \alpha = 0.10\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.10 para decir que la campaña logró aumentar la proporción de personas que hacen ejercicio regularmente en más del 5%.
Solución en R:
# Datos
x1 <- 112 # Éxitos en grupo 1
n1 <- 400 # Tamaño grupo 1
x2 <- 60 # Éxitos en grupo 2
n2 <- 300 # Tamaño grupo 2
delta_p0 <- 0.05 # Diferencia hipotética bajo H0
alfa <- 0.10 # Nivel de significancia
# 1. Cálculo de proporciones muestrales
p_hat1 <- x1 / n1
p_hat2 <- x2 / n2
diferencia_observada <- p_hat1 - p_hat2
# 2. Estadístico de prueba z (sin asumir varianzas iguales)
error_estandar <- sqrt((p_hat1*(1-p_hat1)/n1) + (p_hat2*(1-p_hat2)/n2))
z_estadistico <- (diferencia_observada - delta_p0) / error_estandar
# 3. Valor crítico y valor p (cola superior)
z_critico <- qnorm(1 - alfa)
p_valor <- pnorm(z_estadistico, lower.tail = FALSE)
# 4. Resultados
cat("--- Prueba z para diferencia de proporciones (cola superior) ---\n")
## --- Prueba z para diferencia de proporciones (cola superior) ---
cat(sprintf("Proporción grupo 1: %.4f (%.0f/%d = %.1f%%)\n", p_hat1, x1, n1, p_hat1*100))
## Proporción grupo 1: 0.2800 (112/400 = 28.0%)
cat(sprintf("Proporción grupo 2: %.4f (%.0f/%d = %.1f%%)\n", p_hat2, x2, n2, p_hat2*100))
## Proporción grupo 2: 0.2000 (60/300 = 20.0%)
cat(sprintf("Diferencia observada (p1 - p2): %.4f\n", diferencia_observada))
## Diferencia observada (p1 - p2): 0.0800
cat(sprintf("Diferencia hipotética (Δp0): %.4f\n", delta_p0))
## Diferencia hipotética (Δp0): 0.0500
cat(sprintf("Error estándar: %.4f\n", error_estandar))
## Error estándar: 0.0322
cat(sprintf("\nEstadístico z: %.3f\n", z_estadistico))
##
## Estadístico z: 0.931
cat(sprintf("Valor crítico: %.3f\n", z_critico))
## Valor crítico: 1.282
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.17581
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nHay evidencia suficiente para concluir que p1 - p2 >", delta_p0)
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que p1 - p2 >", delta_p0)
}
##
## Conclusión: No rechazamos H0 (p = 0.17581 > α = 0.1 )
## No hay evidencia suficiente para concluir que p1 - p2 > 0.05
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_inf <- min(-3, z_estadistico - 1)
x_lim_sup <- max(4, z_estadistico + 1, z_critico + 1)
x_vals <- seq(x_lim_inf, x_lim_sup, length.out = 500)
ggplot(data.frame(x = x_vals), aes(x = x)) +
# Distribución normal estándar
stat_function(fun = dnorm) +
# Región crítica (rojo - cola superior)
geom_area(data = subset(data.frame(x = x_vals), x > z_critico),
aes(y = dnorm(x)), fill = "#FF6B6B", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(data.frame(x = x_vals), x > z_estadistico),
aes(y = dnorm(x)), fill = "#FFD166", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = z_critico, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = z_estadistico, color = "blue", linewidth = 1.2) +
geom_vline(xintercept = 0, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = z_critico, y = 0.05,
label = paste("z* =", round(z_critico, 2)),
color = "red", hjust = -0.1, size = 3.5) +
annotate("text", x = z_estadistico, y = 0.12,
label = paste("z =", round(z_estadistico, 2)),
color = "blue", hjust = -0.1, size = 3.5) +
annotate("text", x = mean(c(z_estadistico, x_lim_sup)), y = 0.02,
label = paste("Valor p =", format.pval(p_valor, digits = 3)),
color = "darkorange3", size = 4) +
# Configuración del gráfico
labs(title = "Prueba z para diferencia de proporciones",
subtitle = bquote("Hipótesis:" ~ p[1] - p[2] > .(delta_p0) ~ "(cola superior)"),
x = "Estadístico z",
y = "Densidad de probabilidad",
caption = sprintf("Grupo 1: %d/%d (%.1f%%)\nGrupo 2: %d/%d (%.1f%%)",
x1, n1, p_hat1*100, x2, n2, p_hat2*100)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 0.5, size = 9),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución normal estándar. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico z observado. El área amarilla en la cola derecha representa el valor p.
Cuando se tiene una muestra aleatoria de una población que se distribuye normalmente, podemos realizar una prueba de chi-cuadrado (\(\chi^2\)) para evaluar hipótesis sobre la varianza de esa población (\(\sigma^2\)).
Problema: Un fabricante de bombillas afirma que la desviación estándar de la duración de sus bombillas es de 50 horas (lo que implica una varianza de \(50^2 = 2500\) horas cuadradas). Se toma una muestra aleatoria de 25 bombillas y se encuentra que la desviación estándar muestral es de 60 horas (varianza muestral \(60^2 = 3600\) horas cuadradas). Asumiendo que la duración de las bombillas sigue una distribución normal, ¿hay evidencia suficiente para decir que la varianza de la duración es diferente de \(2500\) horas cuadradas a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Estadístico de prueba: \[\chi^2 = \frac{(25 - 1) \times 3600}{2500} = \frac{24 \times 3600}{2500} = \frac{86400}{2500} = 34.56\]
Grados de libertad: \(gl = n - 1 = 25 - 1 = 24\)
Valor p: Para una prueba de dos colas, necesitamos encontrar el área en ambas colas más allá de \(\chi^2 = 34.56\). La mediana de la distribución chi-cuadrado con 24 gl es aproximadamente \(24 - 2/3 \approx 23.33\). Como \(34.56 > 23.33\), el valor p será \(2 \times P(\chi^2_{24} \ge 34.56)\). Usando software, \(P(\chi^2_{24} \ge 34.56) \approx 0.070\). \[p = 2 \times 0.070 = 0.140\]
Decisión: Como \(p = 0.140 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que la varianza de la duración de las bombillas es diferente de 2500 horas cuadradas.
Solución en R:
# Datos
n <- 25 # Tamaño muestral
s_cuadrado <- 3600 # Varianza muestral
sigma0_cuadrado <- 2500 # Varianza hipotética bajo H0
alfa <- 0.05 # Nivel de significancia
gl <- n - 1 # Grados de libertad
# 1. Cálculo del estadístico chi-cuadrado
chi2_estadistico <- (gl * s_cuadrado) / sigma0_cuadrado
# 2. Cálculo del valor p (dos colas)
p_valor_superior <- pchisq(chi2_estadistico, df = gl, lower.tail = FALSE)
p_valor_inferior <- pchisq(chi2_estadistico, df = gl, lower.tail = TRUE)
p_valor <- 2 * min(p_valor_superior, p_valor_inferior)
# 3. Valores críticos
chi2_critico_inf <- qchisq(alfa/2, df = gl)
chi2_critico_sup <- qchisq(1 - alfa/2, df = gl)
# 4. Resultados detallados
cat("--- Prueba Chi-Cuadrado para la Varianza Poblacional ---\n")
## --- Prueba Chi-Cuadrado para la Varianza Poblacional ---
cat(sprintf("Hipótesis nula (H0): σ² = %.0f\n", sigma0_cuadrado))
## Hipótesis nula (H0): σ² = 2500
cat(sprintf("Hipótesis alternativa (H1): σ² ≠ %.0f\n", sigma0_cuadrado))
## Hipótesis alternativa (H1): σ² ≠ 2500
cat("\n--- Datos Muestrales ---\n")
##
## --- Datos Muestrales ---
cat(sprintf("Tamaño muestral (n): %d\n", n))
## Tamaño muestral (n): 25
cat(sprintf("Varianza muestral (s²): %.0f\n", s_cuadrado))
## Varianza muestral (s²): 3600
cat(sprintf("Grados de libertad (gl): %d\n", gl))
## Grados de libertad (gl): 24
cat("\n--- Resultados de la Prueba ---\n")
##
## --- Resultados de la Prueba ---
cat(sprintf("Estadístico chi-cuadrado: %.3f\n", chi2_estadistico))
## Estadístico chi-cuadrado: 34.560
cat(sprintf("Valores críticos: χ²(%.3f, %.3f)\n", chi2_critico_inf, chi2_critico_sup))
## Valores críticos: χ²(12.401, 39.364)
cat(sprintf("Valor p: %.4f\n", p_valor))
## Valor p: 0.1504
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nExiste evidencia estadística para concluir que la varianza poblacional")
cat("\nes significativamente diferente de", sigma0_cuadrado)
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que la varianza poblacional")
cat("\ndifiere significativamente de", sigma0_cuadrado)
}
##
## Conclusión: No rechazamos H0 (p = 0.15039 > α = 0.05 )
## No hay evidencia suficiente para concluir que la varianza poblacional
## difiere significativamente de 2500
# 6. Visualización Mejorada
library(ggplot2)
# Ajustar límites del gráfico
x_lim_sup <- max(50, chi2_estadistico + 5, chi2_critico_sup + 5)
x_vals <- seq(0, x_lim_sup, length.out = 500)
# Crear dataframe para el gráfico
df <- data.frame(x = x_vals, y = dchisq(x_vals, df = gl))
# Determinar áreas para el valor p
if(chi2_estadistico > gl) {
area_p <- subset(df, x > chi2_estadistico)
area_p_espejo <- subset(df, x < (gl - (chi2_estadistico - gl)))
} else {
area_p <- subset(df, x < chi2_estadistico)
area_p_espejo <- subset(df, x > (gl + (gl - chi2_estadistico)))
}
# Gráfico
ggplot(df, aes(x = x)) +
# Distribución chi-cuadrado
geom_line(aes(y = y)) +
# Regiones críticas (rojo)
geom_area(data = subset(df, x < chi2_critico_inf),
aes(y = y), fill = "red", alpha = 0.3) +
geom_area(data = subset(df, x > chi2_critico_sup),
aes(y = y), fill = "red", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = area_p,
aes(y = y), fill = "yellow", alpha = 0.4) +
geom_area(data = area_p_espejo,
aes(y = y), fill = "yellow", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = c(chi2_critico_inf, chi2_critico_sup),
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = chi2_estadistico, color = "blue", linewidth = 1.5) +
geom_vline(xintercept = gl, color = "gray50", linetype = "dotted") +
# Anotaciones
annotate("text", x = chi2_critico_inf, y = 0.01,
label = sprintf("χ²(%.2f) = %.2f", alfa/2, chi2_critico_inf),
color = "red", hjust = 1.1, size = 4) +
annotate("text", x = chi2_critico_sup, y = 0.01,
label = sprintf("χ²(%.2f) = %.2f", 1-alfa/2, chi2_critico_sup),
color = "red", hjust = -0.1, size = 4) +
annotate("text", x = chi2_estadistico, y = 0.05,
label = sprintf("χ²(obs) = %.2f", chi2_estadistico),
color = "blue", hjust = -0.1, size = 4.5) +
annotate("text", x = mean(c(chi2_critico_inf, chi2_critico_sup)), y = 0.08,
label = sprintf("Valor p = %.4f", p_valor),
color = "black", size = 5) +
# Configuración del gráfico
labs(title = "Prueba Chi-Cuadrado para la Varianza Poblacional",
subtitle = sprintf("Hipótesis: σ² ≠ %.0f (prueba de dos colas, α = %.2f)", sigma0_cuadrado, alfa),
x = "Valor del Estadístico Chi-Cuadrado",
y = "Densidad de Probabilidad",
caption = sprintf("Datos: n = %d, s² = %.0f, σ₀² = %.0f, gl = %d", n, s_cuadrado, sigma0_cuadrado, gl)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, size = 12),
plot.caption = element_text(hjust = 0.5, size = 10),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución chi-cuadrado con 24 grados de libertad. Las áreas rojas en ambas colas representan la región crítica. La línea azul indica el estadístico chi-cuadrado observado. El área amarilla representa el valor p.
Problema: Un proceso de fabricación de rodamientos está diseñado para tener una varianza en el diámetro no mayor a \(0.0001 \, \text{mm}^2\). Se toma una muestra aleatoria de 20 rodamientos y se encuentra que la varianza muestral es de \(0.00015 \, \text{mm}^2\). Asumiendo normalidad en los diámetros, ¿hay evidencia suficiente para decir que la varianza del proceso es mayor de lo esperado a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Estadístico de prueba: \[\chi^2 = \frac{(20 - 1) \times 0.00015}{0.0001} = \frac{19 \times 0.00015}{0.0001} = \frac{0.00285}{0.0001} = 28.5\]
Grados de libertad: \(gl = n - 1 = 20 - 1 = 19\)
Valor p: Para una prueba de cola superior, \(p = P(\chi^2_{19} \ge 28.5)\). Usando software, \(P(\chi^2_{19} \ge 28.5) \approx 0.079\).
Decisión: Como \(p = 0.079 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para decir que la varianza del diámetro del proceso es mayor de \(0.0001 \, \text{mm}^2\).
Solución en R:
# Datos
n <- 20 # Tamaño muestral
s_cuadrado <- 0.00015 # Varianza muestral
sigma0_cuadrado <- 0.0001 # Varianza hipotética bajo H0
alfa <- 0.01 # Nivel de significancia
gl <- n - 1 # Grados de libertad
# 1. Cálculo del estadístico chi-cuadrado
chi2_estadistico <- (gl * s_cuadrado) / sigma0_cuadrado
# 2. Cálculo del valor p (cola superior)
p_valor <- pchisq(chi2_estadistico, df = gl, lower.tail = FALSE)
# 3. Valor crítico
chi2_critico <- qchisq(1 - alfa, df = gl)
# 4. Resultados detallados
cat("--- Prueba Chi-Cuadrado para la Varianza (Cola Superior) ---\n")
## --- Prueba Chi-Cuadrado para la Varianza (Cola Superior) ---
cat(sprintf("Hipótesis nula (H0): σ² ≤ %.5f\n", sigma0_cuadrado))
## Hipótesis nula (H0): σ² ≤ 0.00010
cat(sprintf("Hipótesis alternativa (H1): σ² > %.5f\n", sigma0_cuadrado))
## Hipótesis alternativa (H1): σ² > 0.00010
cat("\n--- Datos Muestrales ---\n")
##
## --- Datos Muestrales ---
cat(sprintf("Tamaño muestral (n): %d\n", n))
## Tamaño muestral (n): 20
cat(sprintf("Varianza muestral (s²): %.5f\n", s_cuadrado))
## Varianza muestral (s²): 0.00015
cat(sprintf("Grados de libertad (gl): %d\n", gl))
## Grados de libertad (gl): 19
cat("\n--- Resultados de la Prueba ---\n")
##
## --- Resultados de la Prueba ---
cat(sprintf("Estadístico chi-cuadrado: %.3f\n", chi2_estadistico))
## Estadístico chi-cuadrado: 28.500
cat(sprintf("Valor crítico (χ²_%.2f): %.3f\n", 1-alfa, chi2_critico))
## Valor crítico (χ²_0.99): 36.191
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.07427
# 5. Decisión
if(p_valor <= alfa) {
cat("\nConclusión: Rechazamos H0 (p =", format.pval(p_valor), "≤ α =", alfa, ")")
cat("\nExiste evidencia estadística para concluir que la varianza poblacional")
cat("\nes significativamente mayor que", sigma0_cuadrado)
} else {
cat("\nConclusión: No rechazamos H0 (p =", format.pval(p_valor), "> α =", alfa, ")")
cat("\nNo hay evidencia suficiente para concluir que la varianza poblacional")
cat("\nes mayor que", sigma0_cuadrado)
}
##
## Conclusión: No rechazamos H0 (p = 0.074267 > α = 0.01 )
## No hay evidencia suficiente para concluir que la varianza poblacional
## es mayor que 1e-04
# 6. Visualización mejorada
library(ggplot2)
# Ajustar límites del gráfico dinámicamente
x_lim_sup <- max(50, chi2_estadistico * 1.2, chi2_critico * 1.2)
x_vals <- seq(0, x_lim_sup, length.out = 500)
# Crear dataframe para el gráfico
df <- data.frame(x = x_vals)
df$y <- dchisq(df$x, df = gl)
# Gráfico
ggplot(df, aes(x = x, y = y)) +
# Distribución chi-cuadrado
geom_line() +
# Región crítica (rojo)
geom_area(data = subset(df, x > chi2_critico),
aes(y = y), fill = "red", alpha = 0.3) +
# Valor p (amarillo)
geom_area(data = subset(df, x > chi2_estadistico),
aes(y = y), fill = "yellow", alpha = 0.4) +
# Líneas de referencia
geom_vline(xintercept = chi2_critico,
linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = chi2_estadistico,
color = "blue", linewidth = 1.2) +
# Anotaciones
annotate("text", x = chi2_critico, y = 0.01,
label = sprintf("χ²(%.2f) = %.2f", 1-alfa, chi2_critico),
color = "red", hjust = -0.1, size = 4) +
annotate("text", x = chi2_estadistico, y = 0.03,
label = sprintf("χ²(obs) = %.2f", chi2_estadistico),
color = "blue", hjust = -0.1, size = 4) +
annotate("text", x = mean(c(chi2_estadistico, x_lim_sup)), y = 0.02,
label = sprintf("Valor p = %.4f", p_valor),
color = "black", size = 4) +
# Configuración del gráfico
labs(title = "Prueba Chi-Cuadrado para la Varianza (Cola Superior)",
subtitle = sprintf("Hipótesis: σ² > %.5f (α = %.2f)", sigma0_cuadrado, alfa),
x = "Estadístico Chi-Cuadrado",
y = "Densidad de Probabilidad",
caption = sprintf("n = %d, s² = %.5f, σ₀² = %.5f, gl = %d",
n, s_cuadrado, sigma0_cuadrado, gl)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, size = 12),
plot.caption = element_text(hjust = 0.5, size = 10),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank())
Región: El gráfico muestra la distribución chi-cuadrado con 19 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico chi
Cuando se tienen dos muestras aleatorias independientes de dos poblaciones que se distribuyen normalmente, podemos utilizar la prueba F para comparar sus varianzas poblacionales (\(\sigma_1^2\) y \(\sigma_2^2\)).
Problema: Un analista quiere comparar la variabilidad de los rendimientos de dos inversiones diferentes. Se toman muestras aleatorias de los rendimientos anuales de la inversión A (n=15) y la inversión B (n=12). La varianza muestral de A es \(s_1^2 = 10.5\) y la varianza muestral de B es \(s_2^2 = 6.8\). Asumiendo que los rendimientos siguen distribuciones normales, ¿hay una diferencia significativa en las varianzas de los rendimientos de las dos inversiones a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Estadístico de prueba: \[F = \frac{s_1^2}{s_2^2} = \frac{10.5}{6.8} \approx 1.544\]
Grados de libertad:
Valor p: Para una prueba de dos colas, \(p = 2 \times P(F_{14, 11} \ge 1.544)\). Usando software, \(P(F_{14, 11} \ge 1.544) \approx 0.208\). \[p = 2 \times 0.208 = 0.416\]
Decisión: Como \(p = 0.416 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que hay una diferencia significativa en las varianzas de los rendimientos de las dos inversiones.
Solución en R:
# Datos
n1 <- 15
s1_cuadrado <- 10.5
n2 <- 12
s2_cuadrado <- 6.8
alfa <- 0.05
gl1 <- n1 - 1
gl2 <- n2 - 1
# Estadístico de prueba F (siempre poner la varianza mayor en el numerador)
f_estadistico <- max(s1_cuadrado, s2_cuadrado) / min(s1_cuadrado, s2_cuadrado)
cat("Estadístico F:", f_estadistico, "\n")
## Estadístico F: 1.544118
# Valor p (prueba de dos colas)
p_valor <- 2 * min(pf(f_estadistico, df1 = gl1, df2 = gl2, lower.tail = FALSE),
1 - pf(f_estadistico, df1 = gl1, df2 = gl2, lower.tail = FALSE))
cat("Valor p:", p_valor, "\n")
## Valor p: 0.4745125
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear datos para la gráfica
x_vals <- seq(0, 5, 0.01)
df_plot <- data.frame(x = x_vals,
y = df(x_vals, df1 = gl1, df2 = gl2))
# Calcular valores críticos
f_critico_inf <- qf(alfa/2, df1 = gl1, df2 = gl2)
f_critico_sup <- qf(1 - alfa/2, df1 = gl1, df2 = gl2)
# Crear la gráfica
ggplot(df_plot, aes(x = x)) +
geom_ribbon(aes(ymin = 0, ymax = y,
fill = x < f_critico_inf | x > f_critico_sup),
alpha = 0.5) +
scale_fill_manual(values = c("lightblue", "red"), guide = "none") +
geom_vline(xintercept = c(f_critico_inf, f_critico_sup),
linetype = "dashed", color = "red") +
geom_vline(xintercept = f_estadistico, color = "blue", linewidth = 1) +
geom_line(aes(y = y)) +
annotate("text", x = f_critico_inf - 0.2, y = 0.1,
label = "F[alpha/2]", parse = TRUE, color = "red") +
annotate("text", x = f_critico_sup + 0.3, y = 0.1,
label = "F[1-alpha/2]", parse = TRUE, color = "red") +
annotate("text", x = f_estadistico + 0.2, y = 0.2,
label = "F[obs]", parse = TRUE, color = "blue") +
annotate("text", x = 2.5, y = 0.3,
label = paste("p =", round(p_valor, 3)), color = "black") +
labs(title = "Prueba F para la igualdad de varianzas (dos colas)",
x = "Estadístico F", y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución F con 14 y 11 grados de libertad. Las áreas rojas en ambas colas representan la región crítica. La línea azul indica el estadístico F observado. El área amarilla representa el valor p.
Problema: Un ingeniero sospecha que la variabilidad en la resistencia de un nuevo material es mayor que la de un material estándar. Se toman muestras aleatorias de la resistencia del nuevo material (n=10) y del material estándar (n=16). La varianza muestral del nuevo material es \(s_1^2 = 22.5\) y la del material estándar es \(s_2^2 = 15.0\). Asumiendo normalidad, ¿hay evidencia suficiente para apoyar la sospecha del ingeniero a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Estadísticos muestrales:
Estadístico de prueba: \[F = \frac{s_1^2}{s_2^2} = \frac{22.5}{15.0} = 1.5\]
Grados de libertad:
Valor p: Para una prueba de cola superior, \(p = P(F_{9, 15} \ge 1.5)\). Usando software, \(P(F_{9, 15} \ge 1.5) \approx 0.231\).
Decisión: Como \(p = 0.231 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que la variabilidad en la resistencia del nuevo material es mayor que la del material estándar.
Solución en R:
# Datos
n1 <- 10
s1_cuadrado <- 22.5
n2 <- 16
s2_cuadrado <- 15.0
alfa <- 0.05
gl1 <- n1 - 1
gl2 <- n2 - 1
# Estadístico de prueba F (asegurando que sea ≥ 1)
f_estadistico <- max(s1_cuadrado, s2_cuadrado) / min(s1_cuadrado, s2_cuadrado)
cat("Estadístico F:", f_estadistico, "\n")
## Estadístico F: 1.5
# Valor p (prueba de cola superior)
p_valor <- pf(f_estadistico, df1 = ifelse(s1_cuadrado > s2_cuadrado, gl1, gl2),
df2 = ifelse(s1_cuadrado > s2_cuadrado, gl2, gl1),
lower.tail = FALSE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.2342334
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula (las varianzas no son iguales).\n")
} else {
cat("No rechazamos la hipótesis nula (no hay evidencia de diferencia en varianzas).\n")
}
## No rechazamos la hipótesis nula (no hay evidencia de diferencia en varianzas).
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear secuencia de valores para el gráfico
x_vals <- seq(0, 5, length.out = 500)
df_plot <- data.frame(x = x_vals,
y = df(x_vals,
df1 = ifelse(s1_cuadrado > s2_cuadrado, gl1, gl2),
df2 = ifelse(s1_cuadrado > s2_cuadrado, gl2, gl1)))
# Calcular valor crítico
f_critico <- qf(1 - alfa,
df1 = ifelse(s1_cuadrado > s2_cuadrado, gl1, gl2),
df2 = ifelse(s1_cuadrado > s2_cuadrado, gl2, gl1))
# Crear el gráfico
ggplot(df_plot, aes(x = x)) +
geom_line(aes(y = y)) +
geom_ribbon(aes(ymin = 0, ymax = y, fill = x > f_critico), alpha = 0.5) +
scale_fill_manual(values = c("lightblue", "red"), guide = "none") +
geom_vline(xintercept = f_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = f_estadistico, color = "blue", linewidth = 1) +
geom_area(data = subset(df_plot, x >= f_estadistico),
aes(y = y), fill = "yellow", alpha = 0.3) +
annotate("text", x = f_critico + 0.3, y = 0.1,
label = "F[1-alpha]", parse = TRUE, color = "red") +
annotate("text", x = f_estadistico + 0.3, y = 0.2,
label = "F[obs]", parse = TRUE, color = "blue") +
annotate("text", x = (f_critico + max(x_vals))/2, y = 0.3,
label = paste("p =", round(p_valor, 4)), color = "black") +
labs(title = "Prueba F para igualdad de varianzas (prueba unilateral)",
subtitle = paste("F(", gl1, ",", gl2, ") =", round(f_estadistico, 3),
", Valor p =", round(p_valor, 4)),
x = "Estadístico F",
y = "Densidad de probabilidad") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
Región: El gráfico muestra la distribución F con 9 y 15 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico F observado. El área amarilla en la cola derecha representa el valor p.
Problema: Un investigador cree que la variabilidad en las calificaciones de un examen es menor en un grupo que recibió una nueva técnica de estudio en comparación con un grupo que usó métodos tradicionales. Las varianzas muestrales fueron \(s_1^2 = 85\) (n=20, grupo nuevo) y \(s_2^2 = 120\) (n=25, grupo tradicional). Asumiendo normalidad, ¿hay evidencia suficiente para apoyar la creencia del investigador a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Estadísticos muestrales:
Estadístico de prueba: \[F = \frac{s_1^2}{s_2^2} = \frac{85}{120} \approx 0.708\]
Grados de libertad:
Valor p: Para una prueba de cola inferior, \(p = P(F_{19, 24} \le 0.708)\). Usando software, \(P(F_{19, 24} \le 0.708) \approx 0.188\).
Decisión: Como \(p = 0.188 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para apoyar la creencia del investigador de que la variabilidad en las calificaciones es menor en el grupo con la nueva técnica de estudio.
Solución en R:
# Datos
n1 <- 20
s1_cuadrado <- 85
n2 <- 25
s2_cuadrado <- 120
alfa <- 0.01
gl1 <- n1 - 1
gl2 <- n2 - 1
# Estadístico de prueba F (asegurar que F ≤ 1 para prueba de cola inferior)
f_estadistico <- min(s1_cuadrado/s2_cuadrado, s2_cuadrado/s1_cuadrado)
cat("Estadístico F:", f_estadistico, "\n")
## Estadístico F: 0.7083333
# Determinar qué varianza es menor para los grados de libertad correctos
if(s1_cuadrado <= s2_cuadrado) {
df_num <- gl1
df_den <- gl2
} else {
df_num <- gl2
df_den <- gl1
}
# Valor p (prueba de cola inferior)
p_valor <- pf(f_estadistico, df1 = df_num, df2 = df_den, lower.tail = TRUE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.2233693
# Decisión
if(p_valor <= alfa) {
cat("Rechazamos la hipótesis nula (las varianzas no son iguales).\n")
} else {
cat("No rechazamos la hipótesis nula (no hay evidencia de diferencia en varianzas).\n")
}
## No rechazamos la hipótesis nula (no hay evidencia de diferencia en varianzas).
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear secuencia de valores para el gráfico
x_vals <- seq(0, 3, length.out = 500)
df_plot <- data.frame(x = x_vals,
y = df(x_vals, df1 = df_num, df2 = df_den))
# Calcular valor crítico
f_critico <- qf(alfa, df1 = df_num, df2 = df_den)
# Crear el gráfico
ggplot(df_plot, aes(x = x)) +
geom_line(aes(y = y)) +
geom_ribbon(aes(ymin = 0, ymax = y, fill = x < f_critico), alpha = 0.5) +
scale_fill_manual(values = c("lightblue", "red"), guide = "none") +
geom_vline(xintercept = f_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = f_estadistico, color = "blue", linewidth = 1) +
geom_area(data = subset(df_plot, x <= f_estadistico),
aes(y = y), fill = "yellow", alpha = 0.3) +
annotate("text", x = f_critico - 0.1, y = 0.1,
label = "F[alpha]", parse = TRUE, color = "red") +
annotate("text", x = f_estadistico - 0.1, y = 0.2,
label = "F[obs]", parse = TRUE, color = "blue") +
annotate("text", x = 1.5, y = 0.3,
label = paste("p =", round(p_valor, 4)), color = "black") +
labs(title = "Prueba F para igualdad de varianzas (prueba de cola inferior)",
subtitle = paste("F(", df_num, ",", df_den, ") =", round(f_estadistico, 3),
", Valor p =", round(p_valor, 4)),
x = "Estadístico F",
y = "Densidad de probabilidad") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
Región: El gráfico muestra la distribución F con 19 y 24 grados de libertad. El área roja en la cola izquierda representa la región crítica. La línea azul indica el estadístico F observado. El área amarilla en la cola izquierda representa el valor p.
Problema: Se comparan las varianzas del peso de dos tipos de grano cosechado. Muestra 1 (n=12) tiene una varianza de \(s_1^2 = 0.8\) y Muestra 2 (n=15) tiene una varianza de \(s_2^2 = 0.2\). Asumiendo normalidad, ¿hay una diferencia significativa en las varianzas del peso de los dos tipos de grano a un nivel de significancia de \(\alpha = 0.10\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.10\)
Estadísticos muestrales:
Estadístico de prueba: \[F = \frac{s_1^2}{s_2^2} = \frac{0.8}{0.2} = 4\]
Grados de libertad:
Valor p: Para una prueba de dos colas, \(p = 2 \times P(F_{11, 14} \ge 4)\). Usando software, \(P(F_{11, 14} \ge 4) \approx 0.013\). \[p = 2 \times 0.013 = 0.026\]
Decisión: Como \(p = 0.026 \le \alpha = 0.10\), rechazamos \(H_0\).
Conclusión: Hay evidencia estadística suficiente al nivel de significancia de 0.10 para decir que hay una diferencia significativa en las varianzas del peso de los dos tipos de grano.
Solución en R:
# Datos
n1 <- 12
s1_cuadrado <- 0.8
n2 <- 15
s2_cuadrado <- 0.2
alfa <- 0.10
gl1 <- n1 - 1
gl2 <- n2 - 1
# Estadístico de prueba F (asegurando que F ≥ 1)
f_estadistico <- max(s1_cuadrado, s2_cuadrado) / min(s1_cuadrado, s2_cuadrado)
cat("Estadístico F:", f_estadistico, "\n")
## Estadístico F: 4
# Ajustar grados de libertad según qué varianza es mayor
if (s1_cuadrado > s2_cuadrado) {
df_num <- gl1
df_den <- gl2
} else {
df_num <- gl2
df_den <- gl1
}
# Valor p (prueba de dos colas)
cola_superior <- pf(f_estadistico, df1 = df_num, df2 = df_den, lower.tail = FALSE)
p_valor <- 2 * min(cola_superior, 1 - cola_superior)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.01718818
# Decisión
if (p_valor <= alfa) {
cat("Rechazamos la hipótesis nula (las varianzas no son iguales).\n")
} else {
cat("No rechazamos la hipótesis nula (no hay evidencia de diferencia en varianzas).\n")
}
## Rechazamos la hipótesis nula (las varianzas no son iguales).
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear secuencia de valores para el gráfico
x_vals <- seq(0, 10, length.out = 500)
df_plot <- data.frame(x = x_vals,
y = df(x_vals, df1 = df_num, df2 = df_den))
# Calcular valores críticos
f_critico_inf <- qf(alfa/2, df1 = df_num, df2 = df_den)
f_critico_sup <- qf(1 - alfa/2, df1 = df_num, df2 = df_den)
# Crear el gráfico
ggplot(df_plot, aes(x = x)) +
geom_line(aes(y = y)) +
# Región crítica (dos colas)
geom_ribbon(data = subset(df_plot, x < f_critico_inf),
aes(ymin = 0, ymax = y), fill = "red", alpha = 0.5) +
geom_ribbon(data = subset(df_plot, x > f_critico_sup),
aes(ymin = 0, ymax = y), fill = "red", alpha = 0.5) +
# Área no crítica
geom_ribbon(data = subset(df_plot, x >= f_critico_inf & x <= f_critico_sup),
aes(ymin = 0, ymax = y), fill = "lightblue", alpha = 0.5) +
# Líneas críticas
geom_vline(xintercept = c(f_critico_inf, f_critico_sup),
linetype = "dashed", color = "red") +
# Estadístico observado
geom_vline(xintercept = f_estadistico, color = "blue", linewidth = 1) +
# Área del valor p (solo la cola superior ya que F ≥ 1)
geom_area(data = subset(df_plot, x >= f_estadistico),
aes(y = y), fill = "yellow", alpha = 0.3) +
# Etiquetas
annotate("text", x = f_critico_inf - 0.3, y = 0.1,
label = "F[alpha/2]", parse = TRUE, color = "red") +
annotate("text", x = f_critico_sup + 0.5, y = 0.1,
label = "F[1-alpha/2]", parse = TRUE, color = "red") +
annotate("text", x = f_estadistico + 0.5, y = 0.2,
label = "F[obs]", parse = TRUE, color = "blue") +
annotate("text", x = mean(c(f_critico_sup, max(x_vals))) - 1, y = 0.3,
label = paste("p =", round(p_valor, 4)), color = "black") +
# Títulos y etiquetas
labs(title = "Prueba F para igualdad de varianzas (prueba bilateral)",
subtitle = paste("F(", df_num, ",", df_den, ") =", round(f_estadistico, 3),
", Valor p =", round(p_valor, 4)),
x = "Estadístico F",
y = "Densidad de probabilidad") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
Problema: Se realiza una prueba de hipótesis con \(H_0: \mu = 100\) contra \(H_1: \mu \neq 100\), con \(\alpha = 0.05\), \(n = 25\), y \(\sigma = 15\). Calcula la potencia de la prueba si la verdadera media poblacional es \(\mu_1 = 105\).
Solución en Markdown:
Especificaciones: \(H_0: \mu = 100\), \(H_1: \mu \neq 100\), \(\alpha = 0.05\), \(n = 25\), \(\sigma = 15\), \(\mu_1 = 105\).
Región de rechazo bajo \(H_0\): Para una prueba de dos colas con \(\alpha = 0.05\), los valores críticos de \(z\) son \(\pm z_{0.025} = \pm 1.96\). Esto corresponde a valores de \(\bar{x}\) tales que: \[\frac{\bar{x} - 100}{15 / \sqrt{25}} > 1.96 \implies \bar{x} > 100 + 1.96 \times 3 = 105.88\] \[\frac{\bar{x} - 100}{15 / \sqrt{25}} < -1.96 \implies \bar{x} < 100 - 1.96 \times 3 = 94.12\]
Potencia bajo \(H_1 (\mu = 105)\): Calculamos la probabilidad de que \(\bar{x}\) caiga en la región de rechazo cuando la verdadera media es 105. El estadístico \(z\) bajo \(H_1\) es \(Z' = \frac{\bar{X} - 105}{15 / \sqrt{25}} = \frac{\bar{X} - 105}{3}\).
Solución en R:
# Especificaciones
mu0 <- 100
mu1 <- 105
alfa <- 0.05
n <- 25
sigma <- 15
se <- sigma / sqrt(n)
# Valores críticos de la media muestral bajo H0
media_critica_superior <- mu0 + qnorm(1 - alfa / 2) * se
media_critica_inferior <- mu0 - qnorm(1 - alfa / 2) * se
cat("Media crítica superior:", media_critica_superior, "\n")
## Media crítica superior: 105.8799
cat("Media crítica inferior:", media_critica_inferior, "\n")
## Media crítica inferior: 94.12011
# Potencia
potencia_superior <- pnorm(media_critica_superior, mean = mu1, sd = se, lower.tail = FALSE)
potencia_inferior <- pnorm(media_critica_inferior, mean = mu1, sd = se, lower.tail = TRUE)
potencia <- potencia_superior + potencia_inferior
cat("Potencia:", potencia, "\n")
## Potencia: 0.384791
# Visualización de la potencia
library(ggplot2)
data.frame(x = seq(85, 120, 0.1)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = mu0, sd = se), aes(color = "H0"), linewidth = 1) +
stat_function(fun = dnorm, args = list(mean = mu1, sd = se), aes(color = "H1"), linewidth = 1) +
geom_vline(xintercept = media_critica_superior, linetype = "dashed", color = "red") +
geom_vline(xintercept = media_critica_inferior, linetype = "dashed", color = "red") +
annotate("text", x = media_critica_superior + 1, y = dnorm(media_critica_superior, mu1, se) + 0.005, label = "Rechazar H0", color = "red") +
annotate("text", x = media_critica_inferior - 1, y = dnorm(media_critica_inferior, mu1, se) + 0.005, label = "Rechazar H0", color = "red") +
annotate("text", x = (media_critica_superior + 120) / 2, y = dnorm(mu1, mu1, se) / 2, label = paste("Potencia =", round(potencia_superior, 3)), color = "blue") +
annotate("text", x = (media_critica_inferior + 85) / 2, y = dnorm(mu1, mu1, se) / 3, label = paste("Potencia (inferior) =", round(potencia_inferior, 3)), color = "blue") +
labs(title = "Potencia de la Prueba (Dos Colas)", x = "Media Muestral", y = "Densidad") +
scale_color_manual(name = "Hipótesis", values = c("H0" = "black", "H1" = "blue")) +
theme_minimal()
# Especificaciones del análisis
mu0 <- 100 # Media bajo hipótesis nula
mu1 <- 105 # Media bajo hipótesis alternativa
alfa <- 0.05 # Nivel de significancia
n <- 25 # Tamaño muestral
sigma <- 15 # Desviación estándar poblacional
# Cálculo del error estándar
se <- sigma / sqrt(n)
cat("Error estándar:", round(se, 3), "\n")
## Error estándar: 3
# Valores críticos de la media muestral bajo H0 (prueba bilateral)
z_critico <- qnorm(1 - alfa/2)
media_critica_superior <- mu0 + z_critico * se
media_critica_inferior <- mu0 - z_critico * se
cat("\nRegión de rechazo:\n")
##
## Región de rechazo:
cat(sprintf("• Límite inferior: %.3f\n• Límite superior: %.3f\n",
media_critica_inferior, media_critica_superior))
## • Límite inferior: 94.120
## • Límite superior: 105.880
# Cálculo de la potencia (probabilidad de rechazar H0 cuando H1 es verdadera)
potencia_superior <- pnorm(media_critica_superior, mean = mu1, sd = se, lower.tail = FALSE)
potencia_inferior <- pnorm(media_critica_inferior, mean = mu1, sd = se, lower.tail = TRUE)
potencia_total <- potencia_superior + potencia_inferior
cat("\nResultados de potencia:\n")
##
## Resultados de potencia:
cat(sprintf("• Potencia cola superior: %.4f\n• Potencia cola inferior: %.4f\n• Potencia total: %.4f\n",
potencia_superior, potencia_inferior, potencia_total))
## • Potencia cola superior: 0.3846
## • Potencia cola inferior: 0.0001
## • Potencia total: 0.3848
# Visualización profesional
library(ggplot2)
library(dplyr)
# Datos para el gráfico
df_plot <- data.frame(x = seq(85, 120, 0.1)) %>%
mutate(
densidad_H0 = dnorm(x, mu0, se),
densidad_H1 = dnorm(x, mu1, se)
)
# Creación del gráfico
ggplot(df_plot, aes(x = x)) +
# Distribuciones
geom_line(aes(y = densidad_H0, color = "H₀: μ = 100"), linewidth = 1.2) +
geom_line(aes(y = densidad_H1, color = "H₁: μ = 105"), linewidth = 1.2) +
# Regiones de rechazo
geom_area(data = subset(df_plot, x <= media_critica_inferior | x >= media_critica_superior),
aes(y = densidad_H1), fill = "#1E88E5", alpha = 0.5) +
# Líneas críticas
geom_vline(xintercept = c(media_critica_inferior, media_critica_superior),
linetype = "dashed", color = "#D81B60", linewidth = 1) +
# Anotaciones
annotate("text", x = media_critica_superior + 1, y = 0.02,
label = sprintf("Límite superior\n%.2f", media_critica_superior),
color = "#D81B60", size = 4, hjust = 0) +
annotate("text", x = media_critica_inferior - 1, y = 0.02,
label = sprintf("Límite inferior\n%.2f", media_critica_inferior),
color = "#D81B60", size = 4, hjust = 1) +
annotate("text", x = 113, y = 0.05,
label = sprintf("Potencia superior\n= %.3f", potencia_superior),
color = "#1E88E5", size = 5, fontface = "bold") +
annotate("text", x = 87, y = 0.05,
label = sprintf("Potencia inferior\n= %.3f", potencia_inferior),
color = "#1E88E5", size = 5, fontface = "bold") +
# Formato y estilo
labs(
title = "Análisis de Potencia para Prueba Z Bilateral",
subtitle = sprintf("Tamaño muestral: n = %d | Nivel de significancia: α = %.2f", n, alfa),
x = "Media muestral (x̄)",
y = "Densidad de probabilidad",
color = "Distribución"
) +
scale_color_manual(values = c("H₀: μ = 100" = "#FFC107", "H₁: μ = 105" = "#004D40")) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 12),
legend.position = "top",
legend.title = element_text(face = "bold"),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13),
axis.text = element_text(size = 11)
) +
scale_x_continuous(breaks = seq(85, 120, 5)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.05)))
Región: El gráfico muestra las distribuciones de la media muestral bajo \(H_0\) y \(H_1\). Las líneas verticales rojas indican las regiones de rechazo bajo \(H_0\). El área bajo la curva de \(H_1\) que cae en estas regiones es la potencia de la prueba.
Problema: Se realiza una prueba de hipótesis con \(H_0: \mu = 50\) contra \(H_1: \mu > 50\), con \(\alpha = 0.01\), \(n = 100\), y \(\sigma = 8\). Calcula la potencia de la prueba si la verdadera media poblacional es \(\mu_1 = 52\).
Solución en Markdown:
Especificaciones: \(H_0: \mu = 50\), \(H_1: \mu > 50\), \(\alpha = 0.01\), \(n = 100\), \(\sigma = 8\), \(\mu_1 = 52\).
Región de rechazo bajo \(H_0\): Para una prueba de cola superior con \(\alpha = 0.01\), el valor crítico de \(z\) es \(z_{0.01} = 2.33\). Esto corresponde a valores de \(\bar{x}\) tales que: \[\frac{\bar{x} - 50}{8 / \sqrt{100}} > 2.33 \implies \bar{x} > 50 + 2.33 \times 0.8 = 51.864\]
Potencia bajo \(H_1 (\mu = 52)\): Calculamos la probabilidad de que \(\bar{x}\) caiga en la región de rechazo cuando la verdadera media es 52. El estadístico \(z\) bajo \(H_1\) es \(Z' = \frac{\bar{X} - 52}{8 / \sqrt{100}} = \frac{\bar{X} - 52}{0.8}\).
Solución en R:
# Especificaciones
mu0 <- 50
mu1 <- 52
alfa <- 0.01
n <- 100
sigma <- 8
se <- sigma / sqrt(n)
# Valor crítico de la media muestral bajo H0
media_critica <- mu0 + qnorm(1 - alfa) * se
cat("Media crítica:", media_critica, "\n")
## Media crítica: 51.86108
# Potencia
potencia <- pnorm(media_critica, mean = mu1, sd = se, lower.tail = FALSE)
cat("Potencia:", potencia, "\n")
## Potencia: 0.5689306
# Visualización de la potencia
library(ggplot2)
data.frame(x = seq(47, 55, 0.1)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = mu0, sd = se), aes(color = "H0"), linewidth = 1) +
stat_function(fun = dnorm, args = list(mean = mu1, sd = se), aes(color = "H1"), linewidth = 1) +
geom_vline(xintercept = media_critica, linetype = "dashed", color = "red") +
annotate("text", x = media_critica + 0.2, y = dnorm(media_critica, mu1, se) + 0.005, label = "Rechazar H0", color = "red") +
annotate("text", x = (media_critica + 55) / 2, y = dnorm(mu1, mu1, se) / 2, label = paste("Potencia =", round(potencia, 3)), color = "blue") +
labs(title = "Potencia de la Prueba (Cola Superior)", x = "Media Muestral", y = "Densidad") +
scale_color_manual(name = "Hipótesis", values = c("H0" = "black", "H1" = "blue")) +
theme_minimal()
Región: El gráfico muestra las distribuciones de la media muestral bajo \(H_0\) y \(H_1\). La línea vertical roja indica la región de rechazo bajo \(H_0\). El área bajo la curva de \(H_1\) a la derecha de esta línea es la potencia de la prueba.
# ANÁLISIS DE POTENCIA MEJORADO PARA PRUEBA UNILATERAL SUPERIOR
# PARÁMETROS DEL ANÁLISIS
mu0 <- 50 # Media bajo hipótesis nula
mu1 <- 52 # Media bajo hipótesis alternativa
alfa <- 0.01 # Nivel de significancia
n <- 100 # Tamaño muestral
sigma <- 8 # Desviación estándar poblacional
# CÁLCULOS ESTADÍSTICOS
se <- sigma / sqrt(n) # Error estándar
z_critico <- qnorm(1 - alfa) # Valor crítico Z
media_critica <- mu0 + z_critico * se # Media muestral crítica
# Crear línea de separación visual
separador <- paste(rep("=", 60), collapse = "")
cat(separador, "\n")
## ============================================================
cat("ANÁLISIS DE POTENCIA PARA PRUEBA UNILATERAL SUPERIOR\n")
## ANÁLISIS DE POTENCIA PARA PRUEBA UNILATERAL SUPERIOR
cat(separador, "\n\n")
## ============================================================
cat(sprintf("• Media crítica para rechazar H₀: %.3f\n", media_critica))
## • Media crítica para rechazar H₀: 51.861
cat(sprintf("• Error estándar: %.3f\n", se))
## • Error estándar: 0.800
cat(sprintf("• Valor crítico Z: %.3f\n\n", z_critico))
## • Valor crítico Z: 2.326
# CÁLCULO DE POTENCIA
potencia <- pnorm(media_critica, mean = mu1, sd = se, lower.tail = FALSE)
cat(sprintf("• Potencia estadística (1-β): %.3f (%.1f%%)\n", potencia, potencia*100))
## • Potencia estadística (1-β): 0.569 (56.9%)
cat("\nInterpretación:",
ifelse(potencia >= 0.8, "Potencia adecuada (≥80%)",
ifelse(potencia >= 0.5, "Potencia moderada",
"Potencia insuficiente")), "\n")
##
## Interpretación: Potencia moderada
cat(separador, "\n")
## ============================================================
# VISUALIZACIÓN PROFESIONAL
library(ggplot2)
library(dplyr)
# Datos para el gráfico
df_plot <- data.frame(x = seq(47, 55, 0.01)) %>%
mutate(
densidad_H0 = dnorm(x, mu0, se),
densidad_H1 = dnorm(x, mu1, se)
)
# Creación del gráfico
ggplot(df_plot, aes(x = x)) +
# 1. Distribuciones superpuestas
geom_line(aes(y = densidad_H0, color = "H₀: μ ≤ 50"), linewidth = 1.5, alpha = 0.8) +
geom_line(aes(y = densidad_H1, color = "H₁: μ = 52"), linewidth = 1.5, alpha = 0.8) +
# 2. Área de potencia
geom_area(data = subset(df_plot, x >= media_critica),
aes(y = densidad_H1, fill = "Potencia"), alpha = 0.5) +
# 3. Línea crítica
geom_vline(xintercept = media_critica,
linetype = "dashed", color = "#D32F2F", linewidth = 1.2) +
# 4. Anotaciones profesionales
annotate("text", x = media_critica + 0.1, y = 0.02,
label = sprintf("Punto crítico\n%.2f", media_critica),
color = "#D32F2F", size = 4.5, hjust = 0, fontface = "bold") +
annotate("text", x = 53, y = 0.1,
label = sprintf("Potencia = %.3f\n(%.1f%%)", potencia, potencia*100),
color = "#1976D2", size = 5, fontface = "bold") +
# 5. Formato y estilo
labs(
title = "ANÁLISIS DE POTENCIA - PRUEBA UNILATERAL SUPERIOR",
subtitle = sprintf("Comparación de medias | n = %d | α = %.2f | σ = %.1f", n, alfa, sigma),
x = "Media Muestral (x̄)",
y = "Densidad de Probabilidad",
color = "Distribución",
fill = "Concepto"
) +
scale_color_manual(values = c("H₀: μ ≤ 50" = "#FF9800", "H₁: μ = 52" = "#303F9F")) +
scale_fill_manual(values = c("Potencia" = "#2196F3")) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 16, color = "#333333"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
legend.position = "top",
legend.box = "horizontal",
legend.title = element_text(face = "bold"),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13, face = "bold"),
axis.text = element_text(size = 11),
plot.background = element_rect(fill = "white", color = NA)
) +
scale_x_continuous(breaks = seq(47, 55, 1)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.05)))
Problema: Se realiza una prueba de hipótesis con \(H_0: \mu = 70\) contra \(H_1: \mu < 70\), con \(\alpha = 0.05\), \(n = 40\), y \(\sigma = 10\). Calcula la potencia de la prueba si la verdadera media poblacional es \(\mu_1 = 68\).
Solución en Markdown:
Especificaciones: \(H_0: \mu = 70\), \(H_1: \mu < 70\), \(\alpha = 0.05\), \(n = 40\), \(\sigma = 10\), \(\mu_1 = 68\).
Región de rechazo bajo \(H_0\): Para una prueba de cola inferior con \(\alpha = 0.05\), el valor crítico de \(z\) es \(-z_{0.05} = -1.645\). Esto corresponde a valores de \(\bar{x}\) tales que: \[\frac{\bar{x} - 70}{10 / \sqrt{40}} < -1.645 \implies \bar{x} < 70 - 1.645 \times 1.581 = 67.39\]
Potencia bajo \(H_1 (\mu = 68)\): Calculamos la probabilidad de que \(\bar{x}\) caiga en la región de rechazo cuando la verdadera media es 68. El estadístico \(z\) bajo \(H_1\) es \(Z' = \frac{\bar{X} - 68}{10 / \sqrt{40}} = \frac{\bar{X} - 68}{1.581}\).
Solución en R:
# Especificaciones
mu0 <- 70
mu1 <- 68
alfa <- 0.05
n <- 40
sigma <- 10
se <- sigma / sqrt(n)
# Valor crítico de la media muestral bajo H0
media_critica <- mu0 - qnorm(alfa) * se
cat("Media crítica:", media_critica, "\n")
## Media crítica: 72.60074
# Potencia
potencia <- pnorm(media_critica, mean = mu1, sd = se, lower.tail = TRUE)
cat("Potencia:", potencia, "\n")
## Potencia: 0.9981915
# Visualización de la potencia (continuación)
library(ggplot2)
data.frame(x = seq(65, 75, 0.1)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = mu0, sd = se), aes(color = "H0"), linewidth = 1) +
stat_function(fun = dnorm, args = list(mean = mu1, sd = se), aes(color = "H1"), linewidth = 1) +
geom_vline(xintercept = media_critica, linetype = "dashed", color = "red") +
annotate("text", x = media_critica - 0.2, y = dnorm(media_critica, mu1, se) + 0.005, label = "Rechazar H0", color = "red") +
annotate("text", x = (media_critica + 65) / 2, y = dnorm(mu1, mu1, se) / 2, label = paste("Potencia =", round(potencia, 3)), color = "blue") +
labs(title = "Potencia de la Prueba (Cola Inferior)", x = "Media Muestral", y = "Densidad") +
scale_color_manual(name = "Hipótesis", values = c("H0" = "black", "H1" = "blue")) +
theme_minimal()
# ANÁLISIS DE POTENCIA ESTADÍSTICA - PRUEBA UNILATERAL INFERIOR
## PARÁMETROS DEL ESTUDIO ============================================
mu0 <- 70 # Media poblacional bajo hipótesis nula (H₀)
mu1 <- 68 # Media poblacional bajo hipótesis alternativa (H₁)
alfa <- 0.05 # Nivel de significancia (α)
n <- 40 # Tamaño muestral
sigma <- 10 # Desviación estándar poblacional (σ)
## CÁLCULOS ESTADÍSTICOS =============================================
se <- sigma / sqrt(n) # Error estándar de la media
z_critico <- qnorm(alfa) # Valor crítico Z para prueba unilateral inferior
media_critica <- mu0 + z_critico * se # Media muestral crítica
## RESULTADOS ========================================================
cat("\n══════════════════════════════════════════════════════════\n")
##
## ══════════════════════════════════════════════════════════
cat(" ANÁLISIS DE POTENCIA - PRUEBA UNILATERAL INFERIOR\n")
## ANÁLISIS DE POTENCIA - PRUEBA UNILATERAL INFERIOR
cat("══════════════════════════════════════════════════════════\n\n")
## ══════════════════════════════════════════════════════════
cat("PARÁMETROS DEL ESTUDIO:\n")
## PARÁMETROS DEL ESTUDIO:
cat(sprintf("• Media H₀ (μ₀): %.1f\n• Media H₁ (μ₁): %.1f\n• α: %.2f\n• n: %d\n• σ: %.1f\n\n",
mu0, mu1, alfa, n, sigma))
## • Media H₀ (μ₀): 70.0
## • Media H₁ (μ₁): 68.0
## • α: 0.05
## • n: 40
## • σ: 10.0
cat("RESULTADOS ESTADÍSTICOS:\n")
## RESULTADOS ESTADÍSTICOS:
cat(sprintf("• Error estándar (σ/√n): %.3f\n", se))
## • Error estándar (σ/√n): 1.581
cat(sprintf("• Valor crítico Z: %.3f\n", z_critico))
## • Valor crítico Z: -1.645
cat(sprintf("• Media muestral crítica: %.3f\n\n", media_critica))
## • Media muestral crítica: 67.399
potencia <- pnorm(media_critica, mean = mu1, sd = se, lower.tail = TRUE)
cat("POTENCIA ESTADÍSTICA (1-β):\n")
## POTENCIA ESTADÍSTICA (1-β):
cat(sprintf("• Potencia: %.3f (%.1f%%)\n", potencia, potencia*100))
## • Potencia: 0.352 (35.2%)
interpretacion <- if(potencia >= 0.8) {
"Excelente potencia (≥80%)"
} else if(potencia >= 0.5) {
"Potencia moderada"
} else {
"Potencia insuficiente - considere aumentar n"
}
cat(sprintf("\nINTERPRETACIÓN: %s\n", interpretacion))
##
## INTERPRETACIÓN: Potencia insuficiente - considere aumentar n
cat("══════════════════════════════════════════════════════════\n")
## ══════════════════════════════════════════════════════════
## VISUALIZACIÓN PROFESIONAL =========================================
library(ggplot2)
library(dplyr)
# Datos para el gráfico
df_plot <- data.frame(x = seq(65, 75, 0.01)) %>%
mutate(
densidad_H0 = dnorm(x, mu0, se),
densidad_H1 = dnorm(x, mu1, se)
)
# Creación del gráfico
ggplot(df_plot, aes(x = x)) +
# 1. Distribuciones superpuestas
geom_line(aes(y = densidad_H0, color = "H₀: μ ≥ 70"), linewidth = 1.5, alpha = 0.9) +
geom_line(aes(y = densidad_H1, color = "H₁: μ = 68"), linewidth = 1.5, alpha = 0.9) +
# 2. Área de potencia
geom_area(data = subset(df_plot, x <= media_critica),
aes(y = densidad_H1, fill = "Potencia (1-β)"), alpha = 0.6) +
# 3. Región crítica
geom_area(data = subset(df_plot, x <= media_critica),
aes(y = densidad_H0, fill = "Región crítica"), alpha = 0.3) +
# 4. Línea crítica
geom_vline(xintercept = media_critica,
linetype = "dashed", color = "#D32F2F", linewidth = 1.2) +
# 5. Anotaciones
annotate("text", x = media_critica - 0.2, y = 0.02,
label = sprintf("Media crítica\n= %.2f", media_critica),
color = "#D32F2F", size = 4.5, hjust = 1, fontface = "bold") +
annotate("text", x = 66.5, y = 0.1,
label = sprintf("Potencia = %.3f\n(%.1f%%)", potencia, potencia*100),
color = "#1976D2", size = 5, fontface = "bold") +
# 6. Formato y estilo
labs(
title = "ANÁLISIS DE POTENCIA - PRUEBA UNILATERAL INFERIOR",
subtitle = sprintf("H₀: μ ≥ %.1f vs H₁: μ < %.1f | n = %d | α = %.2f | σ = %.1f",
mu0, mu0, n, alfa, sigma),
x = "Media Muestral (x̄)",
y = "Densidad de Probabilidad",
color = "Distribuciones",
fill = "Áreas Clave"
) +
scale_color_manual(values = c("H₀: μ ≥ 70" = "#FF6D00", "H₁: μ = 68" = "#00695C")) +
scale_fill_manual(values = c("Potencia (1-β)" = "#1E88E5", "Región crítica" = "#EF5350")) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 16, color = "#333333"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "#555555"),
legend.position = "top",
legend.box = "horizontal",
legend.title = element_text(face = "bold"),
panel.grid.major = element_line(color = "gray92"),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 13, face = "bold"),
axis.text = element_text(size = 11),
plot.margin = margin(15, 15, 15, 15),
plot.background = element_rect(fill = "white", color = NA)
) +
scale_x_continuous(breaks = seq(65, 75, 1)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.05)))
La potencia de una prueba de hipótesis para la proporción poblacional es la probabilidad de rechazar correctamente la hipótesis nula (\(H_0\)) cuando la hipótesis alternativa (\(H_1\)) es verdadera. Al igual que con la prueba de la media, la valoración de la potencia es esencial para evaluar la sensibilidad de la prueba y para planificar estudios con una adecuada probabilidad de detectar un efecto real.
Problema: Se realiza una prueba de hipótesis con \(H_0: p = 0.50\) contra \(H_1: p \neq 0.50\), con \(\alpha = 0.05\) y \(n = 100\). Calcula la potencia de la prueba si la verdadera proporción poblacional es \(p_1 = 0.58\).
Solución en Markdown:
Especificaciones: \(H_0: p = 0.50\), \(H_1: p \neq 0.50\), \(\alpha = 0.05\), \(n = 100\), \(p_1 = 0.58\).
Región de rechazo bajo \(H_0\): Para una prueba de dos colas con \(\alpha = 0.05\), los valores críticos de \(z\) son \(\pm 1.96\). Los límites críticos para \(\hat{p}\) son: \[\hat{p}_{crítico\_superior} = 0.50 + 1.96 \sqrt{\frac{0.50(1 - 0.50)}{100}} = 0.50 + 1.96 \times 0.05 = 0.598\] \[\hat{p}_{crítico\_inferior} = 0.50 - 1.96 \sqrt{\frac{0.50(1 - 0.50)}{100}} = 0.50 - 1.96 \times 0.05 = 0.402\]
Potencia bajo \(H_1 (p = 0.58)\): La distribución de \(\hat{p}\) bajo \(H_1\) es aproximadamente normal con media \(0.58\) y desviación estándar \(\sqrt{\frac{0.58(1 - 0.58)}{100}} = \sqrt{\frac{0.2436}{100}} \approx 0.0494\).
Solución en R:
# Especificaciones
p0 <- 0.50 # Proporción bajo hipótesis nula
p1 <- 0.58 # Proporción alternativa
alfa <- 0.05 # Nivel de significancia
n <- 100 # Tamaño muestral
# Errores estándar
se0 <- sqrt((p0 * (1 - p0)) / n) # Bajo H0
se1 <- sqrt((p1 * (1 - p1)) / n) # Bajo H1
# Límites críticos de la proporción muestral bajo H0 (prueba bilateral)
z_critico <- qnorm(1 - alfa/2)
p_critico_superior <- p0 + z_critico * se0
p_critico_inferior <- p0 - z_critico * se0
cat("Proporción crítica superior:", round(p_critico_superior, 4), "\n")
## Proporción crítica superior: 0.598
cat("Proporción crítica inferior:", round(p_critico_inferior, 4), "\n")
## Proporción crítica inferior: 0.402
# Cálculo de la potencia (probabilidad de rechazar H0 cuando H1 es verdadera)
potencia_superior <- pnorm(p_critico_superior, mean = p1, sd = se1, lower.tail = FALSE)
potencia_inferior <- pnorm(p_critico_inferior, mean = p1, sd = se1, lower.tail = TRUE)
potencia_total <- potencia_superior + potencia_inferior
cat("Potencia superior:", round(potencia_superior, 4), "\n")
## Potencia superior: 0.3577
cat("Potencia inferior:", round(potencia_inferior, 4), "\n")
## Potencia inferior: 2e-04
cat("Potencia total:", round(potencia_total, 4), "\n")
## Potencia total: 0.3578
# Visualización de la potencia
library(ggplot2)
library(dplyr)
# Crear secuencia de valores para el gráfico
x_vals <- seq(0.35, 0.70, length.out = 500)
df_plot <- data.frame(x = x_vals) %>%
mutate(
y_H0 = dnorm(x, mean = p0, sd = se0),
y_H1 = dnorm(x, mean = p1, sd = se1)
)
# Crear el gráfico
ggplot(df_plot, aes(x = x)) +
# Distribuciones
geom_line(aes(y = y_H0, color = paste("H0: p =", p0)), linewidth = 1) +
geom_line(aes(y = y_H1, color = paste("H1: p =", p1)), linewidth = 1) +
# Regiones críticas
geom_vline(xintercept = c(p_critico_inferior, p_critico_superior),
linetype = "dashed", color = "red") +
# Áreas de potencia
geom_area(data = subset(df_plot, x >= p_critico_superior),
aes(y = y_H1), fill = "blue", alpha = 0.3) +
geom_area(data = subset(df_plot, x <= p_critico_inferior),
aes(y = y_H1), fill = "blue", alpha = 0.3) +
# Etiquetas
annotate("text", x = p_critico_superior + 0.02, y = 3,
label = "Límite crítico", color = "red", hjust = 0) +
annotate("text", x = p_critico_inferior - 0.02, y = 3,
label = "Límite crítico", color = "red", hjust = 1) +
annotate("text", x = p_critico_superior + 0.05, y = 10,
label = paste("Potencia superior =", round(potencia_superior, 3)),
color = "darkblue", hjust = 0) +
annotate("text", x = p_critico_inferior - 0.05, y = 10,
label = paste("Potencia inferior =", round(potencia_inferior, 3)),
color = "darkblue", hjust = 1) +
# Formato
labs(title = "Potencia de la Prueba de Proporción (Bilateral)",
subtitle = paste("Tamaño muestral =", n, "| Nivel de significancia =", alfa),
x = "Proporción muestral",
y = "Densidad",
color = "Distribución") +
scale_color_manual(values = c("black", "blue")) +
theme_minimal() +
theme(legend.position = "top",
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
Región: El gráfico muestra las distribuciones de la proporción muestral bajo \(H_0\) y \(H_1\). Las líneas verticales rojas indican las regiones de rechazo bajo \(H_0\). El área bajo la curva de \(H_1\) que cae en estas regiones es la potencia de la prueba.
Problema: Se realiza una prueba de hipótesis con \(H_0: p = 0.30\) contra \(H_1: p > 0.30\), con \(\alpha = 0.01\) y \(n = 200\). Calcula la potencia de la prueba si la verdadera proporción poblacional es \(p_1 = 0.35\).
Solución en Markdown:
Especificaciones: \(H_0: p = 0.30\), \(H_1: p > 0.30\), \(\alpha = 0.01\), \(n = 200\), \(p_1 = 0.35\).
Región de rechazo bajo \(H_0\): Para una prueba de cola superior con \(\alpha = 0.01\), el valor crítico de \(z\) es \(2.33\). El límite crítico para \(\hat{p}\) es: \[\hat{p}_{crítico} = 0.30 + 2.33 \sqrt{\frac{0.30(1 - 0.30)}{200}} = 0.30 + 2.33 \times 0.0324 = 0.3755\]
Potencia bajo \(H_1 (p = 0.35)\): La distribución de \(\hat{p}\) bajo \(H_1\) es aproximadamente normal con media \(0.35\) y desviación estándar \(\sqrt{\frac{0.35(1 - 0.35)}{200}} = \sqrt{\frac{0.2275}{200}} \approx 0.0337\).
Solución en R:
# Especificaciones
p0 <- 0.30
p1 <- 0.35
alfa <- 0.01
n <- 200
se0 <- sqrt((p0 * (1 - p0)) / n)
se1 <- sqrt((p1 * (1 - p1)) / n)
# Límite crítico de la proporción muestral bajo H0
p_critico <- p0 + qnorm(1 - alfa) * se0
cat("Proporción crítica:", p_critico, "\n")
## Proporción crítica: 0.3753823
# Potencia
potencia <- pnorm(p_critico, mean = p1, sd = se1, lower.tail = FALSE)
cat("Potencia:", potencia, "\n")
## Potencia: 0.2258499
# Visualización de la potencia
library(ggplot2)
library(dplyr) # necesario para usar %>%
hipotesis_labels <- c(H0 = paste("H0: p =", p0), H1 = paste("H1: p =", p1))
data.frame(x = seq(0.20, 0.45, 0.01)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = p0, sd = se0), aes(color = "H0"), linewidth = 1) +
stat_function(fun = dnorm, args = list(mean = p1, sd = se1), aes(color = "H1"), linewidth = 1) +
geom_vline(xintercept = p_critico, linetype = "dashed", color = "red") +
annotate("text", x = p_critico + 0.015, y = dnorm(p_critico, p1, se1) + 0.5,
label = "Rechazar H0", color = "red") +
annotate("text", x = mean(c(p_critico, 0.45)), y = dnorm(p1, p1, se1) / 2,
label = paste("Potencia =", round(potencia, 3)), color = "blue") +
labs(title = "Potencia de la Prueba de Proporción (Cola Superior)",
x = "Proporción Muestral", y = "Densidad") +
scale_color_manual(name = "Hipótesis",
values = c(H0 = "black", H1 = "blue"),
labels = hipotesis_labels) +
theme_minimal() +
theme(legend.position = "top")
Región: El gráfico muestra las distribuciones de la proporción muestral bajo \(H_0\) y \(H_1\). La línea vertical roja indica la región de rechazo bajo \(H_0\). El área bajo la curva de \(H_1\) a la derecha de esta línea es la potencia de la prueba.
Problema: Se realiza una prueba de hipótesis con \(H_0: p = 0.75\) contra \(H_1: p < 0.75\), con \(\alpha = 0.05\) y \(n = 150\). Calcula la potencia de la prueba si la verdadera proporción poblacional es \(p_1 = 0.70\).
Solución en Markdown:
Especificaciones: \(H_0: p = 0.75\), \(H_1: p < 0.75\), \(\alpha = 0.05\), \(n = 150\), \(p_1 = 0.70\).
Región de rechazo bajo \(H_0\): Para una prueba de cola inferior con \(\alpha = 0.05\), el valor crítico de \(z\) es \(-1.645\). El límite crítico para \(\hat{p}\) es: \[\hat{p}_{crítico} = 0.75 - 1.645 \sqrt{\frac{0.75(1 - 0.75)}{150}} = 0.75 - 1.645 \times 0.0354 = 0.6917\]
Potencia bajo \(H_1 (p = 0.70)\): La distribución de \(\hat{p}\) bajo \(H_1\) es
Solución en R:
# Especificaciones
p0 <- 0.75
p1 <- 0.70
alfa <- 0.05
n <- 150
se0 <- sqrt((p0 * (1 - p0)) / n)
se1 <- sqrt((p1 * (1 - p1)) / n)
# Límite crítico de la proporción muestral bajo H0 (cola inferior)
p_critico <- p0 - qnorm(1 - alfa) * se0
cat("Proporción crítica:", p_critico, "\n")
## Proporción crítica: 0.6918456
# Potencia (probabilidad de rechazar H0 cuando p = p1)
potencia <- pnorm(p_critico, mean = p1, sd = se1, lower.tail = TRUE)
cat("Potencia:", potencia, "\n")
## Potencia: 0.4137401
# Visualización de la potencia
library(ggplot2)
library(dplyr) # Para usar %>%
hipotesis_labels <- c(H0 = paste("H0: p =", p0), H1 = paste("H1: p =", p1))
data.frame(x = seq(0.60, 0.85, 0.01)) %>%
ggplot(aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = p0, sd = se0), aes(color = "H0"), linewidth = 1) +
stat_function(fun = dnorm, args = list(mean = p1, sd = se1), aes(color = "H1"), linewidth = 1) +
geom_vline(xintercept = p_critico, linetype = "dashed", color = "red") +
annotate("text", x = p_critico - 0.01, y = dnorm(p_critico, p1, se1) + 1,
label = "Rechazar H0", color = "red", hjust = 1) +
annotate("text", x = (p_critico + 0.60) / 2, y = dnorm(p1, p1, se1) / 2,
label = paste("Potencia =", round(potencia, 3)), color = "blue") +
labs(title = "Potencia de la Prueba de Proporción (Cola Inferior)",
x = "Proporción Muestral", y = "Densidad") +
scale_color_manual(name = "Hipótesis",
values = c(H0 = "black", H1 = "blue"),
labels = hipotesis_labels) +
theme_minimal() +
theme(legend.position = "top")
Las pruebas de bondad de ajuste se utilizan para determinar si una muestra de datos categóricos se ajusta a una distribución teórica o a una distribución esperada. La prueba de ji-cuadrada es una de las pruebas de bondad de ajuste más comunes.
Problema: Se lanza un dado 120 veces y se registran las siguientes frecuencias para cada cara:
Cara | Frecuencia Observada (\(O_i\)) |
---|---|
1 | 18 |
2 | 22 |
3 | 20 |
4 | 15 |
5 | 25 |
6 | 20 |
¿Se ajustan estas frecuencias a una distribución uniforme (es decir, cada cara tiene la misma probabilidad de ocurrir) a un nivel de significancia de \(\alpha = 0.05\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Frecuencias observadas (\(O_i\)): 18, 22, 20, 15, 25, 20
Frecuencias esperadas (\(E_i\)): Bajo una distribución uniforme con \(n = 120\) y \(k = 6\) caras, \(E_i = 120 / 6 = 20\) para cada cara.
Estadístico de prueba ji-cuadrado: \[ \chi^2 = \sum_{i=1}^{6} \frac{(O_i - E_i)^2}{E_i} = \frac{(18-20)^2}{20} + \frac{(22-20)^2}{20} + \frac{(20-20)^2}{20} + \frac{(15-20)^2}{20} + \frac{(25-20)^2}{20} + \frac{(20-20)^2}{20} \] \[ \chi^2 = \frac{(-2)^2}{20} + \frac{(2)^2}{20} + \frac{(0)^2}{20} + \frac{(-5)^2}{20} + \frac{(5)^2}{20} + \frac{(0)^2}{20} = \frac{4}{20} + \frac{4}{20} + 0 + \frac{25}{20} + \frac{25}{20} + 0 = 0.2 + 0.2 + 0 + 1.25 + 1.25 + 0 = 2.9 \]
Grados de libertad: \(gl = k - 1 = 6 - 1 = 5\)
Valor p: \(p = P(\chi^2_5 \ge 2.9)\). Usando software, \(P(\chi^2_5 \ge 2.9) \approx 0.715\).
Decisión: Como \(p = 0.715 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que las frecuencias observadas no se ajustan a una distribución uniforme.
Solución en R:
# Datos
observadas <- c(18, 22, 20, 15, 25, 20)
esperadas <- rep(20, 6)
alfa <- 0.05
gl <- length(observadas) - 1
# Prueba de ji-cuadrado
prueba_chi2 <- chisq.test(observadas, p = rep(1/length(observadas), length(observadas)))
cat("Estadístico ji-cuadrado:", prueba_chi2$statistic, "\n")
## Estadístico ji-cuadrado: 2.9
cat("Valor p:", prueba_chi2$p.value, "\n")
## Valor p: 0.7153995
# Decisión
if (prueba_chi2$p.value <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear la curva de densidad
x_vals <- seq(0, 20, 0.1)
densidad <- dchisq(x_vals, df = gl)
curva <- data.frame(x = x_vals, y = densidad)
# Valores críticos
chi2_critico <- qchisq(1 - alfa, df = gl)
chi2_obs <- as.numeric(prueba_chi2$statistic)
# Gráfico
ggplot(curva, aes(x = x, y = y)) +
geom_area(fill = "lightblue", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_critico), fill = "red", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_obs), fill = "yellow", alpha = 0.5) +
geom_vline(xintercept = chi2_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = chi2_obs, color = "blue", linewidth = 1) +
annotate("text", x = chi2_critico + 1, y = 0.02, label = "chi^2[1-alpha]", color = "red", parse = TRUE) +
annotate("text", x = chi2_obs + 1, y = 0.05, label = "chi^2[obs]", color = "blue", parse = TRUE) +
annotate("text", x = 12, y = 0.1, label = paste("p =", round(prueba_chi2$p.value, 3)), color = "black") +
labs(title = "Prueba de bondad de ajuste Ji-Cuadrado (uniforme)",
x = expression(chi^2), y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución ji-cuadrado con 5 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico ji-cuadrado observado. El área amarilla en la cola derecha representa el valor p.
Problema: Un genetista espera que la proporción de cuatro fenotipos en una población de plantas sea 9:3:3:1. Observa los siguientes conteos en una muestra de 160 plantas:
Fenotipo | Frecuencia Observada (\(O_i\)) | Proporción Esperada |
---|---|---|
A | 95 | 9/16 |
B | 30 | 3/16 |
C | 28 | 3/16 |
D | 7 | 1/16 |
¿Se ajustan las frecuencias observadas a las proporciones esperadas a un nivel de significancia de \(\alpha = 0.01\)?
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.01\)
Frecuencias observadas (\(O_i\)): 95, 30, 28, 7
Frecuencias esperadas (\(E_i\)):
Estadístico de prueba ji-cuadrado: \[ \chi^2 = \sum_{i=1}^{4} \frac{(O_i - E_i)^2}{E_i} = \frac{(95-90)^2}{90} + \frac{(30-30)^2}{30} + \frac{(28-30)^2}{30} + \frac{(7-10)^2}{10} \] \[ \chi^2 = \frac{(5)^2}{90} + \frac{(0)^2}{30} + \frac{(-2)^2}{30} + \frac{(-3)^2}{10} = \frac{25}{90} + 0 + \frac{4}{30} + \frac{9}{10} \approx 0.278 + 0 + 0.133 + 0.9 = 1.311 \]
Grados de libertad: \(gl = k - 1 = 4 - 1 = 3\)
Valor p: \(p = P(\chi^2_3 \ge 1.311)\). Usando software, \(P(\chi^2_3 \ge 1.311) \approx 0.726\).
Decisión: Como \(p = 0.726 > \alpha = 0.01\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.01 para decir que las frecuencias observadas no se ajustan a las proporciones esperadas 9:3:3:1.
Solución en R:
# Datos
observadas <- c(95, 30, 28, 7)
proporciones_esperadas <- c(9/16, 3/16, 3/16, 1/16)
esperadas <- sum(observadas) * proporciones_esperadas
alfa <- 0.01
gl <- length(observadas) - 1
# Prueba de ji-cuadrado
prueba_chi2 <- chisq.test(observadas, p = proporciones_esperadas)
cat("Estadístico ji-cuadrado:", prueba_chi2$statistic, "\n")
## Estadístico ji-cuadrado: 1.311111
cat("Valor p:", prueba_chi2$p.value, "\n")
## Valor p: 0.7264963
# Decisión
if (prueba_chi2$p.value <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Crear curva de densidad
x_vals <- seq(0, 20, 0.1)
densidad <- dchisq(x_vals, df = gl)
curva <- data.frame(x = x_vals, y = densidad)
# Valores críticos
chi2_critico <- qchisq(1 - alfa, df = gl)
chi2_obs <- as.numeric(prueba_chi2$statistic)
# Gráfico
ggplot(curva, aes(x = x, y = y)) +
geom_area(fill = "lightblue", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_critico), fill = "red", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_obs), fill = "yellow", alpha = 0.5) +
geom_vline(xintercept = chi2_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = chi2_obs, color = "blue", linewidth = 1) +
annotate("text", x = chi2_critico + 1, y = 0.02, label = "chi^2[1-alpha]", color = "red", parse = TRUE) +
annotate("text", x = chi2_obs + 1, y = 0.05, label = "chi^2[obs]", color = "blue", parse = TRUE) +
annotate("text", x = 14, y = 0.1, label = paste("p =", round(prueba_chi2$p.value, 3)), color = "black") +
labs(title = "Prueba de bondad de ajuste Ji-Cuadrado (proporciones esperadas)",
x = expression(chi^2), y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución ji-cuadrado con 3 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico ji-cuadrado observado. El área amarilla en la cola derecha representa el valor p.
Problema: Se lanza una moneda 5 veces repetidamente, y se registra el número de caras obtenidas en cada secuencia de 5 lanzamientos. Se realizan 100 secuencias, y los resultados son:
Número de Caras | Frecuencia Observada (\(O_i\)) |
---|---|
0 | 3 |
1 | 15 |
2 | 30 |
3 | 35 |
4 | 12 |
5 | 5 |
Se quiere probar si estos resultados se ajustan a una distribución binomial con \(n=5\) y \(p=0.5\) (moneda justa) a un nivel de significancia de \(\alpha = 0.05\).
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Frecuencias observadas (\(O_i\)): 3, 15, 30, 35, 12, 5
Frecuencias esperadas (\(E_i\)): Para una binomial con \(n=5\) y \(p=0.5\), la probabilidad de obtener \(k\) caras es \(P(X=k) = \binom{5}{k} (0.5)^k (0.5)^{5-k} = \binom{5}{k} (0.5)^5\). Las frecuencias esperadas para \(N=100\) secuencias son \(E_i = 100 \times P(X=k)\):
Estadístico de prueba ji-cuadrado: \[ \chi^2 = \sum_{i=0}^{5} \frac{(O_i - E_i)^2}{E_i} = \frac{(3-3.125)^2}{3.125} + \frac{(15-15.625)^2}{15.625} + \frac{(30-31.25)^2}{31.25} + \frac{(35-31.25)^2}{31.25} + \frac{(12-15.625)^2}{15.625} + \frac{(5-3.125)^2}{3.125} \] \[ \chi^2 \approx 0.005 + 0.025 + 0.05 + 0.45 + 0.833 + 1.175 = 2.538 \]
Grados de libertad: \(gl = k - 1 = 6 - 1 = 5\)
Valor p: \(p = P(\chi^2_5 \ge 2.538)\). Usando software, \(P(\chi^2_5 \ge 2.538) \approx 0.770\).
Decisión: Como \(p = 0.770 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que las frecuencias observadas no se ajustan a una distribución binomial con \(n=5\) y \(p=0.5\).
Solución en R:
# Datos
observadas <- c(3, 15, 30, 35, 12, 5)
n_lanzamientos <- 5
p_esperado <- 0.5
n_secuencias <- sum(observadas)
esperadas <- dbinom(0:n_lanzamientos, size = n_lanzamientos, prob = p_esperado) * n_secuencias
alfa <- 0.05
gl <- length(observadas) - 1
# Prueba de ji-cuadrado (con frecuencias esperadas explícitas)
prueba_chi2 <- chisq.test(x = observadas, p = dbinom(0:n_lanzamientos, size = n_lanzamientos, prob = p_esperado), rescale.p = TRUE)
## Warning in chisq.test(x = observadas, p = dbinom(0:n_lanzamientos, size =
## n_lanzamientos, : Chi-squared approximation may be incorrect
cat("Estadístico ji-cuadrado:", prueba_chi2$statistic, "\n")
## Estadístico ji-cuadrado: 2.496
cat("Valor p:", prueba_chi2$p.value, "\n")
## Valor p: 0.7770974
# Decisión
if (prueba_chi2$p.value <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización de la región crítica y el valor p
library(ggplot2)
library(dplyr)
# Preparar curva chi-cuadrado
x_vals <- seq(0, 20, 0.1)
curva <- data.frame(x = x_vals, y = dchisq(x_vals, df = gl))
# Valores críticos
chi2_critico <- qchisq(1 - alfa, df = gl)
chi2_obs <- as.numeric(prueba_chi2$statistic)
# Gráfico
ggplot(curva, aes(x = x, y = y)) +
geom_area(fill = "lightblue", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_critico), fill = "red", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_obs), fill = "yellow", alpha = 0.5) +
geom_vline(xintercept = chi2_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = chi2_obs, color = "blue", linewidth = 1) +
annotate("text", x = chi2_critico + 1, y = 0.02, label = "chi^2[1-alpha]", color = "red", parse = TRUE) +
annotate("text", x = chi2_obs + 1, y = 0.05, label = "chi^2[obs]", color = "blue", parse = TRUE) +
annotate("text", x = 14, y = 0.1, label = paste("p =", round(prueba_chi2$p.value, 3)), color = "black") +
labs(title = "Prueba de bondad de ajuste Ji-Cuadrado (binomial)",
x = expression(chi^2), y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución ji-cuadrado con 5 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico ji-cuadrado observado. El área amarilla en la cola derecha representa el valor p.
Problema: Se registran el número de accidentes automovilísticos en un cruce concurrido durante 50 días. Los resultados son:
Número de Accidentes | Frecuencia Observada |
---|---|
0 | 32 |
1 | 12 |
2 | 6 |
3 | 0 |
\(\ge 4\) | 0 |
Se quiere probar si estos datos se ajustan a una distribución de Poisson. Primero, se estima el parámetro \(\lambda\) (tasa promedio) a partir de los datos de la muestra.
Solución en Markdown:
Hipótesis:
Nivel de significancia: \(\alpha = 0.05\)
Frecuencias observadas (\(O_i\)): 32 (para 0), 12 (para 1), 6 (para 2), 0 (para 3), 0 (para \(\ge 4\))
Estimación de \(\lambda\): La media muestral es una estimación de \(\lambda\): \[ \bar{x} = \frac{(0 \times 32) + (1 \times 12) + (2 \times 6) + (3 \times 0) + (\ge 4 \times 0)}{50} = \frac{0 + 12 + 12 + 0 + 0}{50} = \frac{24}{50} = 0.48 \] Así, \(\hat{\lambda} = 0.48\).
Frecuencias esperadas (\(E_i\)): Para una Poisson con \(\lambda = 0.48\) y \(N = 50\) días:
Estadístico de prueba ji-cuadrado: \[ \chi^2 = \frac{(32-30.94)^2}{30.94} + \frac{(12-14.85)^2}{14.85} + \frac{(6-3.56)^2}{3.56} + \frac{(0-0.92)^2}{0.92} \] \[ \chi^2 \approx 0.037 + 0.537 + 1.735 + 0.920 = 3.229 \]
Grados de libertad: \(gl = k - 1 - p = 4 - 1 - 1 = 2\) (4 categorías después de combinar, -1 por la prueba, -1 por el parámetro \(\lambda\) estimado)
Valor p: \(p = P(\chi^2_2 \ge 3.229)\). Usando software, \(P(\chi^2_2 \ge 3.229) \approx 0.199\).
Decisión: Como \(p = 0.199 > \alpha = 0.05\), no rechazamos \(H_0\).
Conclusión: No hay evidencia estadística suficiente al nivel de significancia de 0.05 para decir que el número de accidentes no se ajusta a una distribución de Poisson.
Solución en R:
# Datos observados (con las categorías 3 y 4 o más combinadas)
observadas <- c(32, 12, 6, 0) # Frecuencias de 0, 1, 2 y ≥3
n_dias <- sum(observadas)
# Estimación de lambda (media muestral)
media_muestra <- (0*32 + 1*12 + 2*6 + 3*0) / n_dias # Se asume 3 para el grupo combinado
lambda_estimado <- media_muestra
# Frecuencias esperadas (última categoría combinada ≥3)
esperadas <- c(dpois(0:2, lambda = lambda_estimado) * n_dias,
(1 - ppois(2, lambda = lambda_estimado)) * n_dias)
# Verificación de frecuencias esperadas (para evitar valores < 5)
print(round(esperadas, 2)) # Se pueden agrupar más si alguna < 5
## [1] 30.94 14.85 3.56 0.65
# Parámetros
alfa <- 0.05
gl <- length(observadas) - 1 - 1 # grados de libertad: k - 1 - parámetros estimados
# Prueba de bondad de ajuste
prueba_chi2 <- chisq.test(x = observadas,
p = c(dpois(0:2, lambda = lambda_estimado),
1 - ppois(2, lambda = lambda_estimado)),
rescale.p = TRUE)
## Warning in chisq.test(x = observadas, p = c(dpois(0:2, lambda =
## lambda_estimado), : Chi-squared approximation may be incorrect
# Resultados
cat("Estadístico ji-cuadrado:", prueba_chi2$statistic, "\n")
## Estadístico ji-cuadrado: 2.894115
cat("Valor p:", prueba_chi2$p.value, "\n")
## Valor p: 0.4082403
# Decisión
if (prueba_chi2$p.value <= alfa) {
cat("Rechazamos la hipótesis nula.\n")
} else {
cat("No rechazamos la hipótesis nula.\n")
}
## No rechazamos la hipótesis nula.
# Visualización
library(ggplot2)
library(dplyr)
x_vals <- seq(0, 10, 0.1)
curva <- data.frame(x = x_vals, y = dchisq(x_vals, df = gl))
chi2_critico <- qchisq(1 - alfa, df = gl)
chi2_obs <- as.numeric(prueba_chi2$statistic)
ggplot(curva, aes(x = x, y = y)) +
geom_area(fill = "lightblue", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_critico), fill = "red", alpha = 0.5) +
geom_area(data = filter(curva, x >= chi2_obs), fill = "yellow", alpha = 0.5) +
geom_vline(xintercept = chi2_critico, linetype = "dashed", color = "red") +
geom_vline(xintercept = chi2_obs, color = "blue", linewidth = 1) +
annotate("text", x = chi2_critico + 0.5, y = 0.05, label = "chi^2[1-alpha]", color = "red", parse = TRUE) +
annotate("text", x = chi2_obs + 0.5, y = 0.1, label = "chi^2[obs]", color = "blue", parse = TRUE) +
annotate("text", x = 7, y = 0.2, label = paste("p =", round(prueba_chi2$p.value, 3)), color = "black") +
labs(title = "Prueba de bondad de ajuste Ji-Cuadrado (Poisson)",
x = expression(chi^2), y = "Densidad") +
theme_minimal()
Región: El gráfico muestra la distribución ji-cuadrado con 2 grados de libertad. El área roja en la cola derecha representa la región crítica. La línea azul indica el estadístico ji-cuadrado observado. El área amarilla en la cola derecha representa el valor p.
La prueba de independencia se utiliza para determinar si existe una relación significativa entre dos o más variables categóricas. En otras palabras, evalúa si la distribución de una variable difiere en función de las categorías de otra variable. La hipótesis nula (\(H_0\)) de esta prueba establece que las variables son independientes (no existe asociación), mientras que la hipótesis alternativa (\(H_1\)) sugiere que las variables son dependientes (existe una asociación).
Para llevar a cabo esta prueba, se construye una tabla de contingencia que resume la frecuencia de las observaciones para cada combinación de las categorías de las variables. Luego, se calcula un estadístico de prueba, comúnmente el estadístico Chi-cuadrado (\(\chi^2\)), que mide la discrepancia entre las frecuencias observadas en la tabla de contingencia y las frecuencias esperadas bajo la hipótesis de independencia.
El estadístico Chi-cuadrado se calcula mediante la siguiente fórmula:
\[ \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
Donde: - \(O_{ij}\) es la frecuencia observada en la celda \((i, j)\) de la tabla de contingencia. - \(E_{ij}\) es la frecuencia esperada en la celda \((i, j)\) bajo la hipótesis de independencia, calculada como:
\[ E_{ij} = \frac{(\text{Total de la fila } i) \times (\text{Total de la columna } j)}{\text{Total general}} \]
El estadístico \(\chi^2\) sigue una distribución Chi-cuadrado con \((r-1)(c-1)\) grados de libertad, donde \(r\) es el número de filas y \(c\) es el número de columnas en la tabla de contingencia.
El p-valor es la probabilidad de obtener un estadístico de prueba tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera. En el contexto de la prueba de independencia, un p-valor pequeño (generalmente menor que un nivel de significancia \(\alpha\) predefinido, como 0.05) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que existe una asociación significativa entre las variables categóricas.
Interpretación del p-valor:
Se realizó una encuesta para determinar si existe una asociación entre el género de una persona y su preferencia por dos marcas de un producto (A y B). Los resultados se muestran en la siguiente tabla de contingencia:
Género | Marca A | Marca B | Total |
---|---|---|---|
Hombre | 45 | 30 | 75 |
Mujer | 25 | 50 | 75 |
Total | 70 | 80 | 150 |
Realizar una prueba de independencia con un nivel de significancia \(\alpha = 0.05\).
Solución en R:
# Tabla de contingencia
tabla <- matrix(c(45, 25, 30, 50), nrow = 2, byrow = TRUE)
colnames(tabla) <- c("Marca A", "Marca B")
rownames(tabla) <- c("Hombre", "Mujer")
# Realizar la prueba de Chi-cuadrado
prueba <- chisq.test(tabla)
print(prueba)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla
## X-squared = 9.6696, df = 1, p-value = 0.001873
# Nivel de significancia
alfa <- 0.05
# Valor crítico de Chi-cuadrado
valor_critico <- qchisq(1 - alfa, df = prueba$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico, "\n")
## Valor crítico de Chi-cuadrado: 3.841459
# Visualización de la región de rechazo (aproximada)
x <- seq(0, valor_critico + 10, length.out = 200)
y <- dchisq(x, df = prueba$parameter)
plot(x, y, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo")
abline(v = valor_critico, col = "red", lty = 2)
polygon(c(valor_critico, x[x >= valor_critico], max(x)),
c(0, y[x >= valor_critico], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
El resultado de la prueba de Chi-cuadrado (impreso por R) proporcionará el estadístico \(\chi^2\), los grados de libertad y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que existe una asociación significativa entre el género y la preferencia de la marca. La gráfica muestra la distribución Chi-cuadrado con los grados de libertad correspondientes, la región de rechazo (en rojo) definida por el valor crítico, y la ubicación del estadístico de prueba observado (en azul).
Se encuestó a un grupo de personas sobre su nivel educativo y su opinión sobre una nueva política gubernamental (A favor, En contra, Neutral). Los resultados son:
Nivel Educativo | A Favor | En Contra | Neutral | Total |
---|---|---|---|---|
Primaria | 20 | 15 | 10 | 45 |
Secundaria | 30 | 25 | 20 | 75 |
Universidad | 40 | 35 | 30 | 105 |
Total | 90 | 75 | 60 | 225 |
Realizar una prueba de independencia con \(\alpha = 0.01\).
Solución en R:
# Tabla de contingencia
tabla2 <- matrix(c(20, 30, 40, 15, 25, 35, 10, 20, 30), nrow = 3, byrow = TRUE)
colnames(tabla2) <- c("A Favor", "En Contra", "Neutral")
rownames(tabla2) <- c("Primaria", "Secundaria", "Universidad")
# Realizar la prueba de Chi-cuadrado
prueba2 <- chisq.test(tabla2)
print(prueba2)
##
## Pearson's Chi-squared test
##
## data: tabla2
## X-squared = 0.79365, df = 4, p-value = 0.9393
# Nivel de significancia
alfa2 <- 0.01
# Valor crítico de Chi-cuadrado
valor_critico2 <- qchisq(1 - alfa2, df = prueba2$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico2, "\n")
## Valor crítico de Chi-cuadrado: 13.2767
# Visualización de la región de rechazo
x2 <- seq(0, valor_critico2 + 15, length.out = 200)
y2 <- dchisq(x2, df = prueba2$parameter)
plot(x2, y2, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo")
abline(v = valor_critico2, col = "red", lty = 2)
polygon(c(valor_critico2, x2[x2 >= valor_critico2], max(x2)),
c(0, y2[x2 >= valor_critico2], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba2$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba2$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Similar al Ejemplo 1, el resultado de chisq.test(tabla2)
mostrará el estadístico \(\chi^2\), los
grados de libertad y el p-valor. Compara el p-valor con \(\alpha = 0.01\) para tomar una decisión
sobre la hipótesis nula. La gráfica ilustra la región de rechazo para
este nivel de significancia.
Se observó el color de ojos y el color de cabello de un grupo de individuos para investigar si existe alguna relación entre estas dos características. Los datos se resumen a continuación:
Color de Ojos | Rubio | Castaño | Moreno | Total |
---|---|---|---|---|
Azul | 25 | 30 | 15 | 70 |
Verde | 10 | 20 | 10 | 40 |
Marrón | 15 | 40 | 35 | 90 |
Total | 50 | 90 | 60 | 200 |
Realizar una prueba de independencia con \(\alpha = 0.05\).
Solución en R:
# Tabla de contingencia
tabla3 <- matrix(c(25, 10, 15, 30, 20, 40, 15, 10, 35), nrow = 3, byrow = TRUE)
colnames(tabla3) <- c("Rubio", "Castaño", "Moreno")
rownames(tabla3) <- c("Azul", "Verde", "Marrón")
# Realizar la prueba de Chi-cuadrado
prueba3 <- chisq.test(tabla3)
print(prueba3)
##
## Pearson's Chi-squared test
##
## data: tabla3
## X-squared = 10.432, df = 4, p-value = 0.03375
# Nivel de significancia
alfa3 <- 0.05
# Valor crítico de Chi-cuadrado
valor_critico3 <- qchisq(1 - alfa3, df = prueba3$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico3, "\n")
## Valor crítico de Chi-cuadrado: 9.487729
# Visualización de la región de rechazo
x3 <- seq(0, valor_critico3 + 20, length.out = 200)
y3 <- dchisq(x3, df = prueba3$parameter)
plot(x3, y3, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo")
abline(v = valor_critico3, col = "red", lty = 2)
polygon(c(valor_critico3, x3[x3 >= valor_critico3], max(x3)),
c(0, y3[x3 >= valor_critico3], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba3$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba3$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Analiza el p-valor obtenido de chisq.test(tabla3)
en
comparación con \(\alpha = 0.05\) para
determinar si existe una asociación significativa entre el color de ojos
y el color de cabello. La gráfica muestra la distribución Chi-cuadrado y
la región de rechazo correspondiente.
Un estudio investigó si el método de aprendizaje utilizado por estudiantes (Online, Presencial, Blended) está asociado con su rendimiento académico (Aprobado, Reprobado). Los datos recolectados son:
Método de Aprendizaje | Aprobado | Reprobado | Total |
---|---|---|---|
Online | 60 | 20 | 80 |
Presencial | 75 | 15 | 90 |
Blended | 70 | 10 | 80 |
Total | 205 | 45 | 250 |
Realizar una prueba de independencia con \(\alpha = 0.10\).
Solución en R:
# Tabla de contingencia
tabla4 <- matrix(c(60, 75, 70, 20, 15, 10), nrow = 3, byrow = TRUE)
colnames(tabla4) <- c("Aprobado", "Reprobado")
rownames(tabla4) <- c("Online", "Presencial", "Blended")
# Realizar la prueba de Chi-cuadrado
prueba4 <- chisq.test(tabla4)
print(prueba4)
##
## Pearson's Chi-squared test
##
## data: tabla4
## X-squared = 24.676, df = 2, p-value = 4.382e-06
# Nivel de significancia
alfa4 <- 0.10
# Valor crítico de Chi-cuadrado
valor_critico4 <- qchisq(1 - alfa4, df = prueba4$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico4, "\n")
## Valor crítico de Chi-cuadrado: 4.60517
# Visualización de la región de rechazo
x4 <- seq(0, valor_critico4 + 10, length.out = 200)
y4 <- dchisq(x4, df = prueba4$parameter)
plot(x4, y4, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo")
abline(v = valor_critico4, col = "red", lty = 2)
polygon(c(valor_critico4, x4[x4 >= valor_critico4], max(x4)),
c(0, y4[x4 >= valor_critico4], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba4$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba4$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Compara el p-valor resultante de chisq.test(tabla4)
con
\(\alpha = 0.10\) para determinar si
hay evidencia de una asociación entre el método de aprendizaje y el
rendimiento académico. La gráfica ilustra la región de rechazo para este
nivel de significancia.
La prueba de homogeneidad se utiliza para determinar si las proporciones de una variable categórica son las mismas en dos o más poblaciones o grupos diferentes. En esencia, evalúa si la distribución de una variable categórica es homogénea a través de los distintos grupos. La hipótesis nula (\(H_0\)) de esta prueba establece que las proporciones de la variable categórica son las mismas en todos los grupos, mientras que la hipótesis alternativa (\(H_1\)) sugiere que al menos una de las proporciones difiere.
Al igual que la prueba de independencia, la prueba de homogeneidad se basa en la construcción de una tabla de contingencia que resume las frecuencias observadas de la variable categórica para cada grupo. El estadístico de prueba utilizado también es el Chi-cuadrado (\(\chi^2\)), que mide la discrepancia entre las frecuencias observadas y las frecuencias esperadas bajo la hipótesis de homogeneidad.
La fórmula para el estadístico Chi-cuadrado es la misma que en la prueba de independencia:
\[ \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
\[ E_{ij} = \frac{(\text{Total del grupo } j) \times (\text{Total de la categoría } i)}{\text{Total general}} \]
El estadístico \(\chi^2\) sigue una distribución Chi-cuadrado con \((r-1)(c-1)\) grados de libertad, donde \(r\) es el número de categorías de la variable y \(c\) es el número de grupos.
El p-valor representa la probabilidad de observar una diferencia en las proporciones tan grande (o más grande) como la observada en las muestras, asumiendo que las proporciones reales en las poblaciones o grupos son las mismas (hipótesis nula verdadera). Un p-valor pequeño (típicamente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que las proporciones de la variable categórica no son homogéneas entre los grupos.
Interpretación del p-valor:
Se realizó una encuesta en tres regiones diferentes para comparar la preferencia por tres marcas de un producto (X, Y, Z). Los resultados fueron:
Región | Marca X | Marca Y | Marca Z | Total |
---|---|---|---|---|
Norte | 60 | 45 | 35 | 140 |
Centro | 75 | 50 | 40 | 165 |
Sur | 55 | 60 | 30 | 145 |
Total | 190 | 155 | 105 | 450 |
Realizar una prueba de homogeneidad para determinar si la distribución de preferencias de marca es la misma en las tres regiones (\(\alpha = 0.05\)).
Solución en R:
# Tabla de contingencia
tabla_region <- matrix(c(60, 75, 55, 45, 50, 60, 35, 40, 30), nrow = 3, byrow = TRUE)
colnames(tabla_region) <- c("Marca X", "Marca Y", "Marca Z")
rownames(tabla_region) <- c("Norte", "Centro", "Sur")
# Realizar la prueba de Chi-cuadrado de homogeneidad
prueba_region <- chisq.test(tabla_region)
print(prueba_region)
##
## Pearson's Chi-squared test
##
## data: tabla_region
## X-squared = 4.7749, df = 4, p-value = 0.3112
# Nivel de significancia
alfa_region <- 0.05
# Valor crítico de Chi-cuadrado
valor_critico_region <- qchisq(1 - alfa_region, df = prueba_region$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico_region, "\n")
## Valor crítico de Chi-cuadrado: 9.487729
# Visualización de la región de rechazo
x_region <- seq(0, valor_critico_region + 15, length.out = 200)
y_region <- dchisq(x_region, df = prueba_region$parameter)
plot(x_region, y_region, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo (Homogeneidad)")
abline(v = valor_critico_region, col = "red", lty = 2)
polygon(c(valor_critico_region, x_region[x_region >= valor_critico_region], max(x_region)),
c(0, y_region[x_region >= valor_critico_region], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_region$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_region$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
El resultado de chisq.test(tabla_region)
mostrará el
estadístico \(\chi^2\), los grados de
libertad y el p-valor. Compara el p-valor con \(\alpha = 0.05\) para determinar si existe
evidencia suficiente para rechazar la hipótesis nula de que la
distribución de preferencias de marca es la misma en las tres regiones.
La gráfica ilustra la región de rechazo basada en el valor crítico de la
distribución Chi-cuadrado.
Una empresa desea saber si el nivel de satisfacción del cliente (Alto, Medio, Bajo) es el mismo para tres tipos de productos diferentes (A, B, C). Se recolectaron los siguientes datos:
Tipo de Producto | Alto | Medio | Bajo | Total |
---|---|---|---|---|
A | 80 | 50 | 20 | 150 |
B | 65 | 70 | 15 | 150 |
C | 70 | 60 | 20 | 150 |
Total | 215 | 180 | 55 | 450 |
Realizar una prueba de homogeneidad con un nivel de significancia \(\alpha = 0.01\).
Solución en R:
# Tabla de contingencia
tabla_satisfaccion <- matrix(c(80, 65, 70, 50, 70, 60, 20, 15, 20), nrow = 3, byrow = TRUE)
colnames(tabla_satisfaccion) <- c("Alto", "Medio", "Bajo")
rownames(tabla_satisfaccion) <- c("A", "B", "C")
# Realizar la prueba de Chi-cuadrado de homogeneidad
prueba_satisfaccion <- chisq.test(tabla_satisfaccion)
print(prueba_satisfaccion)
##
## Pearson's Chi-squared test
##
## data: tabla_satisfaccion
## X-squared = 5.8703, df = 4, p-value = 0.209
# Nivel de significancia
alfa_satisfaccion <- 0.01
# Valor crítico de Chi-cuadrado
valor_critico_satisfaccion <- qchisq(1 - alfa_satisfaccion, df = prueba_satisfaccion$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico_satisfaccion, "\n")
## Valor crítico de Chi-cuadrado: 13.2767
# Visualización de la región de rechazo
x_satisfaccion <- seq(0, valor_critico_satisfaccion + 20, length.out = 200)
y_satisfaccion <- dchisq(x_satisfaccion, df = prueba_satisfaccion$parameter)
plot(x_satisfaccion, y_satisfaccion, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo (Homogeneidad)")
abline(v = valor_critico_satisfaccion, col = "red", lty = 2)
polygon(c(valor_critico_satisfaccion, x_satisfaccion[x_satisfaccion >= valor_critico_satisfaccion], max(x_satisfaccion)),
c(0, y_satisfaccion[x_satisfaccion >= valor_critico_satisfaccion], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_satisfaccion$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_satisfaccion$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Examina el p-valor resultante de
chisq.test(tabla_satisfaccion)
en relación con \(\alpha = 0.01\) para determinar si hay
diferencias significativas en la distribución de la satisfacción del
cliente entre los tres tipos de productos. La gráfica muestra la región
de rechazo para este nivel de significancia.
Se compararon tres métodos de enseñanza (Tradicional, Interactivo, Online) en tres grupos de estudiantes para ver si la tasa de aprobación es homogénea entre los métodos. Los resultados fueron:
Método de Enseñanza | Grupo 1 (Aprobados) | Grupo 1 (No Aprobados) | Grupo 1 Total | Grupo 2 (Aprobados) | Grupo 2 (No Aprobados) | Grupo 2 Total | Grupo 3 (Aprobados) | Grupo 3 (No Aprobados) | Grupo 3 Total |
---|---|---|---|---|---|---|---|---|---|
Tradicional | 35 | 15 | 50 | 40 | 10 | 50 | 30 | 20 | 50 |
Interactivo | 40 | 10 | 50 | 45 | 5 | 50 | 38 | 12 | 50 |
Online | 30 | 20 | 50 | 35 | 15 | 50 | 42 | 8 | 50 |
Para realizar la prueba de homogeneidad, combinamos los datos en una tabla donde las columnas son Aprobado y No Aprobado, y las filas son los métodos de enseñanza.
Método de Enseñanza | Aprobado | No Aprobado | Total |
---|---|---|---|
Tradicional | 105 | 45 | 150 |
Interactivo | 123 | 27 | 150 |
Online | 107 | 43 | 150 |
Total | 335 | 115 | 450 |
Realizar una prueba de homogeneidad con \(\alpha = 0.05\).
Solución en R:
# Tabla de contingencia
tabla_ensenanza <- matrix(c(105, 123, 107, 45, 27, 43), nrow = 3, byrow = TRUE)
colnames(tabla_ensenanza) <- c("Aprobado", "No Aprobado")
rownames(tabla_ensenanza) <- c("Tradicional", "Interactivo", "Online")
# Realizar la prueba de Chi-cuadrado de homogeneidad
prueba_ensenanza <- chisq.test(tabla_ensenanza)
print(prueba_ensenanza)
##
## Pearson's Chi-squared test
##
## data: tabla_ensenanza
## X-squared = 28.737, df = 2, p-value = 5.753e-07
# Nivel de significancia
alfa_ensenanza <- 0.05
# Valor crítico de Chi-cuadrado
valor_critico_ensenanza <- qchisq(1 - alfa_ensenanza, df = prueba_ensenanza$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico_ensenanza, "\n")
## Valor crítico de Chi-cuadrado: 5.991465
# Visualización de la región de rechazo
x_ensenanza <- seq(0, valor_critico_ensenanza + 10, length.out = 200)
y_ensenanza <- dchisq(x_ensenanza, df = prueba_ensenanza$parameter)
plot(x_ensenanza, y_ensenanza, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo (Homogeneidad)")
abline(v = valor_critico_ensenanza, col = "red", lty = 2)
polygon(c(valor_critico_ensenanza, x_ensenanza[x_ensenanza >= valor_critico_ensenanza], max(x_ensenanza)),
c(0, y_ensenanza[x_ensenanza >= valor_critico_ensenanza], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_ensenanza$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_ensenanza$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Evalúa el p-valor obtenido de
chisq.test(tabla_ensenanza)
en comparación con \(\alpha = 0.05\) para determinar si la
proporción de aprobados y no aprobados varía significativamente entre
los diferentes métodos de enseñanza. La gráfica ilustra la región de
rechazo.
Se encuestó a personas de tres grupos de edad diferentes sobre su opinión política (Conservador, Liberal, Otro). Los resultados fueron:
Grupo de Edad | Conservador | Liberal | Otro | Total |
---|---|---|---|---|
18-30 | 40 | 60 | 20 | 120 |
31-50 | 55 | 50 | 15 | 120 |
51+ | 70 | 35 | 15 | 120 |
Total | 165 | 145 | 50 | 360 |
Realizar una prueba de homogeneidad con \(\alpha = 0.10\).
Solución en R:
# Tabla de contingencia
tabla_edad_opinion <- matrix(c(40, 55, 70, 60, 50, 35, 20, 15, 15), nrow = 3, byrow = TRUE)
colnames(tabla_edad_opinion) <- c("Conservador", "Liberal", "Otro")
rownames(tabla_edad_opinion) <- c("18-30", "31-50", "51+")
# Realizar la prueba de Chi-cuadrado de homogeneidad
prueba_edad_opinion <- chisq.test(tabla_edad_opinion)
print(prueba_edad_opinion)
##
## Pearson's Chi-squared test
##
## data: tabla_edad_opinion
## X-squared = 15.734, df = 4, p-value = 0.003398
# Nivel de significancia
alfa_edad_opinion <- 0.10
# Valor crítico de Chi-cuadrado
valor_critico_edad_opinion <- qchisq(1 - alfa_edad_opinion,df = prueba_edad_opinion$parameter)
cat("Valor crítico de Chi-cuadrado:", valor_critico_edad_opinion, "\n")
## Valor crítico de Chi-cuadrado: 7.77944
# Visualización de la región de rechazo
x_edad_opinion <- seq(0, valor_critico_edad_opinion + 15, length.out = 200)
y_edad_opinion <- dchisq(x_edad_opinion, df = prueba_edad_opinion$parameter)
plot(x_edad_opinion, y_edad_opinion, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado y Región de Rechazo (Homogeneidad)")
abline(v = valor_critico_edad_opinion, col = "red", lty = 2)
polygon(c(valor_critico_edad_opinion, x_edad_opinion[x_edad_opinion >= valor_critico_edad_opinion], max(x_edad_opinion)),
c(0, y_edad_opinion[x_edad_opinion >= valor_critico_edad_opinion], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_edad_opinion$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_edad_opinion$statistic, 3)),
col = "blue", lty = 2)
La prueba de Kolmogorov-Smirnov (K-S) es una prueba no paramétrica que se utiliza para comparar la función de distribución acumulativa (FDA) de una muestra con una FDA teórica especificada, o para comparar las FDAs de dos muestras independientes. A diferencia de las pruebas paramétricas que asumen una distribución específica para los datos (como la normal), la prueba K-S no hace tales suposiciones.
Existen dos variantes principales de la prueba K-S:
Prueba de una muestra: Compara la FDA de una muestra con una FDA teórica continua (por ejemplo, normal, exponencial, uniforme). La hipótesis nula (\(H_0\)) es que la FDA de la muestra es la misma que la FDA teórica especificada. La hipótesis alternativa (\(H_1\)) es que las FDAs son diferentes.
Prueba de dos muestras: Compara las FDAs de dos muestras independientes. La hipótesis nula (\(H_0\)) es que las FDAs de las dos poblaciones de las que provienen las muestras son idénticas. La hipótesis alternativa (\(H_1\)) es que las FDAs son diferentes.
El estadístico de prueba K-S (\(D\)) se basa en la mayor diferencia absoluta vertical entre las dos FDAs que se están comparando.
Para la prueba de una muestra, el estadístico \(D\) se define como:
\[ D = \sup_x |F_n(x) - F_0(x)| \]
Donde:
\(F_n(x)\) es la FDA empírica de la muestra.
\(F_0(x)\) es la FDA teórica especificada.
\(\sup_x\) denota el supremo (el menor límite superior) sobre todos los valores de \(x\).
Para la prueba de dos muestras, el estadístico \(D\) se define como:
\[ D = \sup_x |F_{n_1}(x) - F_{n_2}(x)| \]
Donde:
\(F_{n_1}(x)\) es la FDA empírica de la primera muestra (tamaño \(n_1\)).
\(F_{n_2}(x)\) es la FDA empírica de la segunda muestra (tamaño \(n_2\)).
El p-valor asociado con la prueba K-S es la probabilidad de obtener un estadístico de prueba \(D\) tan grande (o más grande) como el observado, asumiendo que la hipótesis nula es verdadera. Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que las distribuciones son diferentes.
Interpretación del p-valor:
Se generó una muestra de 50 observaciones y se desea probar si provienen de una distribución normal con media 5 y desviación estándar 2 (\(\alpha = 0.05\)).
Solución en R:
# Generar datos de ejemplo
set.seed(123)
muestra <- rnorm(50, mean = 5, sd = 2.5) # Intencionalmente diferente para el ejemplo
# Realizar la prueba K-S contra una distribución normal
prueba_ks_norm <- ks.test(muestra, "pnorm", mean = 5, sd = 2)
print(prueba_ks_norm)
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: muestra
## D = 0.085326, p-value = 0.8296
## alternative hypothesis: two-sided
# Nivel de significancia
alfa_norm <- 0.05
# Visualización de las FDAs
orden_muestra <- sort(muestra)
fda_empirica <- ecdf(muestra)(orden_muestra)
fda_teorica <- pnorm(orden_muestra, mean = 5, sd = 2)
plot(orden_muestra, fda_empirica, type = "l", col = "blue",
xlab = "Valor", ylab = "FDA",
main = "FDA Empírica vs. Teórica (Normal)")
lines(orden_muestra, fda_teorica, col = "red")
legend("topleft", legend = c("FDA Empírica", "FDA Teórica (N(5, 2))"),
col = c("blue", "red"), lty = 1)
# Resaltar la diferencia máxima
d_statistic <- prueba_ks_norm$statistic
max_diff_index <- which.max(abs(fda_empirica - fda_teorica))
points(orden_muestra[max_diff_index], fda_empirica[max_diff_index], pch = 19, col = "blue")
points(orden_muestra[max_diff_index], fda_teorica[max_diff_index], pch = 19, col = "red")
segments(orden_muestra[max_diff_index], fda_empirica[max_diff_index],
orden_muestra[max_diff_index], fda_teorica[max_diff_index],
lty = 2, col = "purple")
legend("bottomright", legend = paste("Estadístico D =", round(d_statistic, 3)),
col = "purple", lty = 2, pch = NA)
Interpretación:
El resultado de ks.test()
proporcionará el estadístico D
y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula y concluiremos que la muestra no proviene de una distribución
normal con media 5 y desviación estándar 2. La gráfica muestra la FDA
empírica de la muestra (azul) y la FDA teórica normal (roja), con la
diferencia máxima resaltada.
Se tiene un conjunto de datos que representan los tiempos entre fallas de un sistema. Se desea probar si estos tiempos siguen una distribución exponencial con una tasa de \(\lambda = 0.5\) (\(\alpha = 0.10\)).
Solución en R:
# Generar datos de ejemplo
set.seed(456)
tiempos <- rexp(40, rate = 0.7) # Intencionalmente diferente
# Realizar la prueba K-S contra una distribución exponencial
prueba_ks_exp <- ks.test(tiempos, "pexp", rate = 0.5)
print(prueba_ks_exp)
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: tiempos
## D = 0.18701, p-value = 0.1068
## alternative hypothesis: two-sided
# Nivel de significancia
alfa_exp <- 0.10
# Visualización de las FDAs
orden_tiempos <- sort(tiempos)
fda_empirica_exp <- ecdf(tiempos)(orden_tiempos)
fda_teorica_exp <- pexp(orden_tiempos, rate = 0.5)
plot(orden_tiempos, fda_empirica_exp, type = "l", col = "blue",
xlab = "Tiempo", ylab = "FDA",
main = "FDA Empírica vs. Teórica (Exponencial)")
lines(orden_tiempos, fda_teorica_exp, col = "red")
legend("topleft", legend = c("FDA Empírica", "FDA Teórica (Exp(0.5))"),
col = c("blue", "red"), lty = 1)
# Resaltar la diferencia máxima
d_statistic_exp <- prueba_ks_exp$statistic
max_diff_index_exp <- which.max(abs(fda_empirica_exp - fda_teorica_exp))
points(orden_tiempos[max_diff_index_exp], fda_empirica_exp[max_diff_index_exp], pch = 19, col = "blue")
points(orden_tiempos[max_diff_index_exp], fda_teorica_exp[max_diff_index_exp], pch = 19, col = "red")
segments(orden_tiempos[max_diff_index_exp], fda_empirica_exp[max_diff_index_exp],
orden_tiempos[max_diff_index_exp], fda_teorica_exp[max_diff_index_exp],
lty = 2, col = "purple")
legend("bottomright", legend = paste("Estadístico D =", round(d_statistic_exp, 3)),
col = "purple", lty = 2, pch = NA)
Interpretación:
Compara el p-valor con \(\alpha = 0.10\). Si es menor, rechazamos la hipótesis de que los tiempos entre fallas siguen una distribución exponencial con tasa 0.5. La gráfica muestra las FDAs y la diferencia máxima.
Se midió el rendimiento de dos grupos de estudiantes utilizando un nuevo método de enseñanza en el Grupo A y un método tradicional en el Grupo B. Se desea saber si las distribuciones de rendimiento son diferentes (\(\alpha = 0.05\)).
Solución en R:
# Generar datos de ejemplo para dos grupos
set.seed(789)
grupo_a <- rnorm(35, mean = 75, sd = 10)
grupo_b <- rnorm(40, mean = 70, sd = 12)
# Realizar la prueba K-S de dos muestras
prueba_ks_dos_muestras <- ks.test(grupo_a, grupo_b)
print(prueba_ks_dos_muestras)
##
## Exact two-sample Kolmogorov-Smirnov test
##
## data: grupo_a and grupo_b
## D = 0.20714, p-value = 0.3463
## alternative hypothesis: two-sided
# Nivel de significancia
alfa_dos_muestras <- 0.05
# Visualización de las FDAs de los dos grupos
orden_a <- sort(grupo_a)
fda_a <- ecdf(grupo_a)(orden_a)
orden_b <- sort(grupo_b)
fda_b <- ecdf(grupo_b)(orden_b)
plot(orden_a, fda_a, type = "l", col = "blue",
xlab = "Rendimiento", ylab = "FDA",
main = "FDA Empírica (Grupo A vs. Grupo B)")
lines(orden_b, fda_b, col = "green")
legend("topleft", legend = c("FDA Grupo A", "FDA Grupo B"),
col = c("blue", "green"), lty = 1)
# Resaltar la diferencia máxima
d_statistic_dos_muestras <- prueba_ks_dos_muestras$statistic
# Para encontrar la diferencia máxima, necesitamos combinar y ordenar los datos
combinados <- sort(c(grupo_a, grupo_b))
fda_a_combinada <- ecdf(grupo_a)(combinados)
fda_b_combinada <- ecdf(grupo_b)(combinados)
max_diff_dos_muestras_index <- which.max(abs(fda_a_combinada - fda_b_combinada))
points(combinados[max_diff_dos_muestras_index], fda_a_combinada[max_diff_dos_muestras_index], pch = 19, col = "blue")
points(combinados[max_diff_dos_muestras_index], fda_b_combinada[max_diff_dos_muestras_index], pch = 19, col = "green")
segments(combinados[max_diff_dos_muestras_index], fda_a_combinada[max_diff_dos_muestras_index],
combinados[max_diff_dos_muestras_index], fda_b_combinada[max_diff_dos_muestras_index],
lty = 2, col = "purple")
legend("bottomright", legend = paste("Estadístico D =", round(d_statistic_dos_muestras, 3)),
col = "purple", lty = 2, pch = NA)
Interpretación:
Si el p-valor de ks.test(grupo_a, grupo_b)
es menor que
\(\alpha = 0.05\), rechazaremos la
hipótesis nula de que las distribuciones de rendimiento de los dos
grupos son las mismas. La gráfica muestra las FDAs empíricas de ambos
grupos y la diferencia máxima entre ellas.
Se midieron los tiempos de respuesta de dos sistemas informáticos diferentes para una misma tarea. Se desea determinar si las distribuciones de los tiempos de respuesta son significativamente diferentes (\(\alpha = 0.10\)).
Solución en R:
# Generar datos de ejemplo para tiempos de respuesta
set.seed(1011)
sistema_x <- rexp(60, rate = 0.2)
sistema_y <- rgamma(55, shape = 2, rate = 0.3)
# Realizar la prueba K-S de dos muestras
prueba_ks_tiempos <- ks.test(sistema_x, sistema_y)
print(prueba_ks_tiempos)
##
## Exact two-sample Kolmogorov-Smirnov test
##
## data: sistema_x and sistema_y
## D = 0.35303, p-value = 0.001062
## alternative hypothesis: two-sided
# Nivel de significancia
alfa_tiempos <- 0.10
# Visualización de las FDAs de los dos sistemas
orden_x <- sort(sistema_x)
fda_x <- ecdf(sistema_x)(orden_x)
orden_y <- sort(sistema_y)
fda_y <- ecdf(sistema_y)(orden_y)
plot(orden_x, fda_x, type = "l", col = "blue",
xlab = "Tiempo de Respuesta", ylab = "FDA",
main = "FDA Empírica (Sistema X vs. Sistema Y)")
lines(orden_y, fda_y, col = "green")
legend("topleft", legend = c("FDA Sistema X", "FDA Sistema Y"),
col = c("blue", "green"), lty = 1)
# Resaltar la diferencia máxima
d_statistic_tiempos <- prueba_ks_tiempos$statistic
# Encontrar la diferencia máxima
combinados_tiempos <- sort(c(sistema_x, sistema_y))
fda_x_combinada <- ecdf(sistema_x)(combinados_tiempos)
fda_y_combinada <- ecdf(sistema_y)(combinados_tiempos)
max_diff_tiempos_index <- which.max(abs(fda_x_combinada - fda_y_combinada))
points(combinados_tiempos[max_diff_tiempos_index], fda_x_combinada[max_diff_tiempos_index], pch = 19, col = "blue")
points(combinados_tiempos[max_diff_tiempos_index], fda_y_combinada[max_diff_tiempos_index], pch = 19, col = "green")
segments(combinados_tiempos[max_diff_tiempos_index], fda_x_combinada[max_diff_tiempos_index],
combinados_tiempos[max_diff_tiempos_index], fda_y_combinada[max_diff_tiempos_index],
lty = 2, col = "purple")
legend("bottomright", legend = paste("Estadístico D =", round(d_statistic_tiempos, 3)),
col = "purple", lty = 2, pch = NA)
Interpretación:
Compara el p-valor con \(\alpha = 0.10\). Si es menor, se concluye que las distribuciones de los tiempos de respuesta de los dos sistemas son significativamente diferentes. La gráfica muestra las FDAs empíricas y la diferencia máxima.
La prueba U de Mann-Whitney, también conocida como la prueba de la suma de rangos de Wilcoxon para dos muestras independientes, es una prueba no paramétrica que se utiliza para determinar si hay una diferencia significativa entre las medianas de dos grupos independientes. Es una alternativa a la prueba t de Student cuando no se cumplen los supuestos de normalidad o igualdad de varianzas.
La hipótesis nula (\(H_0\)) de la prueba U de Mann-Whitney es que las distribuciones de las dos poblaciones son iguales (o que no hay una diferencia en sus medianas). La hipótesis alternativa (\(H_1\)) puede ser unilateral (la mediana de un grupo es mayor/menor que la del otro) o bilateral (las medianas de los dos grupos son diferentes).
El procedimiento general implica los siguientes pasos:
Combinar y ordenar los datos: Se combinan todas las observaciones de ambos grupos en un solo conjunto de datos y se ordenan de menor a mayor.
Asignar rangos: Se asignan rangos a cada observación en el conjunto ordenado. En caso de empates, se asigna el rango promedio.
Calcular la suma de rangos para cada grupo: Se suman los rangos asignados a las observaciones de cada grupo por separado. Sean \(R_1\) la suma de rangos del grupo 1 (de tamaño \(n_1\)) y \(R_2\) la suma de rangos del grupo 2 (de tamaño \(n_2\)).
Calcular el estadístico U: Se calculan dos estadísticos U:
\[ U_1 = n_1 n_2 + \frac{n_1(n_1 + 1)}{2} - R_1 \]
\[ U_2 = n_1 n_2 + \frac{n_2(n_2 + 1)}{2} - R_2 \]
El estadístico U de la prueba es generalmente el menor de \(U_1\) y \(U_2\).
Bajo la hipótesis nula, la distribución del estadístico U se aproxima a una distribución normal para tamaños de muestra grandes (\(n_1 > 20\) y \(n_2 > 20\)). Para muestras más pequeñas, se utilizan tablas de valores críticos específicos para la prueba U.
El p-valor es la probabilidad de obtener un estadístico U tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera. Para una prueba bilateral, el p-valor es la probabilidad de obtener un valor de U que esté tan lejos de su valor esperado como el valor observado, en cualquier dirección. Para pruebas unilaterales, el p-valor considera solo una dirección. Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que existe una diferencia significativa entre las medianas de los dos grupos.
Interpretación del p-valor:
Se midieron los tiempos de reacción (en milisegundos) de dos grupos de participantes en un experimento. Se desea determinar si hay una diferencia significativa en los tiempos de reacción entre los dos grupos (\(\alpha = 0.05\)).
Datos:
Grupo A: 250, 265, 240, 270, 255 Grupo B: 280, 290, 275, 300, 285, 295
Solución en R:
# Datos de los dos grupos
grupo_a <- c(250, 265, 240, 270, 255)
grupo_b <- c(280, 290, 275, 300, 285, 295)
# Realizar la prueba U de Mann-Whitney
prueba_mw <- wilcox.test(grupo_a, grupo_b)
print(prueba_mw)
##
## Wilcoxon rank sum exact test
##
## data: grupo_a and grupo_b
## W = 0, p-value = 0.004329
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_mw <- 0.05
# Visualización aproximada de la región de rechazo (basada en la normal asintótica)
# Para una prueba bilateral, los valores críticos Z son aproximadamente -1.96 y 1.96
valor_critico_z <- qnorm(1 - alfa_mw / 2)
# Aunque la salida de wilcox.test no da un estadístico Z directamente para muestras pequeñas,
# para fines ilustrativos, podríamos calcular una aproximación si fuera necesario para muestras grandes.
# Aquí, nos enfocaremos en el p-valor directamente.
# No es straightforward dibujar la "región" directamente en la escala de U sin conocer la distribución exacta para muestras pequeñas.
# La visualización más útil aquí es un boxplot de los datos para comparar las distribuciones.
boxplot(grupo_a, grupo_b, names = c("Grupo A", "Grupo B"),
ylab = "Tiempo de Reacción (ms)",
main = "Comparación de Tiempos de Reacción")
Interpretación:
El resultado de wilcox.test()
proporcionará el
estadístico U (o W, que es la suma de rangos de uno de los grupos) y el
p-valor. Si el p-valor es menor que \(\alpha =
0.05\), rechazaremos la hipótesis nula y concluiremos que hay una
diferencia significativa en los tiempos de reacción entre los dos
grupos. El boxplot ayuda a visualizar la diferencia en las
distribuciones.
Se compararon las puntuaciones de una prueba obtenidas por estudiantes que fueron enseñados usando dos métodos diferentes (\(\alpha = 0.10\)).
Datos:
Método 1: 78, 82, 65, 88, 70, 75 Método 2: 60, 72, 58, 68, 65, 70, 62
Solución en R:
# Datos de los dos métodos
metodo1 <- c(78, 82, 65, 88, 70, 75)
metodo2 <- c(60, 72, 58, 68, 65, 70, 62)
# Realizar la prueba U de Mann-Whitney
prueba_mw_ensenanza <- wilcox.test(metodo1, metodo2)
## Warning in wilcox.test.default(metodo1, metodo2): cannot compute exact p-value
## with ties
print(prueba_mw_ensenanza)
##
## Wilcoxon rank sum test with continuity correction
##
## data: metodo1 and metodo2
## W = 37, p-value = 0.02639
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_ensenanza_mw <- 0.10
# Boxplot para visualizar las distribuciones
boxplot(metodo1, metodo2, names = c("Método 1", "Método 2"),
ylab = "Puntuación de la Prueba",
main = "Comparación de Puntuaciones por Método de Enseñanza")
Interpretación:
Si el p-valor de wilcox.test()
es menor que \(\alpha = 0.10\), se rechazará la hipótesis
nula de que las distribuciones de las puntuaciones son las mismas para
los dos métodos de enseñanza. El boxplot proporciona una comparación
visual de las puntuaciones.
Una empresa implementó dos estrategias de marketing diferentes en dos regiones y registró las ventas semanales (en miles de dólares) durante un mes (\(\alpha = 0.05\)).
Datos:
Estrategia A: 15, 18, 12, 20 Estrategia B: 10, 14, 11, 16, 13
Solución en R:
# Datos de las ventas por estrategia
estrategia_a <- c(15, 18, 12, 20)
estrategia_b <- c(10, 14, 11, 16, 13)
# Realizar la prueba U de Mann-Whitney (prueba unilateral: ¿A > B?)
prueba_mw_ventas <- wilcox.test(estrategia_a, estrategia_b, alternative = "greater")
print(prueba_mw_ventas)
##
## Wilcoxon rank sum exact test
##
## data: estrategia_a and estrategia_b
## W = 16, p-value = 0.09524
## alternative hypothesis: true location shift is greater than 0
# Nivel de significancia
alfa_ventas_mw <- 0.05
# Boxplot para visualizar las ventas
boxplot(estrategia_a, estrategia_b, names = c("Estrategia A", "Estrategia B"),
ylab = "Ventas (miles de $)",
main = "Comparación de Ventas por Estrategia")
Interpretación:
Aquí, se realiza una prueba unilateral para ver si las ventas de la estrategia A son significativamente mayores que las de la estrategia B. Si el p-valor es menor que \(\alpha = 0.05\), se rechaza la hipótesis nula a favor de la alternativa. El boxplot compara visualmente las ventas de las dos estrategias.
Se midieron los niveles de un contaminante (en ppm) en muestras de suelo tomadas de dos sitios diferentes (\(\alpha = 0.01\)).
Datos:
Sitio 1: 2.3, 2.5, 2.1, 2.8, 2.2 Sitio 2: 2.6, 2.7, 2.9, 3.1, 3.0, 2.8
Solución en R:
# Datos de los niveles de contaminación por sitio
sitio1 <- c(2.3, 2.5, 2.1, 2.8, 2.2)
sitio2 <- c(2.6, 2.7, 2.9, 3.1, 3.0, 2.8)
# Realizar la prueba U de Mann-Whitney
prueba_mw_contaminacion <- wilcox.test(sitio1, sitio2)
## Warning in wilcox.test.default(sitio1, sitio2): cannot compute exact p-value
## with ties
print(prueba_mw_contaminacion)
##
## Wilcoxon rank sum test with continuity correction
##
## data: sitio1 and sitio2
## W = 2.5, p-value = 0.0281
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_contaminacion_mw <- 0.01
# Boxplot para visualizar los niveles de contaminación
boxplot(sitio1, sitio2, names = c("Sitio 1", "Sitio 2"),
ylab = "Nivel de Contaminación (ppm)",
main = "Comparación de Niveles de Contaminación por Sitio")
Interpretación:
Si el p-valor de wilcox.test()
es menor que \(\alpha = 0.01\), se concluye que hay una
diferencia significativa en los niveles de contaminación entre los dos
sitios. El boxplot ayuda a comparar visualmente los niveles.
La prueba Ji-cuadrado para dos proporciones binomiales se utiliza para determinar si existe una diferencia significativa entre las proporciones de éxito observadas en dos muestras independientes. Esta prueba es una extensión de la prueba de independencia del Chi-cuadrado aplicada a una tabla de contingencia de \(2 \times 2\), donde las filas representan los dos grupos o poblaciones y las columnas representan los dos resultados posibles (éxito o fracaso) de una variable binomial.
La hipótesis nula (\(H_0\)) establece que las proporciones de éxito en las dos poblaciones son iguales (\(p_1 = p_2\)). La hipótesis alternativa (\(H_1\)) puede ser unilateral (\(p_1 > p_2\) o \(p_1 < p_2\)) o bilateral (\(p_1 \neq p_2\)).
Los datos se organizan en una tabla de contingencia de \(2 \times 2\):
Resultado | Grupo 1 (n1) | Grupo 2 (n2) | Total |
---|---|---|---|
Éxito | \(x_1\) | \(x_2\) | \(x_1 + x_2\) |
Fracaso | \(n_1 - x_1\) | \(n_2 - x_2\) | \(n_1 + n_2 - (x_1 + x_2)\) |
Total | \(n_1\) | \(n_2\) | \(N = n_1 + n_2\) |
Donde:
\(n_1\) y \(n_2\) son los tamaños de las muestras de los grupos 1 y 2, respectivamente.
\(x_1\) y \(x_2\) son el número de éxitos observados en los grupos 1 y 2, respectivamente.
El estadístico de prueba Chi-cuadrado (\(\chi^2\)) se calcula mediante la misma fórmula general utilizada en las pruebas de independencia y homogeneidad:
\[ \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
\[ E(\text{Éxito, Grupo 1}) = \frac{(x_1 + x_2) \times n_1}{N} \]
\[ E(\text{Fracaso, Grupo 1}) = \frac{(n_1 + n_2 - (x_1 + x_2)) \times n_1}{N} \]
\[ E(\text{Éxito, Grupo 2}) = \frac{(x_1 + x_2) \times n_2}{N} \]
\[ E(\text{Fracaso, Grupo 2}) = \frac{(n_1 + n_2 - (x_1 + x_2)) \times n_2}{N} \]
El estadístico \(\chi^2\) sigue una distribución Chi-cuadrado con \((2-1)(2-1) = 1\) grado de libertad.
El p-valor es la probabilidad de observar una diferencia en las proporciones muestrales tan grande (o más grande) como la observada, asumiendo que las proporciones poblacionales son iguales. Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que existe una diferencia significativa entre las dos proporciones.
Interpretación del p-valor:
Se probaron dos diseños de página web (A y B) para ver si había una diferencia en sus tasas de conversión (éxito = completar una compra). Durante la prueba, el Diseño A recibió 500 visitantes y tuvo 40 conversiones. El Diseño B recibió 600 visitantes y tuvo 36 conversiones. Realizar una prueba con \(\alpha = 0.05\).
Solución en R:
# Datos
exitos <- c(40, 36)
n <- c(500, 600)
# Crear la tabla de contingencia
tabla <- matrix(c(exitos, n - exitos), nrow = 2, byrow = TRUE)
colnames(tabla) <- c("Diseño A", "Diseño B")
rownames(tabla) <- c("Éxito", "Fracaso")
print(tabla)
## Diseño A Diseño B
## Éxito 40 36
## Fracaso 460 564
# Realizar la prueba Ji-cuadrado
prueba_prop <- chisq.test(tabla, correct = FALSE) # No aplicar corrección de Yates para este ejemplo
print(prueba_prop)
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 1.6961, df = 1, p-value = 0.1928
# Nivel de significancia
alfa_prop <- 0.05
# Valor crítico de Ji-cuadrado con 1 grado de libertad
valor_critico_prop <- qchisq(1 - alfa_prop, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_prop, "\n")
## Valor crítico de Chi-cuadrado: 3.841459
# Visualización de la región de rechazo
x_prop <- seq(0, valor_critico_prop + 5, length.out = 200)
y_prop <- dchisq(x_prop, df = 1)
plot(x_prop, y_prop, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo")
abline(v = valor_critico_prop, col = "red", lty = 2)
polygon(c(valor_critico_prop, x_prop[x_prop >= valor_critico_prop], max(x_prop)),
c(0, y_prop[x_prop >= valor_critico_prop], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_prop$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_prop$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
El resultado de chisq.test()
proporcionará el
estadístico \(\chi^2\), los grados de
libertad (que deben ser 1) y el p-valor. Si el p-valor es menor que
\(\alpha = 0.05\), rechazaremos la
hipótesis nula y concluiremos que hay una diferencia significativa en
las tasas de conversión de los dos diseños web. La gráfica muestra la
distribución Chi-cuadrado con 1 grado de libertad y la región de
rechazo.
En un ensayo clínico, la Vacuna A se administró a 200 personas y 15 desarrollaron la enfermedad. La Vacuna B se administró a 250 personas y 12 desarrollaron la enfermedad. Probar si hay una diferencia en la efectividad de las dos vacunas (\(\alpha = 0.01\)).
Solución en R:
# Datos
enfermos <- c(15, 12)
total_vacunados <- c(200, 250)
# Crear la tabla de contingencia
tabla_vacunas <- matrix(c(enfermos, total_vacunados - enfermos), nrow = 2, byrow = TRUE)
colnames(tabla_vacunas) <- c("Vacuna A", "Vacuna B")
rownames(tabla_vacunas) <- c("Enfermo", "No Enfermo")
print(tabla_vacunas)
## Vacuna A Vacuna B
## Enfermo 15 12
## No Enfermo 185 238
# Realizar la prueba Ji-cuadrado
prueba_vacunas <- chisq.test(tabla_vacunas, correct = FALSE)
print(prueba_vacunas)
##
## Pearson's Chi-squared test
##
## data: tabla_vacunas
## X-squared = 1.4362, df = 1, p-value = 0.2308
# Nivel de significancia
alfa_vacunas <- 0.01
# Valor crítico de Ji-cuadrado con 1 grado de libertad
valor_critico_vacunas <- qchisq(1 - alfa_vacunas, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_vacunas, "\n")
## Valor crítico de Chi-cuadrado: 6.634897
# Visualización de la región de rechazo
x_vacunas <- seq(0, valor_critico_vacunas + 5, length.out = 200)
y_vacunas <- dchisq(x_vacunas, df = 1)
plot(x_vacunas, y_vacunas, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo")
abline(v = valor_critico_vacunas, col = "red", lty = 2)
polygon(c(valor_critico_vacunas, x_vacunas[x_vacunas >= valor_critico_vacunas], max(x_vacunas)),
c(0, y_vacunas[x_vacunas >= valor_critico_vacunas], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_vacunas$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_vacunas$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Compara el p-valor con \(\alpha = 0.01\). Si es menor, se concluye que hay una diferencia significativa en la efectividad de las dos vacunas. La gráfica ilustra la región de rechazo para este nivel de significancia.
Se compararon dos tratamientos para una enfermedad. El Tratamiento 1 tuvo éxito en 70 de 100 pacientes, mientras que el Tratamiento 2 tuvo éxito en 80 de 120 pacientes. Probar si la tasa de éxito del Tratamiento 2 es significativamente mayor que la del Tratamiento 1 (\(\alpha = 0.05\), prueba unilateral).
Solución en R:
# Datos
exitos_tratamiento <- c(70, 80)
n_tratamiento <- c(100, 120)
# Crear la tabla de contingencia
tabla_tratamiento <- matrix(c(exitos_tratamiento, n_tratamiento - exitos_tratamiento), nrow = 2, byrow = TRUE)
colnames(tabla_tratamiento) <- c("Tratamiento 1", "Tratamiento 2")
rownames(tabla_tratamiento) <- c("Éxito", "Fracaso")
print(tabla_tratamiento)
## Tratamiento 1 Tratamiento 2
## Éxito 70 80
## Fracaso 30 40
# Realizar la prueba Ji-cuadrado
prueba_tratamiento <- chisq.test(tabla_tratamiento, correct = FALSE)
print(prueba_tratamiento)
##
## Pearson's Chi-squared test
##
## data: tabla_tratamiento
## X-squared = 0.27937, df = 1, p-value = 0.5971
# Nivel de significancia (para prueba unilateral, el p-valor se interpreta directamente)
alfa_tratamiento <- 0.05
# Para una prueba unilateral, no ajustamos alfa para el valor crítico.
# El valor crítico para una prueba unilateral con alfa = 0.05 es el mismo que para una bilateral.
valor_critico_tratamiento <- qchisq(1 - alfa_tratamiento, df = 1)
cat("Valor crítico de Chi-cuadrado (unilateral):", valor_critico_tratamiento, "\n")
## Valor crítico de Chi-cuadrado (unilateral): 3.841459
# Visualización de la región de rechazo
x_tratamiento <- seq(0, valor_critico_tratamiento + 5, length.out = 200)
y_tratamiento <- dchisq(x_tratamiento, df = 1)
plot(x_tratamiento, y_tratamiento, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo (Unilateral)")
abline(v = valor_critico_tratamiento, col = "red", lty = 2)
polygon(c(valor_critico_tratamiento, x_tratamiento[x_tratamiento >= valor_critico_tratamiento], max(x_tratamiento)),
c(0, y_tratamiento[x_tratamiento >= valor_critico_tratamiento], 0),
col = "salmon", border = NA)
abline(v = prueba_tratamiento$statistic, col = "blue", lty = 2)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
legend("topleft", legend = paste("Estadístico observado =", round(prueba_tratamiento$statistic, 3)),
col = "blue", lty = 2)
# Para la interpretación unilateral, se considera el p-valor directamente.
# Si la hipótesis alternativa fuera p2 > p1, y el estadístico observado cae en la región de rechazo
# (p-valor pequeño), entonces tendríamos evidencia para apoyar esa afirmación.
Interpretación:
En una prueba unilateral, el p-valor directamente del
chisq.test
se interpreta en relación con la dirección de la
hipótesis alternativa. Si el p-valor es pequeño (menor que \(\alpha = 0.05\)) y la diferencia observada
en las proporciones muestrales apoya la hipótesis alternativa
(Tratamiento 2 tiene una tasa de éxito mayor), entonces rechazamos la
hipótesis nula.
Se inspeccionaron lotes de productos de dos líneas de producción. En la Línea 1, se encontraron 15 defectuosos en una muestra de 200. En la Línea 2, se encontraron 8 defectuosos en una muestra de 150. Probar si hay una diferencia en la proporción de defectuosos entre las dos líneas (\(\alpha = 0.10\)).
Solución en R:
# Datos
defectuosos <- c(15, 8)
n_produccion <- c(200, 150)
# Crear la tabla de contingencia
tabla_produccion <- matrix(c(defectuosos, n_produccion - defectuosos), nrow = 2, byrow = TRUE)
colnames(tabla_produccion) <- c("Línea 1", "Línea 2")
rownames(tabla_produccion) <- c("Defectuoso", "No Defectuoso")
print(tabla_produccion)
## Línea 1 Línea 2
## Defectuoso 15 8
## No Defectuoso 185 142
# Realizar la prueba Ji-cuadrado
prueba_produccion <- chisq.test(tabla_produccion, correct = FALSE)
print(prueba_produccion)
##
## Pearson's Chi-squared test
##
## data: tabla_produccion
## X-squared = 0.65539, df = 1, p-value = 0.4182
# Nivel de significancia
alfa_produccion <- 0.10
# Valor crítico de Ji-cuadrado con 1 grado de libertad
valor_critico_produccion <- qchisq(1 - alfa_produccion, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_produccion, "\n")
## Valor crítico de Chi-cuadrado: 2.705543
# Visualización de la región de rechazo
x_produccion <- seq(0, valor_critico_produccion + 5, length.out = 200)
y_produccion <- dchisq(x_produccion, df = 1)
plot(x_produccion, y_produccion, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo")
abline(v = valor_critico_produccion, col = "red", lty = 2)
polygon(c(valor_critico_produccion, x_produccion[x_produccion >= valor_critico_produccion], max(x_produccion)),
c(0, y_produccion
[x_produccion >= valor_critico_produccion], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_produccion$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_produccion$statistic, 3)),
col = "blue", lty = 2)
Interpretación:
Compara el p-valor con \(\alpha = 0.10\). Si es menor, se concluye que hay una diferencia significativa en la proporción de defectuosos entre las dos líneas de producción. La gráfica muestra la distribución Chi-cuadrado con 1 grado de libertad y la región de rechazo.
La prueba de rangos con signos de Wilcoxon para datos pareados es una prueba no paramétrica utilizada para determinar si hay una diferencia significativa entre dos conjuntos de datos relacionados o pareados (por ejemplo, mediciones antes y después de un tratamiento en los mismos sujetos). A diferencia de la prueba t pareada, no asume que las diferencias entre los pares sigan una distribución normal.
El procedimiento general implica los siguientes pasos:
wilcox.test
devuelve por defecto el estadístico \(V\), que es la suma de los rangos con el
mismo signo que la diferencia especificada en la hipótesis alternativa
(o la suma de los rangos positivos si la alternativa es bilateral).La hipótesis nula (\(H_0\)) es que no hay una diferencia significativa entre las dos poblaciones pareadas (la mediana de las diferencias es cero). La hipótesis alternativa (\(H_1\)) puede ser unilateral (la mediana de las diferencias es mayor/menor que cero) o bilateral (la mediana de las diferencias es diferente de cero).
Para tamaños de muestra grandes (\(n > 20\)), la distribución del estadístico \(W\) se aproxima a una distribución normal con media \(\mu_W = \frac{n(n+1)}{4}\) y desviación estándar \(\sigma_W = \sqrt{\frac{n(n+1)(2n+1)}{24}}\), donde \(n\) es el número de pares con diferencias no cero. Se puede calcular un estadístico Z:
\[ Z = \frac{W - \mu_W}{\sigma_W} \]
Interpretación del p-valor:
Se midió el tiempo de reacción (en milisegundos) de 10 participantes antes y después de completar un programa de entrenamiento. Se desea determinar si el programa tuvo un efecto significativo en el tiempo de reacción (\(\alpha = 0.05\)).
Datos:
Participante | Antes | Después | Diferencia (Después - Antes) |
---|---|---|---|
1 | 250 | 245 | -5 |
2 | 265 | 260 | -5 |
3 | 240 | 235 | -5 |
4 | 270 | 268 | -2 |
5 | 255 | 252 | -3 |
6 | 280 | 275 | -5 |
7 | 290 | 288 | -2 |
8 | 275 | 272 | -3 |
9 | 300 | 295 | -5 |
10 | 285 | 282 | -3 |
Solución en R:
# Datos antes y después
antes <- c(250, 265, 240, 270, 255, 280, 290, 275, 300, 285)
despues <- c(245, 260, 235, 268, 252, 275, 288, 272, 295, 282)
# Realizar la prueba de rangos con signos de Wilcoxon
prueba_wilcoxon <- wilcox.test(despues, antes, paired = TRUE)
## Warning in wilcox.test.default(despues, antes, paired = TRUE): cannot compute
## exact p-value with ties
print(prueba_wilcoxon)
##
## Wilcoxon signed rank test with continuity correction
##
## data: despues and antes
## V = 0, p-value = 0.005144
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon <- 0.05
# Visualización aproximada de la región de rechazo (basada en la normal asintótica)
# Para una prueba bilateral, los valores críticos Z son aproximadamente -1.96 y 1.96
valor_critico_z_wilcoxon <- qnorm(1 - alfa_wilcoxon / 2)
# Aunque la salida de wilcox.test no da un estadístico Z directamente para muestras pequeñas,
# para fines ilustrativos, podríamos calcular una aproximación si fuera necesario para muestras grandes.
# Aquí, nos enfocaremos en el p-valor directamente.
# No es straightforward dibujar la "región" directamente en la escala de W sin conocer la distribución exacta para muestras pequeñas.
# La visualización más útil aquí es un boxplot de las diferencias.
diferencias <- despues - antes
boxplot(diferencias, ylab = "Diferencia (Después - Antes)",
main = "Efecto del Entrenamiento en el Tiempo de Reacción")
abline(h = 0, lty = 2, col = "red") # Línea de referencia en cero
Interpretación:
El resultado de wilcox.test()
proporcionará el
estadístico V (suma de rangos con signo) y el p-valor. Si el p-valor es
menor que \(\alpha = 0.05\),
rechazaremos la hipótesis nula y concluiremos que el programa de
entrenamiento tuvo un efecto significativo en el tiempo de reacción. El
boxplot de las diferencias ayuda a visualizar la dirección y magnitud
del cambio.
Se pidió a 8 jueces que calificaran dos versiones de un producto (A y B) en una escala del 1 al 10. Se emparejó a los jueces según su experiencia. Se desea saber si hay una diferencia significativa en las calificaciones (\(\alpha = 0.10\)).
Datos:
Pareja de Jueces | Calificación A | Calificación B | Diferencia (B - A) |
---|---|---|---|
1 | 7 | 8 | 1 |
2 | 6 | 7 | 1 |
3 | 8 | 8 | 0 |
4 | 5 | 6 | 1 |
5 | 9 | 7 | -2 |
6 | 7 | 9 | 2 |
7 | 6 | 8 | 2 |
8 | 8 | 9 | 1 |
Solución en R:
# Calificaciones de los dos productos
calificacion_a <- c(7, 6, 8, 5, 9, 7, 6, 8)
calificacion_b <- c(8, 7, 8, 6, 7, 9, 8, 9)
# Realizar la prueba de rangos con signos de Wilcoxon
prueba_wilcoxon_calif <- wilcox.test(calificacion_b, calificacion_a, paired = TRUE)
## Warning in wilcox.test.default(calificacion_b, calificacion_a, paired = TRUE):
## cannot compute exact p-value with ties
## Warning in wilcox.test.default(calificacion_b, calificacion_a, paired = TRUE):
## cannot compute exact p-value with zeroes
print(prueba_wilcoxon_calif)
##
## Wilcoxon signed rank test with continuity correction
##
## data: calificacion_b and calificacion_a
## V = 22, p-value = 0.1934
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon_calif <- 0.10
# Diferencias
diferencias_calif <- calificacion_b - calificacion_a
boxplot(diferencias_calif, ylab = "Diferencia (B - A)",
main = "Comparación de Calificaciones de Producto")
abline(h = 0, lty = 2, col = "red")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.10\), se rechazará la hipótesis nula de que no hay una diferencia significativa en las calificaciones de los dos productos. El boxplot de las diferencias muestra la tendencia de las calificaciones.
Se midió el peso de 12 individuos antes y después de seguir una dieta durante un mes. Se desea probar si la dieta tuvo un efecto en la reducción del peso (\(\alpha = 0.05\), prueba unilateral).
Datos:
Individuo | Antes (kg) | Después (kg) | Diferencia (Después - Antes) |
---|---|---|---|
1 | 85 | 82 | -3 |
2 | 92 | 88 | -4 |
3 | 78 | 79 | 1 |
4 | 101 | 95 | -6 |
5 | 88 | 85 | -3 |
6 | 76 | 75 | -1 |
7 | 95 | 90 | -5 |
8 | 83 | 80 | -3 |
9 | 90 | 87 | -3 |
10 | 79 | 77 | -2 |
11 | 86 | 84 | -2 |
12 | 98 | 96 | -2 |
Solución en R:
# Pesos antes y después de la dieta
peso_antes <- c(85, 92, 78, 101, 88, 76, 95, 83, 90, 79, 86, 98)
peso_despues <- c(82, 88, 79, 95, 85, 75, 90, 80, 87, 77, 84, 96)
# Realizar la prueba de rangos con signos de Wilcoxon (prueba unilateral: ¿después < antes?)
prueba_wilcoxon_dieta <- wilcox.test(peso_despues, peso_antes, paired = TRUE, alternative = "less")
## Warning in wilcox.test.default(peso_despues, peso_antes, paired = TRUE, :
## cannot compute exact p-value with ties
print(prueba_wilcoxon_dieta)
##
## Wilcoxon signed rank test with continuity correction
##
## data: peso_despues and peso_antes
## V = 1.5, p-value = 0.001753
## alternative hypothesis: true location shift is less than 0
# Nivel de significancia
alfa_wilcoxon_dieta <- 0.05
# Diferencias
diferencias_dieta <- peso_despues - peso_antes
boxplot(diferencias_dieta, ylab = "Diferencia (Después - Antes)",
main = "Efecto de la Dieta en el Peso")
abline(h = 0, lty = 2, col = "red")
Interpretación:
En una prueba unilateral con alternative = "less"
,
estamos probando si el peso después de la dieta es significativamente
menor que antes (diferencia negativa). Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula a favor de la alternativa. El boxplot de las diferencias debe
mostrar una tendencia hacia valores negativos si la dieta es efectiva en
la reducción de peso.
Se sembraron dos variedades de cultivo (X e Y) en 7 parcelas de tierra idénticas, asignando aleatoriamente cada variedad a una mitad de cada parcela. Se midió el rendimiento (en kg/parcela). Se desea saber si hay una diferencia significativa en el rendimiento de las dos variedades (\(\alpha = 0.01\)).
Datos:
Parcela | Rendimiento X | Rendimiento Y | Diferencia (Y - X) |
---|---|---|---|
1 | 45 | 48 | 3 |
2 | 52 | 50 | -2 |
3 | 49 | 53 | 4 |
4 | 55 | 58 | 3 |
5 | 48 | 47 | -1 |
6 | 51 | 55 | 4 |
7 | 50 | 52 | 2 |
Solución en R:
# Rendimientos de las dos variedades
rendimiento_x <- c(45, 52, 49, 55, 48, 51, 50)
rendimiento_y <- c(48, 50, 53, 58, 47, 55, 52)
# Realizar la prueba de rangos con signos de Wilcoxon
prueba_wilcoxon_cultivo <- wilcox.test(rendimiento_y, rendimiento_x, paired = TRUE)
## Warning in wilcox.test.default(rendimiento_y, rendimiento_x, paired = TRUE):
## cannot compute exact p-value with ties
print(prueba_wilcoxon_cultivo)
##
## Wilcoxon signed rank test with continuity correction
##
## data: rendimiento_y and rendimiento_x
## V = 24.5, p-value = 0.08924
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon_cultivo <- 0.01
# Diferencias
diferencias_cultivo <- rendimiento_y - rendimiento_x
boxplot(diferencias_cultivo, ylab = "Diferencia (Y - X)",
main = "Comparación del Rendimiento de Variedades de Cultivo")
abline(h = 0, lty = 2, col = "red")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), se rechazará la hipótesis nula de que no hay una diferencia significativa en el rendimiento de las dos variedades de cultivo. El boxplot de las diferencias indicará la dirección de la diferencia en el rendimiento.
La prueba de la mediana es una prueba no paramétrica que se utiliza para determinar si dos o más grupos independientes tienen la misma mediana. Es una alternativa a la ANOVA de un factor cuando no se cumplen los supuestos de normalidad o igualdad de varianzas. En el caso de dos grupos, es una alternativa a la prueba t de Student para muestras independientes cuando los supuestos paramétricos no se cumplen.
La idea básica de la prueba de la mediana es determinar si una proporción significativamente diferente de observaciones en cada grupo cae por encima o por debajo de la mediana combinada de todos los grupos.
Para realizar la prueba de la mediana para dos grupos:
Calcular la mediana combinada: Se combinan todas las observaciones de ambos grupos y se calcula la mediana de este conjunto de datos combinado.
Crear una tabla de contingencia: Se construye una tabla de \(2 \times 2\) que cruza el grupo (Grupo 1, Grupo 2) con si la observación está por encima o por debajo (o igual a, tratado consistentemente) de la mediana combinada.
Grupo 1 | Grupo 2 | Total | |
---|---|---|---|
\(\geq\) Mediana | \(n_{1+}\) | \(n_{2+}\) | \(N_+\) |
\(<\) Mediana | \(n_{1-}\) | \(n_{2-}\) | \(N_-\) |
Total | \(n_1\) | \(n_2\) | \(N\) |
Donde:
Realizar una prueba Chi-cuadrado de independencia: Se aplica una prueba Chi-cuadrado de independencia a esta tabla de contingencia de \(2 \times 2\) para determinar si existe una asociación significativa entre el grupo y si la observación está por encima o por debajo de la mediana combinada.
El estadístico de prueba Chi-cuadrado (\(\chi^2\)) se calcula como:
\[ \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
Con \((2-1)(2-1) = 1\) grado de libertad. Las frecuencias esperadas (\(E_{ij}\)) se calculan bajo la hipótesis nula de que la proporción de observaciones por encima y por debajo de la mediana es la misma en ambos grupos.
El p-valor es la probabilidad de obtener un estadístico Chi-cuadrado tan extremo (o más extremo) como el observado, asumiendo que las medianas de los dos grupos son iguales (es decir, la hipótesis nula es verdadera). Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que las medianas de los dos grupos son significativamente diferentes.
Interpretación del p-valor:
Se midió la altura (en cm) de plantas tratadas con dos fertilizantes diferentes. Se desea determinar si hay una diferencia significativa en la mediana de la altura de las plantas entre los dos grupos (\(\alpha = 0.05\)).
Datos:
Fertilizante A: 25, 28, 22, 30, 26 Fertilizante B: 32, 35, 29, 38, 31, 33
Solución en R:
# Datos de altura de plantas por fertilizante
fertilizante_a <- c(25, 28, 22, 30, 26)
fertilizante_b <- c(32, 35, 29, 38, 31, 33)
# Combinar los datos para encontrar la mediana combinada
datos_combinados <- c(fertilizante_a, fertilizante_b)
mediana_combinada <- median(datos_combinados)
cat("Mediana combinada:", mediana_combinada, "\n")
## Mediana combinada: 30
# Crear la tabla de contingencia
tabla_mediana <- matrix(c(sum(fertilizante_a >= mediana_combinada),
sum(fertilizante_b >= mediana_combinada),
sum(fertilizante_a < mediana_combinada),
sum(fertilizante_b < mediana_combinada)),
nrow = 2, byrow = TRUE)
colnames(tabla_mediana) <- c("Fertilizante A", "Fertilizante B")
rownames(tabla_mediana) <- c(">= Mediana", "< Mediana")
print(tabla_mediana)
## Fertilizante A Fertilizante B
## >= Mediana 1 5
## < Mediana 4 1
# Realizar la prueba Chi-cuadrado de independencia
prueba_mediana <- chisq.test(tabla_mediana, correct = FALSE)
## Warning in chisq.test(tabla_mediana, correct = FALSE): Chi-squared
## approximation may be incorrect
print(prueba_mediana)
##
## Pearson's Chi-squared test
##
## data: tabla_mediana
## X-squared = 4.4122, df = 1, p-value = 0.03568
# Nivel de significancia
alfa_mediana <- 0.05
# Valor crítico de Chi-cuadrado con 1 grado de libertad
valor_critico_mediana <- qchisq(1 - alfa_mediana, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_mediana, "\n")
## Valor crítico de Chi-cuadrado: 3.841459
# Visualización de la región de rechazo
x_mediana <- seq(0, valor_critico_mediana + 5, length.out = 200)
y_mediana <- dchisq(x_mediana, df = 1)
plot(x_mediana, y_mediana, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo (Prueba de la Mediana)")
abline(v = valor_critico_mediana, col = "red", lty = 2)
polygon(c(valor_critico_mediana, x_mediana[x_mediana >= valor_critico_mediana], max(x_mediana)),
c(0, y_mediana[x_mediana >= valor_critico_mediana], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_mediana$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_mediana$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(fertilizante_a, fertilizante_b, names = c("Fertilizante A", "Fertilizante B"),
ylab = "Altura (cm)", main = "Comparación de Altura de Plantas")
abline(h = mediana_combinada, lty = 2, col = "blue") # Mediana combinada
legend("topright", legend = paste("Mediana combinada =", mediana_combinada),
col = "blue", lty = 2)
Interpretación:
El resultado de la prueba Chi-cuadrado proporcionará el estadístico \(\chi^2\) y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana de la altura de las plantas entre los dos fertilizantes. El boxplot ayuda a visualizar las distribuciones y la mediana combinada.
Se midió el tiempo de respuesta (en segundos) de dos sistemas informáticos diferentes para una misma tarea. Se desea determinar si hay una diferencia significativa en la mediana del tiempo de respuesta (\(\alpha = 0.10\)).
Datos:
Sistema X: 1.2, 1.5, 1.1, 1.8, 1.3 Sistema Y: 1.6, 1.9, 1.4, 2.1, 1.7, 1.8
Solución en R:
# Datos de tiempo de respuesta por sistema
sistema_x <- c(1.2, 1.5, 1.1, 1.8, 1.3)
sistema_y <- c(1.6, 1.9, 1.4, 2.1, 1.7, 1.8)
# Mediana combinada
datos_combinados_tiempo <- c(sistema_x, sistema_y)
mediana_combinada_tiempo <- median(datos_combinados_tiempo)
cat("Mediana combinada:", mediana_combinada_tiempo, "\n")
## Mediana combinada: 1.6
# Tabla de contingencia
tabla_mediana_tiempo <- matrix(c(sum(sistema_x >= mediana_combinada_tiempo),
sum(sistema_y >= mediana_combinada_tiempo),
sum(sistema_x < mediana_combinada_tiempo),
sum(sistema_y < mediana_combinada_tiempo)),
nrow = 2, byrow = TRUE)
colnames(tabla_mediana_tiempo) <- c("Sistema X", "Sistema Y")
rownames(tabla_mediana_tiempo) <- c(">= Mediana", "< Mediana")
print(tabla_mediana_tiempo)
## Sistema X Sistema Y
## >= Mediana 1 5
## < Mediana 4 1
# Prueba Chi-cuadrado
prueba_mediana_tiempo <- chisq.test(tabla_mediana_tiempo, correct = FALSE)
## Warning in chisq.test(tabla_mediana_tiempo, correct = FALSE): Chi-squared
## approximation may be incorrect
print(prueba_mediana_tiempo)
##
## Pearson's Chi-squared test
##
## data: tabla_mediana_tiempo
## X-squared = 4.4122, df = 1, p-value = 0.03568
# Nivel de significancia
alfa_mediana_tiempo <- 0.10
# Valor crítico de Chi-cuadrado
valor_critico_mediana_tiempo <- qchisq(1 - alfa_mediana_tiempo, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_mediana_tiempo, "\n")
## Valor crítico de Chi-cuadrado: 2.705543
# Visualización de la región de rechazo
x_mediana_tiempo <- seq(0, valor_critico_mediana_tiempo + 5, length.out = 200)
y_mediana_tiempo <- dchisq(x_mediana_tiempo, df = 1)
plot(x_mediana_tiempo, y_mediana_tiempo, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo (Prueba de la Mediana)")
abline(v = valor_critico_mediana_tiempo, col = "red", lty = 2)
polygon(c(valor_critico_mediana_tiempo, x_mediana_tiempo[x_mediana_tiempo >= valor_critico_mediana_tiempo], max(x_mediana_tiempo)),
c(0, y_mediana_tiempo[x_mediana_tiempo >= valor_critico_mediana_tiempo], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_mediana_tiempo$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_mediana_tiempo$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(sistema_x, sistema_y, names = c("Sistema X", "Sistema Y"),
ylab = "Tiempo de Respuesta (s)", main = "Comparación de Tiempo de Respuesta")
abline(h = mediana_combinada_tiempo, lty = 2, col = "blue")
legend("topright", legend = paste("Mediana combinada =", mediana_combinada_tiempo),
col = "blue", lty = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.10\), rechazaremos la hipótesis nula de que las medianas del tiempo de respuesta de los dos sistemas son iguales.
Se registraron las puntuaciones de satisfacción (en una escala de 1 a 10) otorgadas por clientes atendidos por dos agentes diferentes. Se desea probar si hay una diferencia en la mediana de las puntuaciones de satisfacción (\(\alpha = 0.05\)).
Datos:
Agente 1: 7, 8, 6, 9, 7, 8, 7 Agente 2: 6, 7, 5, 8, 6, 7, 6, 5
Solución en R:
# Datos de puntuación de satisfacción por agente
agente1 <- c(7, 8, 6, 9, 7, 8, 7)
agente2 <- c(6, 7, 5, 8, 6, 7, 6, 5)
# Mediana combinada
datos_combinados_satisfaccion <- c(agente1, agente2)
mediana_combinada_satisfaccion <- median(datos_combinados_satisfaccion)
cat("Mediana combinada:", mediana_combinada_satisfaccion, "\n")
## Mediana combinada: 7
# Tabla de contingencia
tabla_mediana_satisfaccion <- matrix(c(sum(agente1 >= mediana_combinada_satisfaccion),
sum(agente2 >= mediana_combinada_satisfaccion),
sum(agente1 < mediana_combinada_satisfaccion),
sum(agente2 < mediana_combinada_satisfaccion)),
nrow = 2, byrow = TRUE)
colnames(tabla_mediana_satisfaccion) <- c("Agente 1", "Agente 2")
rownames(tabla_mediana_satisfaccion) <- c(">= Mediana", "< Mediana")
print(tabla_mediana_satisfaccion)
## Agente 1 Agente 2
## >= Mediana 6 3
## < Mediana 1 5
# Prueba Chi-cuadrado
prueba_mediana_satisfaccion <- chisq.test(tabla_mediana_satisfaccion, correct = FALSE)
## Warning in chisq.test(tabla_mediana_satisfaccion, correct = FALSE): Chi-squared
## approximation may be incorrect
print(prueba_mediana_satisfaccion)
##
## Pearson's Chi-squared test
##
## data: tabla_mediana_satisfaccion
## X-squared = 3.6161, df = 1, p-value = 0.05722
# Nivel de significancia
alfa_mediana_satisfaccion <- 0.05
# Valor crítico de Chi-cuadrado
valor_critico_mediana_satisfaccion <- qchisq(1 - alfa_mediana_satisfaccion, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_mediana_satisfaccion, "\n")
## Valor crítico de Chi-cuadrado: 3.841459
# Visualización de la región de rechazo
x_mediana_satisfaccion <- seq(0, valor_critico_mediana_satisfaccion + 5, length.out = 200)
y_mediana_satisfaccion <- dchisq(x_mediana_satisfaccion, df = 1)
plot(x_mediana_satisfaccion, y_mediana_satisfaccion, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo (Prueba de la Mediana)")
abline(v = valor_critico_mediana_satisfaccion, col = "red", lty = 2)
polygon(c(valor_critico_mediana_satisfaccion, x_mediana_satisfaccion[x_mediana_satisfaccion >= valor_critico_mediana_satisfaccion], max(x_mediana_satisfaccion)),
c(0, y_mediana_satisfaccion[x_mediana_satisfaccion >= valor_critico_mediana_satisfaccion], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_mediana_satisfaccion$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_mediana_satisfaccion$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(agente1, agente2, names = c("Agente 1", "Agente 2"),
ylab = "Puntuación de Satisfacción", main = "Comparación de Satisfacción por Agente")
abline(h = mediana_combinada_satisfaccion, lty = 2, col = "blue")
legend("topright", legend = paste("Mediana combinada =", mediana_combinada_satisfaccion),
col = "blue", lty = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula de que las medianas de las puntuaciones de satisfacción de los clientes son las mismas para los dos agentes.
Se compararon las calificaciones finales de estudiantes que participaron en dos programas académicos diferentes. Se desea determinar si hay una diferencia en la mediana del rendimiento académico (\(\alpha = 0.01\)).
Datos:
Programa A: 75, 80, 70, 85, 78, 72 Programa B: 82, 88, 79, 90, 85, 83, 86
Solución en R:
# Datos de rendimiento académico por programa
programa_a <- c(75, 80, 70, 85, 78, 72)
programa_b <- c(82, 88, 79, 90, 85, 83, 86)
# Mediana combinada
datos_combinados_rendimiento <- c(programa_a, programa_b)
mediana_combinada_rendimiento <- median(datos_combinados_rendimiento)
cat("Mediana combinada:", mediana_combinada_rendimiento, "\n")
## Mediana combinada: 82
# Tabla de contingencia
tabla_mediana_rendimiento <- matrix(c(sum(programa_a >= mediana_combinada_rendimiento),
sum(programa_b >= mediana_combinada_rendimiento),
sum(programa_a < mediana_combinada_rendimiento),
sum(programa_b < mediana_combinada_rendimiento)),
nrow = 2, byrow = TRUE)
colnames(tabla_mediana_rendimiento) <- c("Programa A", "Programa B")
rownames(tabla_mediana_rendimiento) <- c(">= Mediana", "< Mediana")
print(tabla_mediana_rendimiento)
## Programa A Programa B
## >= Mediana 1 6
## < Mediana 5 1
# Prueba Chi-cuadrado
prueba_mediana_rendimiento <- chisq.test(tabla_mediana_rendimiento, correct = FALSE)
## Warning in chisq.test(tabla_mediana_rendimiento, correct = FALSE): Chi-squared
## approximation may be incorrect
print(prueba_mediana_rendimiento)
##
## Pearson's Chi-squared test
##
## data: tabla_mediana_rendimiento
## X-squared = 6.1978, df = 1, p-value = 0.01279
# Nivel de significancia
alfa_mediana_rendimiento <- 0.01
# Valor crítico de Chi-cuadrado
valor_critico_mediana_rendimiento <- qchisq(1 - alfa_mediana_rendimiento, df = 1)
cat("Valor crítico de Chi-cuadrado:", valor_critico_mediana_rendimiento, "\n")
## Valor crítico de Chi-cuadrado: 6.634897
# Visualización de la región de rechazo
x_mediana_rendimiento <- seq(0, valor_critico_mediana_rendimiento + 5, length.out = 200)
y_mediana_rendimiento <- dchisq(x_mediana_rendimiento, df = 1)
plot(x_mediana_rendimiento, y_mediana_rendimiento, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=1) y Región de Rechazo (Prueba de la Mediana)")
abline(v = valor_critico_mediana_rendimiento, col = "red", lty = 2)
polygon(c(valor_critico_mediana_rendimiento, x_mediana_rendimiento[x_mediana_rendimiento >= valor_critico_mediana_rendimiento], max(x_mediana_rendimiento)),
c(0, y_mediana_rendimiento[x_mediana_rendimiento >= valor_critico_mediana_rendimiento], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_mediana_rendimiento$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico observado =", round(prueba_mediana_rendimiento$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(programa_a, programa_b, names = c("Programa A", "Programa B"),
ylab = "Rendimiento Académico", main = "Comparación de Rendimiento por Programa")
abline(h = mediana_combinada_rendimiento, lty = 2, col = "blue")
legend("topright", legend = paste("Mediana combinada =", mediana_combinada_rendimiento),
col = "blue", lty = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula de que las medianas del rendimiento académico de los estudiantes en los dos programas son iguales.
La prueba de Kruskal-Wallis, también conocida como la prueba H, es una prueba no paramétrica que extiende la prueba U de Mann-Whitney para comparar las medianas de tres o más grupos independientes. Es una alternativa a la ANOVA de un factor cuando no se cumplen los supuestos de normalidad o igualdad de varianzas.
El procedimiento general implica los siguientes pasos:
Combinar y ordenar los datos: Se combinan todas las observaciones de todos los grupos en un solo conjunto de datos y se ordenan de menor a mayor.
Asignar rangos: Se asignan rangos a cada observación en el conjunto ordenado. En caso de empates, se asigna el rango promedio.
Calcular la suma de rangos para cada grupo: Se suman los rangos asignados a las observaciones de cada grupo por separado. Sea \(R_i\) la suma de rangos del grupo \(i\) (de tamaño \(n_i\)), donde hay \(k\) grupos en total.
Calcular el estadístico H: El estadístico de prueba H se calcula mediante la siguiente fórmula:
\[ H = \frac{12}{N(N+1)} \sum_{i=1}^{k} \frac{R_i^2}{n_i} - 3(N+1) \]
Donde:
Si hay empates, se puede aplicar una corrección al estadístico H:
\[ H_c = \frac{H}{1 - \frac{\sum T}{N^3 - N}} \]
Donde \(T = t^3 - t\), y \(t\) es el número de observaciones empatadas en cada grupo de empates. La corrección generalmente aumenta el valor de H, haciéndolo más conservador.
La hipótesis nula (\(H_0\)) es que las medianas de todos los grupos son iguales. La hipótesis alternativa (\(H_1\)) es que al menos una de las medianas es diferente de las demás.
Bajo la hipótesis nula, la distribución del estadístico H se aproxima a una distribución Chi-cuadrado (\(\chi^2\)) con \(k-1\) grados de libertad para tamaños de muestra suficientemente grandes (generalmente, si cada grupo tiene al menos 5 observaciones).
El p-valor es la probabilidad de obtener un estadístico H tan grande (o más grande) como el observado, asumiendo que la hipótesis nula es verdadera. Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que al menos una de las medianas de los grupos es significativamente diferente.
Interpretación del p-valor:
Se midió el rendimiento (en toneladas por hectárea) de tres variedades de trigo en parcelas diferentes. Se desea determinar si hay una diferencia significativa en la mediana del rendimiento entre las variedades (\(\alpha = 0.05\)).
Datos:
Variedad A: 4.5, 5.1, 4.8, 5.3, 4.9 Variedad B: 5.6, 6.0, 5.8, 6.2, 5.9, 5.7 Variedad C: 5.0, 5.5, 5.2, 5.7, 5.3, 5.4
Solución en R:
# Datos de rendimiento por variedad
rendimiento_a <- c(4.5, 5.1, 4.8, 5.3, 4.9)
rendimiento_b <- c(5.6, 6.0, 5.8, 6.2, 5.9, 5.7)
rendimiento_c <- c(5.0, 5.5, 5.2, 5.7, 5.3, 5.4)
# Combinar los datos en un data frame
datos_rendimiento <- data.frame(
rendimiento = c(rendimiento_a, rendimiento_b, rendimiento_c),
variedad = factor(rep(c("A", "B", "C"), times = c(length(rendimiento_a), length(rendimiento_b), length(rendimiento_c))))
)
# Realizar la prueba de Kruskal-Wallis
prueba_kw_rendimiento <- kruskal.test(rendimiento ~ variedad, data = datos_rendimiento)
print(prueba_kw_rendimiento)
##
## Kruskal-Wallis rank sum test
##
## data: rendimiento by variedad
## Kruskal-Wallis chi-squared = 12.186, df = 2, p-value = 0.002258
# Nivel de significancia
alfa_kw <- 0.05
# Grados de libertad (k - 1 = 3 - 1 = 2)
df_kw <- 2
# Valor crítico de Chi-cuadrado
valor_critico_kw <- qchisq(1 - alfa_kw, df = df_kw)
cat("Valor crítico de Chi-cuadrado:", valor_critico_kw, "\n")
## Valor crítico de Chi-cuadrado: 5.991465
# Visualización de la región de rechazo
x_kw <- seq(0, valor_critico_kw + 5, length.out = 200)
y_kw <- dchisq(x_kw, df = df_kw)
plot(x_kw, y_kw, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Kruskal-Wallis)")
abline(v = valor_critico_kw, col = "red", lty = 2)
polygon(c(valor_critico_kw, x_kw[x_kw >= valor_critico_kw], max(x_kw)),
c(0, y_kw[x_kw >= valor_critico_kw], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kw_rendimiento$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico H =", round(prueba_kw_rendimiento$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(rendimiento ~ variedad, data = datos_rendimiento,
ylab = "Rendimiento (toneladas/hectárea)", main = "Rendimiento de Variedades de Trigo")
Interpretación:
El resultado de kruskal.test()
proporcionará el
estadístico H y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula y concluiremos que hay una diferencia significativa en la mediana
del rendimiento entre al menos una de las variedades de trigo. La
gráfica muestra la distribución Chi-cuadrado con 2 grados de libertad y
la región de rechazo. Los boxplots ayudan a visualizar las
distribuciones de rendimiento por variedad.
Se midieron los tiempos de respuesta (en milisegundos) de tres servidores diferentes para una misma tarea. Se desea determinar si hay una diferencia significativa en la mediana del tiempo de respuesta entre los servidores (\(\alpha = 0.10\)).
Datos:
Servidor 1: 150, 165, 140, 170, 155 Servidor 2: 180, 190, 175, 200, 185, 195 Servidor 3: 160, 175, 165, 180, 170
Solución en R:
# Datos de tiempo de respuesta por servidor
servidor1 <- c(150, 165, 140, 170, 155)
servidor2 <- c(180, 190, 175, 200, 185, 195)
servidor3 <- c(160, 175, 165, 180, 170)
# Combinar los datos en un data frame
datos_servidores <- data.frame(
tiempo_respuesta = c(servidor1, servidor2, servidor3),
servidor = factor(rep(c("S1", "S2", "S3"), times = c(length(servidor1), length(servidor2), length(servidor3))))
)
# Realizar la prueba de Kruskal-Wallis
prueba_kw_servidores <- kruskal.test(tiempo_respuesta ~ servidor, data = datos_servidores)
print(prueba_kw_servidores)
##
## Kruskal-Wallis rank sum test
##
## data: tiempo_respuesta by servidor
## Kruskal-Wallis chi-squared = 10.88, df = 2, p-value = 0.004339
# Nivel de significancia
alfa_kw_servidores <- 0.10
# Grados de libertad (3 - 1 = 2)
df_kw_servidores <- 2
# Valor crítico de Chi-cuadrado
valor_critico_kw_servidores <- qchisq(1 - alfa_kw_servidores, df = df_kw_servidores)
cat("Valor crítico de Chi-cuadrado:", valor_critico_kw_servidores, "\n")
## Valor crítico de Chi-cuadrado: 4.60517
# Visualización de la región de rechazo
x_kw_servidores <- seq(0, valor_critico_kw_servidores + 5, length.out = 200)
y_kw_servidores <- dchisq(x_kw_servidores, df = df_kw_servidores)
plot(x_kw_servidores, y_kw_servidores, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Kruskal-Wallis)")
abline(v = valor_critico_kw_servidores, col = "red", lty = 2)
polygon(c(valor_critico_kw_servidores, x_kw_servidores[x_kw_servidores >= valor_critico_kw_servidores], max(x_kw_servidores)),
c(0, y_kw_servidores[x_kw_servidores >= valor_critico_kw_servidores], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kw_servidores$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico H =", round(prueba_kw_servidores$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(tiempo_respuesta ~ servidor, data = datos_servidores,
ylab = "Tiempo de Respuesta (ms)", main = "Tiempo de Respuesta por Servidor")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.10\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana del tiempo de respuesta entre al menos uno de los servidores.
Se registraron las puntuaciones de satisfacción (en una escala de 1 a 10) otorgadas por clientes atendidos por cuatro agentes diferentes. Se desea probar si hay una diferencia en la mediana de las puntuaciones de satisfacción (\(\alpha = 0.05\)).
Datos:
Agente A: 7, 8, 6, 9, 7 Agente B: 6, 7, 5, 8, 6, 7 Agente C: 8, 9, 7, 9, 8, 8 Agente D: 5, 6, 4, 7, 5
Solución en R:
# Datos de puntuación de satisfacción por agente
agente_a <- c(7, 8, 6, 9, 7)
agente_b <- c(6, 7, 5, 8, 6, 7)
agente_c <- c(8, 9, 7, 9, 8, 8)
agente_d <- c(5, 6, 4, 7, 5)
# Combinar los datos en un data frame
datos_agentes <- data.frame(
satisfaccion = c(agente_a, agente_b, agente_c, agente_d),
agente = factor(rep(c("A", "B", "C", "D"), times = c(length(agente_a), length(agente_b), length(agente_c), length(agente_d))))
)
# Realizar la prueba de Kruskal-Wallis
prueba_kw_agentes <- kruskal.test(satisfaccion ~ agente, data = datos_agentes)
print(prueba_kw_agentes)
##
## Kruskal-Wallis rank sum test
##
## data: satisfaccion by agente
## Kruskal-Wallis chi-squared = 11.612, df = 3, p-value = 0.008837
# Nivel de significancia
alfa_kw_agentes <- 0.05
# Grados de libertad (4 - 1 = 3)
df_kw_agentes <- 3
# Valor crítico de Chi-cuadrado
valor_critico_kw_agentes <- qchisq(1 - alfa_kw_agentes, df = df_kw_agentes)
cat("Valor crítico de Chi-cuadrado:", valor_critico_kw_agentes, "\n")
## Valor crítico de Chi-cuadrado: 7.814728
# Visualización de la región de rechazo
x_kw_agentes <- seq(0, valor_critico_kw_agentes + 5, length.out = 200)
y_kw_agentes <- dchisq(x_kw_agentes, df = df_kw_agentes)
plot(x_kw_agentes, y_kw_agentes, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=3) y Región de Rechazo (Kruskal-Wallis)")
abline(v = valor_critico_kw_agentes, col = "red", lty = 2)
polygon(c(valor_critico_kw_agentes, x_kw_agentes[x_kw_agentes >= valor_critico_kw_agentes], max(x_kw_agentes)),
c(0, y_kw_agentes[x_kw_agentes >= valor_critico_kw_agentes], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kw_agentes$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico H =", round(prueba_kw_agentes$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(satisfaccion ~ agente, data = datos_agentes,
ylab = "Puntuación de Satisfacción", main = "Satisfacción por Agente")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana de las puntuaciones de satisfacción entre al menos uno de los agentes.
Se midió el tiempo de recuperación (en días) de pacientes que recibieron tres tratamientos diferentes para una misma condición médica. Se desea determinar si hay una diferencia significativa en la mediana del tiempo de recuperación entre los tratamientos (\(\alpha = 0.01\)).
Datos:
Tratamiento 1: 10, 12, 11, 13, 10, 14 Tratamiento 2: 15, 16, 14, 17, 15, 18, 16 Tratamiento 3: 12, 14, 13, 15, 11
Solución en R:
# Datos de tiempo de recuperación por tratamiento
tratamiento1 <- c(10, 12, 11, 13, 10, 14)
tratamiento2 <- c(15, 16, 14, 17, 15, 18, 16)
tratamiento3 <- c(12, 14, 13, 15, 11)
# Combinar los datos en un data frame
datos_tratamientos <- data.frame(
tiempo_recuperacion = c(tratamiento1, tratamiento2, tratamiento3),
tratamiento = factor(rep(c("T1", "T2", "T3"), times = c(length(tratamiento1), length(tratamiento2), length(tratamiento3))))
)
# Realizar la prueba de Kruskal-Wallis
prueba_kw_tratamientos <- kruskal.test(tiempo_recuperacion ~ tratamiento, data = datos_tratamientos)
print(prueba_kw_tratamientos)
##
## Kruskal-Wallis rank sum test
##
## data: tiempo_recuperacion by tratamiento
## Kruskal-Wallis chi-squared = 11.341, df = 2, p-value = 0.003446
# Nivel de significancia
alfa_kw_tratamientos <- 0.01
# Grados de libertad (3 - 1 = 2)
df_kw_tratamientos <- 2
# Valor crítico de Chi-cuadrado
valor_critico_kw_tratamientos <- qchisq(1 - alfa_kw_tratamientos, df = df_kw_tratamientos)
cat("Valor crítico de Chi-cuadrado:", valor_critico_kw_tratamientos, "\n")
## Valor crítico de Chi-cuadrado: 9.21034
# Visualización de la región de rechazo
x_kw_tratamientos <- seq(0, valor_critico_kw_tratamientos + 5, length.out = 200)
y_kw_tratamientos <- dchisq(x_kw_tratamientos, df = df_kw_tratamientos)
plot(x_kw_tratamientos, y_kw_tratamientos, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Kruskal-Wallis)")
abline(v = valor_critico_kw_tratamientos, col = "red", lty = 2)
polygon(c(valor_critico_kw_tratamientos, x_kw_tratamientos[x_kw_tratamientos >= valor_critico_kw_tratamientos], max(x_kw_tratamientos)),
c(0, y_kw_tratamientos[x_kw_tratamientos >= valor_critico_kw_tratamientos], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kw_tratamientos$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico H =", round(prueba_kw_tratamientos$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones
boxplot(tiempo_recuperacion ~ tratamiento, data = datos_tratamientos,
ylab = "Tiempo de Recuperación (días)", main = "Tiempo de Recuperación por Tratamiento")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana del tiempo de recuperación entre al menos uno de los tratamientos.
La prueba de Friedman es una prueba no paramétrica utilizada para comparar las medianas de tres o más grupos relacionados o dependientes (datos pareados o bloques). Es una alternativa no paramétrica a la ANOVA de medidas repetidas cuando no se cumplen los supuestos de normalidad o esfericidad.
El procedimiento general implica los siguientes pasos:
Organizar los datos: Los datos se organizan en bloques (sujetos) y tratamientos (condiciones). Para cada bloque, se tienen observaciones para cada tratamiento.
Asignar rangos dentro de cada bloque: Dentro de cada bloque (fila), se asignan rangos a las observaciones para los diferentes tratamientos. Si hay empates dentro de un bloque, se asigna el rango promedio.
Calcular la suma de rangos para cada tratamiento: Se suman los rangos asignados a cada tratamiento a través de todos los bloques. Sea \(R_j\) la suma de rangos para el tratamiento \(j\).
Calcular el estadístico de Friedman (Q): El estadístico de prueba Q se calcula mediante la siguiente fórmula:
\[ Q = \frac{12}{Nk(k+1)} \sum_{j=1}^{k} R_j^2 - 3N(k+1) \]
Donde:
Si hay empates, se puede aplicar una corrección, pero generalmente el estadístico Q sin corrección es suficiente para tamaños de muestra moderados.
La hipótesis nula (\(H_0\)) es que no hay una diferencia significativa entre las medianas de los tratamientos. La hipótesis alternativa (\(H_1\)) es que al menos una de las medianas es diferente de las demás.
Bajo la hipótesis nula, la distribución del estadístico Q se aproxima a una distribución Chi-cuadrado (\(\chi^2\)) con \(k-1\) grados de libertad para un número suficientemente grande de bloques (\(N\)) y tratamientos (\(k\)). Generalmente, se requiere \(N > 10\) o \(k > 3\).
El p-valor es la probabilidad de obtener un estadístico Q tan grande (o más grande) como el observado, asumiendo que la hipótesis nula es verdadera. Un p-valor pequeño (generalmente menor que el nivel de significancia \(\alpha\)) proporciona evidencia en contra de la hipótesis nula, lo que lleva a rechazarla y concluir que al menos una de las medianas de los tratamientos es significativamente diferente.
Interpretación del p-valor:
Se pidió a 8 estudiantes que calificaran tres métodos de enseñanza diferentes en una escala del 1 al 10. Se desea determinar si hay una diferencia significativa en la mediana de las calificaciones entre los métodos (\(\alpha = 0.05\)).
Datos:
Estudiante | Método 1 | Método 2 | Método 3 |
---|---|---|---|
1 | 7 | 8 | 6 |
2 | 6 | 7 | 5 |
3 | 8 | 9 | 7 |
4 | 5 | 6 | 4 |
5 | 9 | 8 | 8 |
6 | 7 | 7 | 6 |
7 | 6 | 8 | 7 |
8 | 8 | 9 | 8 |
Solución en R:
# Datos de calificaciones por método y estudiante
datos_ensenanza <- data.frame(
Estudiante = factor(1:8),
Metodo1 = c(7, 6, 8, 5, 9, 7, 6, 8),
Metodo2 = c(8, 7, 9, 6, 8, 7, 8, 9),
Metodo3 = c(6, 5, 7, 4, 8, 6, 7, 8)
)
# Convertir a formato largo para la prueba de Friedman
datos_long_ensenanza <- reshape2::melt(datos_ensenanza, id.vars = "Estudiante",
variable.name = "Metodo", value.name = "Calificacion")
# Realizar la prueba de Friedman
prueba_friedman_ensenanza <- friedman.test(Calificacion ~ Metodo | Estudiante, data = datos_long_ensenanza)
print(prueba_friedman_ensenanza)
##
## Friedman rank sum test
##
## data: Calificacion and Metodo and Estudiante
## Friedman chi-squared = 9.931, df = 2, p-value = 0.006974
# Nivel de significancia
alfa_friedman <- 0.05
# Grados de libertad (k - 1 = 3 - 1 = 2)
df_friedman <- 2
# Valor crítico de Chi-cuadrado
valor_critico_friedman <- qchisq(1 - alfa_friedman, df = df_friedman)
cat("Valor crítico de Chi-cuadrado:", valor_critico_friedman, "\n")
## Valor crítico de Chi-cuadrado: 5.991465
# Visualización de la región de rechazo
x_friedman <- seq(0, valor_critico_friedman + 5, length.out = 200)
y_friedman <- dchisq(x_friedman, df = df_friedman)
plot(x_friedman, y_friedman, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Friedman)")
abline(v = valor_critico_friedman, col = "red", lty = 2)
polygon(c(valor_critico_friedman, x_friedman[x_friedman >= valor_critico_friedman], max(x_friedman)),
c(0, y_friedman[x_friedman >= valor_critico_friedman], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_friedman_ensenanza$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Q =", round(prueba_friedman_ensenanza$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones por método
boxplot(Calificacion ~ Metodo, data = datos_long_ensenanza,
ylab = "Calificación", main = "Calificaciones por Método de Enseñanza")
Interpretación:
El resultado de friedman.test()
proporcionará el
estadístico Chi-cuadrado y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula y concluiremos que hay una diferencia significativa en la mediana
de las calificaciones entre al menos uno de los métodos de enseñanza. La
gráfica muestra la distribución Chi-cuadrado con 2 grados de libertad y
la región de rechazo. Los boxplots ayudan a visualizar las
distribuciones de calificaciones por método.
Se pidió a 6 catadores que calificaran tres marcas de café (A, B, C) en una escala del 1 al 5 (donde 5 es la mejor). Se desea determinar si hay una diferencia significativa en la mediana de las calificaciones entre las marcas (\(\alpha = 0.10\)).
Datos:
Catador | Marca A | Marca B | Marca C |
---|---|---|---|
1 | 4 | 5 | 3 |
2 | 3 | 4 | 2 |
3 | 5 | 5 | 4 |
4 | 2 | 3 | 1 |
5 | 4 | 4 | 3 |
6 | 3 | 5 | 3 |
Solución en R:
# Datos de calificaciones por marca y catador
datos_cafe <- data.frame(
Catador = factor(1:6),
MarcaA = c(4, 3, 5, 2, 4, 3),
MarcaB = c(5, 4, 5, 3, 4, 5),
MarcaC = c(3, 2, 4, 1, 3, 3)
)
# Convertir a formato largo
datos_long_cafe <- reshape2::melt(datos_cafe, id.vars = "Catador",
variable.name = "Marca", value.name = "Calificacion")
# Realizar la prueba de Friedman
prueba_friedman_cafe <- friedman.test(Calificacion ~ Marca | Catador, data = datos_long_cafe)
print(prueba_friedman_cafe)
##
## Friedman rank sum test
##
## data: Calificacion and Marca and Catador
## Friedman chi-squared = 10.571, df = 2, p-value = 0.005063
# Nivel de significancia
alfa_friedman_cafe <- 0.10
# Grados de libertad (3 - 1 = 2)
df_friedman_cafe <- 2
# Valor crítico de Chi-cuadrado
valor_critico_friedman_cafe <- qchisq(1 - alfa_friedman_cafe, df = df_friedman_cafe)
cat("Valor crítico de Chi-cuadrado:", valor_critico_friedman_cafe, "\n")
## Valor crítico de Chi-cuadrado: 4.60517
# Visualización de la región de rechazo
x_friedman_cafe <- seq(0, valor_critico_friedman_cafe + 5, length.out = 200)
y_friedman_cafe <- dchisq(x_friedman_cafe, df = df_friedman_cafe)
plot(x_friedman_cafe, y_friedman_cafe, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Friedman)")
abline(v = valor_critico_friedman_cafe, col = "red", lty = 2)
polygon(c(valor_critico_friedman_cafe, x_friedman_cafe[x_friedman_cafe >= valor_critico_friedman_cafe], max(x_friedman_cafe)),
c(0, y_friedman_cafe[x_friedman_cafe >= valor_critico_friedman_cafe], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_friedman_cafe$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Q =", round(prueba_friedman_cafe$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones por marca
boxplot(Calificacion ~ Marca, data = datos_long_cafe,
ylab = "Calificación", main = "Calificaciones por Marca de Café")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.10\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana de las calificaciones entre al menos una de las marcas de café.
Se midió el tiempo de ejecución (en segundos) de tres algoritmos diferentes en 5 conjuntos de datos idénticos. Se desea determinar si hay una diferencia significativa en la mediana del tiempo de ejecución entre los algoritmos (\(\alpha = 0.05\)).
Datos:
Conjunto de Datos | Algoritmo 1 | Algoritmo 2 | Algoritmo 3 |
---|---|---|---|
1 | 2.1 | 2.5 | 1.9 |
2 | 3.0 | 3.2 | 2.8 |
3 | 1.8 | 2.0 | 1.7 |
4 | 2.5 | 2.7 | 2.3 |
5 | 2.2 | 2.4 | 2.1 |
Solución en R:
# Datos de tiempo de ejecución por algoritmo y conjunto de datos
datos_algoritmos <- data.frame(
Dataset = factor(1:5),
Algoritmo1 = c(2.1, 3.0, 1.8, 2.5, 2.2),
Algoritmo2 = c(2.5, 3.2, 2.0, 2.7, 2.4),
Algoritmo3 = c(1.9, 2.8, 1.7, 2.3, 2.1)
)
# Convertir a formato largo
datos_long_algoritmos <- reshape2::melt(datos_algoritmos, id.vars = "Dataset",
variable.name = "Algoritmo", value.name = "Tiempo")
# Realizar la prueba de Friedman
prueba_friedman_algoritmos <- friedman.test(Tiempo ~ Algoritmo | Dataset, data = datos_long_algoritmos)
print(prueba_friedman_algoritmos)
##
## Friedman rank sum test
##
## data: Tiempo and Algoritmo and Dataset
## Friedman chi-squared = 10, df = 2, p-value = 0.006738
# Nivel de significancia
alfa_friedman_algoritmos <- 0.05
# Grados de libertad (3 - 1 = 2)
df_friedman_algoritmos <- 2
# Valor crítico de Chi-cuadrado
valor_critico_friedman_algoritmos <- qchisq(1 - alfa_friedman_algoritmos, df = df_friedman_algoritmos)
cat("Valor crítico de Chi-cuadrado:", valor_critico_friedman_algoritmos, "\n")
## Valor crítico de Chi-cuadrado: 5.991465
# Visualización de la región de rechazo
x_friedman_algoritmos <- seq(0, valor_critico_friedman_algoritmos + 5, length.out = 200)
y_friedman_algoritmos <- dchisq(x_friedman_algoritmos, df = df_friedman_algoritmos)
plot(x_friedman_algoritmos, y_friedman_algoritmos, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=2) y Región de Rechazo (Friedman)")
abline(v = valor_critico_friedman_algoritmos, col = "red", lty = 2)
polygon(c(valor_critico_friedman_algoritmos, x_friedman_algoritmos[x_friedman_algoritmos >= valor_critico_friedman_algoritmos], max(x_friedman_algoritmos)),
c(0, y_friedman_algoritmos[x_friedman_algoritmos >= valor_critico_friedman_algoritmos], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_friedman_algoritmos$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Q =", round(prueba_friedman_algoritmos$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones por algoritmo
boxplot(Tiempo ~ Algoritmo, data = datos_long_algoritmos,
ylab = "Tiempo de Ejecución (s)", main = "Tiempo de Ejecución por Algoritmo")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana del tiempo de ejecución entre al menos uno de los algoritmos.
Se pidió a 7 usuarios que calificaran su preferencia por cuatro diseños de interfaz diferentes (A, B, C, D) en una escala del 1 al 7 (donde 7 es la mayor preferencia). Se desea determinar si hay una diferencia significativa en la mediana de las preferencias entre los diseños (\(\alpha = 0.01\)).
Datos:
Usuario | Diseño A | Diseño B | Diseño C | Diseño D |
---|---|---|---|---|
1 | 5 | 6 | 4 | 7 |
2 | 4 | 5 | 3 | 6 |
3 | 6 | 7 | 5 | 7 |
4 | 3 | 4 | 2 | 5 |
5 | 7 | 6 | 6 | 7 |
6 | 5 | 5 | 4 | 6 |
7 | 6 | 7 | 5 | 7 |
Solución en R:
# Datos de preferencia por diseño y usuario
datos_interfaz <- data.frame(
Usuario = factor(1:7),
DisenoA = c(5, 4, 6, 3, 7, 5, 6),
DisenoB = c(6, 5, 7, 4, 6, 5, 7),
DisenoC = c(4, 3, 5, 2, 6, 4, 5),
DisenoD = c(7, 6, 7, 5, 7, 6, 7)
)
# Convertir a formato largo
datos_long_interfaz <- reshape2::melt(datos_interfaz, id.vars = "Usuario",
variable.name = "Diseno", value.name = "Preferencia")
# Realizar la prueba de Friedman
prueba_friedman_interfaz <- friedman.test(Preferencia ~ Diseno | Usuario, data = datos_long_interfaz)
print(prueba_friedman_interfaz)
##
## Friedman rank sum test
##
## data: Preferencia and Diseno and Usuario
## Friedman chi-squared = 17.492, df = 3, p-value = 0.0005597
# Nivel de significancia
alfa_friedman_interfaz <- 0.01
# Grados de libertad (4 - 1 = 3)
df_friedman_interfaz <- 3
# Valor crítico de Chi-cuadrado
valor_critico_friedman_interfaz <- qchisq(1 - alfa_friedman_interfaz, df = df_friedman_interfaz)
cat("Valor crítico de Chi-cuadrado:", valor_critico_friedman_interfaz, "\n")
## Valor crítico de Chi-cuadrado: 11.34487
# Visualización de la región de rechazo
x_friedman_interfaz <- seq(0, valor_critico_friedman_interfaz + 5, length.out = 200)
y_friedman_interfaz <- dchisq(x_friedman_interfaz, df = df_friedman_interfaz)
plot(x_friedman_interfaz, y_friedman_interfaz, type = "l", xlab = "Estadístico Chi-cuadrado", ylab = "Densidad",
main = "Distribución Chi-cuadrado (df=3) y Región de Rechazo (Friedman)")
abline(v = valor_critico_friedman_interfaz, col = "red", lty = 2)
polygon(c(valor_critico_friedman_interfaz, x_friedman_interfaz[x_friedman_interfaz >= valor_critico_friedman_interfaz], max(x_friedman_interfaz)),
c(0, y_friedman_interfaz[x_friedman_interfaz >= valor_critico_friedman_interfaz], 0),
col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_friedman_interfaz$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Q =", round(prueba_friedman_interfaz$statistic, 3)),
col = "blue", lty = 2)
# Boxplots para comparar las distribuciones por diseño
boxplot(Preferencia ~ Diseno, data = datos_long_interfaz,
ylab = "Preferencia", main = "Preferencia por Diseño de Interfaz")
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que hay una diferencia significativa en la mediana de las preferencias entre al menos uno de los diseños de interfaz.
La prueba de Nemenyi es una prueba post-hoc no paramétrica que se utiliza después de obtener un resultado significativo en la prueba de Friedman para determinar qué pares de grupos relacionados (tratamientos) difieren significativamente entre sí. Es análoga a las pruebas post-hoc como Tukey o Bonferroni que se utilizan después de una ANOVA.
El procedimiento general implica los siguientes pasos:
Realizar la prueba de Friedman: Primero, se debe realizar una prueba de Friedman para determinar si existe una diferencia general significativa entre los grupos. Si la prueba de Friedman no es significativa, generalmente no se procede con las pruebas post-hoc.
Calcular las diferencias en las sumas de rangos: Se calculan las diferencias absolutas entre las sumas de rangos (\(R_j\)) de cada par de tratamientos.
Calcular la diferencia crítica: La diferencia crítica (\(CD\)) para un nivel de significancia \(\alpha\) se calcula como:
\[ CD = q_{\alpha, k, \infty} \sqrt{\frac{k(k+1)}{12N}} \]
Donde:
Una aproximación más común y directa utilizando la distribución t de Student (con ajuste de Bonferroni) para comparar pares es:
\[ CD = t_{\alpha / (k(k-1)), N(k-1)} \sqrt{\frac{2N(k+1)}{12N}} = t_{\alpha / (k(k-1)), N(k-1)} \sqrt{\frac{k+1}{6}} \]
Sin embargo, la fórmula original de Nemenyi utiliza el cuantil de la distribución del rango estudentizado. Para simplificar y usar una aproximación común en R, a menudo se utiliza una diferencia crítica basada en el error estándar de la diferencia de rangos promedio.
El rango promedio para el tratamiento \(j\) es \(\bar{R}_j = R_j / N\). La varianza de la diferencia entre dos rangos promedio es \(\frac{k(k+1)}{6N}\). El error estándar de la diferencia es \(\sqrt{\frac{k(k+1)}{6N}}\).
La diferencia crítica se puede aproximar como:
\[ CD = z_{1-\alpha/2} \sqrt{\frac{k(k+1)}{6N}} \]
O, utilizando el cuantil t con corrección de Bonferroni:
\[ CD = t_{1-\alpha/(k(k-1)), (N-1)(k-1)} \sqrt{\frac{k(k+1)}{6N}} \]
Comparar las diferencias con la diferencia crítica: Si la diferencia absoluta entre las sumas de rangos (o rangos promedio) de dos tratamientos es mayor que la diferencia crítica, entonces se considera que esos dos tratamientos difieren significativamente al nivel \(\alpha\).
El p-valor para la prueba de Nemenyi para un par específico de tratamientos se puede calcular comparando la diferencia observada en sus rangos promedio con la distribución nula de las diferencias de rangos. Sin embargo, calcular los p-valores exactos para todas las comparaciones post-hoc puede ser complejo y a menudo se basa en aproximaciones. En la práctica, la significancia se determina comparando la diferencia observada con la diferencia crítica.
Interpretación:
Después de la prueba de Friedman (Ejemplo 1 anterior), supongamos que se encontró una diferencia significativa. Ahora realizamos una prueba de Nemenyi (\(\alpha = 0.05\)) para ver qué métodos difieren.
Datos (sumas de rangos del análisis de Friedman):
Supongamos que las sumas de rangos para los Métodos 1, 2 y 3 fueron \(R_1 = 18\), \(R_2 = 23\), y \(R_3 = 13\). El número de bloques (estudiantes) fue \(N = 8\), y el número de tratamientos (métodos) fue \(k = 3\).
Solución en R:
# Sumas de rangos obtenidas de la prueba de Friedman
R <- c(18, 23, 13)
n_bloques <- 8
n_tratamientos <- 3
alfa_nemenyi <- 0.05
# Calcular los rangos promedio
R_promedio <- R / n_bloques
print(paste("Rangos promedio:", paste(round(R_promedio, 2), collapse = ", ")))
## [1] "Rangos promedio: 2.25, 2.88, 1.62"
# Calcular la diferencia crítica (aproximación normal)
z_critico <- qnorm(1 - alfa_nemenyi / 2)
diferencia_critica <- z_critico * sqrt(n_tratamientos * (n_tratamientos + 1) / (6 * n_bloques))
cat("Diferencia crítica (aproximada):", round(diferencia_critica, 2), "\n")
## Diferencia crítica (aproximada): 0.98
# Comparar las diferencias entre los rangos promedio con la diferencia crítica
diferencias_pares <- combn(R_promedio, 2)
nombres_pares <- combn(paste("Método", 1:n_tratamientos), 2)
for (i in 1:ncol(diferencias_pares)) {
diff_abs <- abs(diferencias_pares[1, i] - diferencias_pares[2, i])
if (diff_abs > diferencia_critica) {
cat(nombres_pares[1, i], "vs", nombres_pares[2, i], ": Diferencia significativa (", round(diff_abs, 2), " > ", round(diferencia_critica, 2), ")\n")
} else {
cat(nombres_pares[1, i], "vs", nombres_pares[2, i], ": No hay diferencia significativa (", round(diff_abs, 2), " <= ", round(diferencia_critica, 2), ")\n")
}
}
## Método 1 vs Método 2 : No hay diferencia significativa ( 0.62 <= 0.98 )
## Método 1 vs Método 3 : No hay diferencia significativa ( 0.62 <= 0.98 )
## Método 2 vs Método 3 : Diferencia significativa ( 1.25 > 0.98 )
# Visualización de las regiones de no significancia (conceptual)
# Se basa en las diferencias entre las medias de los rangos.
medias_rangos <- R_promedio
lim_sup <- outer(medias_rangos, diferencia_critica / 2, "+")
lim_inf <- outer(medias_rangos, diferencia_critica / 2, "-")
# Esta visualización es más compleja de dibujar directamente en un gráfico simple.
# Generalmente, se representan las medias con barras de error indicando la diferencia crítica.
# Aquí, solo mostramos los límites conceptuales.
cat("\nLímites de no significancia (aproximados):\n")
##
## Límites de no significancia (aproximados):
for (i in 1:n_tratamientos) {
cat("Método", i, ": [", round(lim_inf[i, 1], 2), ",", round(lim_sup[i, 1], 2), "]\n")
}
## Método 1 : [ 1.76 , 2.74 ]
## Método 2 : [ 2.39 , 3.36 ]
## Método 3 : [ 1.14 , 2.11 ]
Interpretación:
Se comparan las diferencias en los rangos promedio de cada par de métodos con la diferencia crítica. Si la diferencia absoluta excede la diferencia crítica, se concluye que esos dos métodos difieren significativamente en sus medianas. La “región de no significancia” se puede conceptualizar como un intervalo alrededor de la media del rango de cada grupo; si los intervalos de dos grupos se superponen, la diferencia no es significativa.
Después de la prueba de Friedman (Ejemplo 2 anterior), supongamos que se encontró una diferencia significativa. Ahora realizamos una prueba de Nemenyi (\(\alpha = 0.10\)).
Datos (sumas de rangos):
Supongamos que las sumas de rangos para las Marcas A, B y C fueron \(R_A = 11\), \(R_B = 16\), y \(R_C = 9\). El número de bloques (catadores) fue \(N = 6\), y el número de tratamientos (marcas) fue \(k = 3\).
Solución en R:
# Sumas de rangos
R_cafe <- c(11, 16, 9)
n_bloques_cafe <- 6
n_tratamientos_cafe <- 3
alfa_nemenyi_cafe <- 0.10
# Rangos promedio
R_promedio_cafe <- R_cafe / n_bloques_cafe
print(paste("Rangos promedio:", paste(round(R_promedio_cafe, 2), collapse = ", ")))
## [1] "Rangos promedio: 1.83, 2.67, 1.5"
# Diferencia crítica (aproximación normal)
z_critico_cafe <- qnorm(1 - alfa_nemenyi_cafe / 2)
diferencia_critica_cafe <- z_critico_cafe * sqrt(n_tratamientos_cafe * (n_tratamientos_cafe + 1) / (6 * n_bloques_cafe))
cat("Diferencia crítica (aproximada):", round(diferencia_critica_cafe, 2), "\n")
## Diferencia crítica (aproximada): 0.95
# Comparar las diferencias
diferencias_pares_cafe <- combn(R_promedio_cafe, 2)
nombres_pares_cafe <- combn(paste("Marca", LETTERS[1:n_tratamientos_cafe]), 2)
for (i in 1:ncol(diferencias_pares_cafe)) {
diff_abs <- abs(diferencias_pares_cafe[1, i] - diferencias_pares_cafe[2, i])
if (diff_abs > diferencia_critica_cafe) {
cat(nombres_pares_cafe[1, i], "vs", nombres_pares_cafe[2, i], ": Diferencia significativa (", round(diff_abs, 2), " > ", round(diferencia_critica_cafe, 2), ")\n")
} else {
cat(nombres_pares_cafe[1, i], "vs", nombres_pares_cafe[2, i], ": No hay diferencia significativa (", round(diff_abs, 2), " <= ", round(diferencia_critica_cafe, 2), ")\n")
}
}
## Marca A vs Marca B : No hay diferencia significativa ( 0.83 <= 0.95 )
## Marca A vs Marca C : No hay diferencia significativa ( 0.33 <= 0.95 )
## Marca B vs Marca C : Diferencia significativa ( 1.17 > 0.95 )
# Límites de no significancia (aproximados)
medias_rangos_cafe <- R_promedio_cafe
lim_sup_cafe <- outer(medias_rangos_cafe, diferencia_critica_cafe / 2, "+")
lim_inf_cafe <- outer(medias_rangos_cafe, diferencia_critica_cafe / 2, "-")
cat("\nLímites de no significancia (aproximados):\n")
##
## Límites de no significancia (aproximados):
for (i in 1:n_tratamientos_cafe) {
cat("Marca", LETTERS[i], ": [", round(lim_inf_cafe[i, 1], 2), ",", round(lim_sup_cafe[i, 1], 2), "]\n")
}
## Marca A : [ 1.36 , 2.31 ]
## Marca B : [ 2.19 , 3.14 ]
## Marca C : [ 1.03 , 1.97 ]
Interpretación: Similar al Ejemplo 1, se comparan las diferencias en los rangos promedio de las marcas de café con la diferencia crítica.
Después de la prueba de Friedman (Ejemplo 3 anterior), supongamos que se encontró una diferencia significativa. Ahora realizamos una prueba de Nemenyi (\(\alpha = 0.05\)).
Datos (sumas de rangos):
Supongamos que las sumas de rangos para los Algoritmos 1, 2 y 3 fueron \(R_1 = 8\), \(R_2 = 13\), y \(R_3 = 4\). El número de bloques (conjuntos de datos) fue \(N = 5\), y el número de tratamientos (algoritmos) fue \(k = 3\).
Solución en R:
# Sumas de rangos
R_algoritmos <- c(8, 13, 4)
n_bloques_algoritmos <- 5
n_tratamientos_algoritmos <- 3
alfa_nemenyi_algoritmos <- 0.05
# Rangos promedio
R_promedio_algoritmos <- R_algoritmos / n_bloques_algoritmos
print(paste("Rangos promedio:", paste(round(R_promedio_algoritmos, 2), collapse = ", ")))
## [1] "Rangos promedio: 1.6, 2.6, 0.8"
# Diferencia crítica (aproximación normal)
z_critico_algoritmos <- qnorm(1 - alfa_nemenyi_algoritmos / 2)
diferencia_critica_algoritmos <- z_critico_algoritmos * sqrt(n_tratamientos_algoritmos * (n_tratamientos_algoritmos + 1) / (6 * n_bloques_algoritmos))
cat("Diferencia crítica (aproximada):", round(diferencia_critica_algoritmos, 2), "\n")
## Diferencia crítica (aproximada): 1.24
# Comparar las diferencias
diferencias_pares_algoritmos <- combn(R_promedio_algoritmos, 2)
nombres_pares_algoritmos <- combn(paste("Algoritmo", 1:n_tratamientos_algoritmos), 2)
for (i in 1:ncol(diferencias_pares_algoritmos)) {
diff_abs <- abs(diferencias_pares_algoritmos[1, i] - diferencias_pares_algoritmos[2, i])
if (diff_abs > diferencia_critica_algoritmos) {
cat(nombres_pares_algoritmos[1, i], "vs", nombres_pares_algoritmos[2, i], ": Diferencia significativa (", round(diff_abs, 2), " > ", round(diferencia_critica_algoritmos, 2), ")\n")
} else {
cat(nombres_pares_algoritmos[1, i], "vs", nombres_pares_algoritmos[2, i], ": No hay diferencia significativa (", round(diff_abs, 2), " <= ", round(diferencia_critica_algoritmos, 2), ")\n")
}
}
## Algoritmo 1 vs Algoritmo 2 : No hay diferencia significativa ( 1 <= 1.24 )
## Algoritmo 1 vs Algoritmo 3 : No hay diferencia significativa ( 0.8 <= 1.24 )
## Algoritmo 2 vs Algoritmo 3 : Diferencia significativa ( 1.8 > 1.24 )
# Límites de no significancia (aproximados)
medias_rangos_algoritmos <- R_promedio_algoritmos
lim_sup_algoritmos <- outer(medias_rangos_algoritmos, diferencia_critica_algoritmos / 2, "+")
lim_inf_algoritmos <- outer(medias_rangos_algoritmos, diferencia_critica_algoritmos / 2, "-")
cat("\nLímites de no significancia (aproximados):\n")
##
## Límites de no significancia (aproximados):
for (i in 1:n_tratamientos_algoritmos) {
cat("Algoritmo", i, ": [", round(lim_inf_algoritmos[i, 1], 2), ",", round(lim_sup_algoritmos[i, 1], 2), "]\n")
}
## Algoritmo 1 : [ 0.98 , 2.22 ]
## Algoritmo 2 : [ 1.98 , 3.22 ]
## Algoritmo 3 : [ 0.18 , 1.42 ]
Interpretación: Se comparan las diferencias en los rangos promedio de los algoritmos con la diferencia crítica.
Después de la prueba de Friedman (Ejemplo 4 anterior), supongamos que se encontró una diferencia significativa. Ahora realizamos una prueba de Nemenyi (\(\alpha = 0.01\)).
Datos (sumas de rangos):
Supongamos que las sumas de rangos para los Diseños A, B, C y D fueron \(R_A = 12\), \(R_B = 18\), \(R_C = 9\), y \(R_D = 21\). El número de bloques (usuarios) fue \(N = 7\), y el número de tratamientos (diseños) fue \(k = 4\).
Solución en R:
# Sumas de rangos
R_interfaz <- c(12, 18, 9, 21)
n_bloques_interfaz <- 7
n_tratamientos_interfaz <- 4
alfa_nemenyi_interfaz <- 0.01
# Rangos promedio
R_promedio_interfaz <- R_interfaz / n_bloques_interfaz
print(paste("Rangos promedio:", paste(round(R_promedio_interfaz, 2), collapse = ", ")))
## [1] "Rangos promedio: 1.71, 2.57, 1.29, 3"
# Diferencia crítica (aproximación normal)
z_critico_interfaz <- qnorm(1 - alfa_nemenyi_interfaz / 2)
diferencia_critica_interfaz <- z_critico_interfaz * sqrt(n_tratamientos_interfaz * (n_tratamientos_interfaz + 1) / (6 * n_bloques_interfaz))
cat("Diferencia crítica (aproximada):", round(diferencia_critica_interfaz, 2), "\n")
## Diferencia crítica (aproximada): 1.78
# Comparar las diferencias
diferencias_pares_interfaz <- combn(R_promedio_interfaz, 2)
nombres_pares_interfaz <- combn(paste("Diseño", LETTERS[1:n_tratamientos_interfaz]), 2)
for (i in 1:ncol(diferencias_pares_interfaz)) {
diff_abs <- abs(diferencias_pares_interfaz[1, i] - diferencias_pares_interfaz[2, i])
if (diff_abs > diferencia_critica_interfaz) {
cat(nombres_pares_interfaz[1, i], "vs", nombres_pares_interfaz[2, i], ": Diferencia significativa (", round(diff_abs, 2), " > ", round(diferencia_critica_interfaz, 2), ")\n")
} else {
cat(nombres_pares_interfaz[1, i], "vs", nombres_pares_interfaz[2, i], ": No hay diferencia significativa (", round(diff_abs, 2), " <= ", round(diferencia_critica_interfaz, 2), ")\n")
}
}
## Diseño A vs Diseño B : No hay diferencia significativa ( 0.86 <= 1.78 )
## Diseño A vs Diseño C : No hay diferencia significativa ( 0.43 <= 1.78 )
## Diseño A vs Diseño D : No hay diferencia significativa ( 1.29 <= 1.78 )
## Diseño B vs Diseño C : No hay diferencia significativa ( 1.29 <= 1.78 )
## Diseño B vs Diseño D : No hay diferencia significativa ( 0.43 <= 1.78 )
## Diseño C vs Diseño D : No hay diferencia significativa ( 1.71 <= 1.78 )
# Límites de no significancia (aproximados)
medias_rangos_interfaz <- R_promedio_interfaz
lim_sup_interfaz <- outer(medias_rangos_interfaz, diferencia_critica_interfaz / 2, "+")
lim_inf_interfaz <- outer(medias_rangos_interfaz, diferencia_critica_interfaz / 2, "-")
cat("\nLímites de no significancia (aproximados):\n")
##
## Límites de no significancia (aproximados):
for (i in 1:n_tratamientos_interfaz) {
cat("Diseño", LETTERS[i], ": [", round(lim_inf_interfaz[i, 1], 2), ",", round(lim_sup_interfaz[i, 1], 2), "]\n")
}
## Diseño A : [ 0.83 , 2.6 ]
## Diseño B : [ 1.68 , 3.46 ]
## Diseño C : [ 0.4 , 2.17 ]
## Diseño D : [ 2.11 , 3.89 ]
Interpretación:
Se comparan las diferencias en los rangos promedio de cada par de diseños de interfaz con la diferencia crítica. Si la diferencia absoluta excede la diferencia crítica, se concluye que esos dos diseños difieren significativamente en su preferencia mediana.
El coeficiente de correlación de Spearman (rs) es una medida no paramétrica de la fuerza y la dirección de la asociación entre dos variables que han sido ordenadas por rangos. A diferencia del coeficiente de correlación de Pearson, no asume una relación lineal entre las variables ni requiere que los datos estén distribuidos normalmente. Se basa en la correlación de Pearson calculada sobre los rangos de las variables.
El procedimiento para calcular el coeficiente de Spearman es el siguiente:
Ordenar los datos: Para cada variable, se asignan rangos a las observaciones, ordenándolas de menor a mayor. En caso de empates, se asigna el rango promedio.
Calcular las diferencias en los rangos: Para cada par de observaciones, se calcula la diferencia (\(d_i\)) entre el rango de la primera variable y el rango de la segunda variable.
Calcular el coeficiente de Spearman: El coeficiente de Spearman (\(r_s\)) se calcula mediante la siguiente fórmula:
\[ r_s = 1 - \frac{6 \sum_{i=1}^{n} d_i^2}{n(n^2 - 1)} \]
Donde:
El coeficiente de Spearman varía entre -1 y +1. Un valor de +1 indica una correlación monótona perfecta positiva (a medida que una variable aumenta, la otra también lo hace, no necesariamente de forma lineal), -1 indica una correlación monótona perfecta negativa (a medida que una variable aumenta, la otra disminuye), y 0 indica que no hay una tendencia monótona.
Para probar la significancia del coeficiente de Spearman (es decir, si la correlación observada es significativamente diferente de cero en la población), se puede realizar una prueba de hipótesis. La hipótesis nula (\(H_0\)) es que no hay correlación monótona en la población (\(\rho_s = 0\)). La hipótesis alternativa (\(H_1\)) puede ser unilateral (\(\rho_s > 0\) o \(\rho_s < 0\)) o bilateral (\(\rho_s \neq 0\)).
El p-valor es la probabilidad de obtener un coeficiente de Spearman tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera.
Para tamaños de muestra pequeños (\(n \leq 30\)), se utilizan tablas especiales para determinar el p-valor asociado con el valor de \(r_s\).
Para tamaños de muestra grandes (\(n > 30\)), el estadístico \(t\) calculado como:
\[ t = r_s \sqrt{\frac{n-2}{1 - r_s^2}} \]
sigue aproximadamente una distribución t de Student con \(n-2\) grados de libertad bajo la hipótesis nula. El p-valor se calcula entonces utilizando esta distribución t.
Interpretación del p-valor:
Se registraron las horas de estudio y las calificaciones obtenidas en un examen para 10 estudiantes. Se desea determinar si existe una correlación monótona significativa entre estas dos variables (\(\alpha = 0.05\)).
Datos:
Estudiante | Horas de Estudio | Calificación |
---|---|---|
1 | 5 | 78 |
2 | 2 | 65 |
3 | 8 | 90 |
4 | 3 | 70 |
5 | 6 | 82 |
6 | 1 | 60 |
7 | 7 | 85 |
8 | 4 | 75 |
9 | 9 | 95 |
10 | 4 | 72 |
Solución en R:
# Datos de horas de estudio y calificación
horas_estudio <- c(5, 2, 8, 3, 6, 1, 7, 4, 9, 4)
calificacion <- c(78, 65, 90, 70, 82, 60, 85, 75, 95, 72)
# Calcular el coeficiente de Spearman y el p-valor
prueba_spearman <- cor.test(horas_estudio, calificacion, method = "spearman")
## Warning in cor.test.default(horas_estudio, calificacion, method = "spearman"):
## Cannot compute exact p-value with ties
print(prueba_spearman)
##
## Spearman's rank correlation rho
##
## data: horas_estudio and calificacion
## S = 0.50076, p-value = 3.698e-10
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.9969651
# Nivel de significancia
alfa_spearman <- 0.05
# Para visualizar la región de rechazo (aproximación t para n > 30, aquí n = 10)
# Usaremos los valores críticos de t para 10 - 2 = 8 grados de libertad
valor_critico_t_spearman <- qt(1 - alfa_spearman / 2, df = 8)
cat("Valor crítico de t (bilateral):", valor_critico_t_spearman, "\n")
## Valor crítico de t (bilateral): 2.306004
# No es directo dibujar la "región" en un gráfico de dispersión.
# La región de rechazo se aplica al estadístico t (o al rs basado en tablas).
# Un gráfico de dispersión con una línea de tendencia no paramétrica (como loess)
# puede ayudar a visualizar la relación monótona.
plot(horas_estudio, calificacion, main = "Horas de Estudio vs. Calificación",
xlab = "Horas de Estudio", ylab = "Calificación")
abline(lm(calificacion ~ horas_estudio), col = "blue", lty = 2) # Línea de regresión lineal (solo para referencia)
lines(lowess(horas_estudio, calificacion), col = "red", lwd = 2) # Línea de tendencia no paramétrica
legend("topleft", legend = c("Tendencia Lineal", "Tendencia Monótona"),
col = c("blue", "red"), lty = c(2, 1), lwd = c(1, 2))
Interpretación:
El resultado de cor.test
proporcionará el coeficiente de
Spearman (sample corr) y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula y concluiremos que existe una correlación monótona significativa
entre las horas de estudio y la calificación del examen. La gráfica de
dispersión con la línea de tendencia no paramétrica ayuda a visualizar
la naturaleza de la relación.
Ocho jueces clasificaron un producto en una escala del 1 al 10. Se desea determinar si existe una concordancia monótona significativa entre las clasificaciones de los dos jueces (\(\alpha = 0.01\)).
Datos:
Juez | Clasificación 1 | Clasificación 2 |
---|---|---|
1 | 7 | 8 |
2 | 6 | 7 |
3 | 8 | 8 |
4 | 5 | 6 |
5 | 9 | 7 |
6 | 7 | 9 |
7 | 6 | 8 |
8 | 8 | 9 |
Solución en R:
# Datos de clasificaciones de los dos jueces
clasificacion1 <- c(7, 6, 8, 5, 9, 7, 6, 8)
clasificacion2 <- c(8, 7, 8, 6, 7, 9, 8, 9)
# Calcular el coeficiente de Spearman y el p-valor
prueba_spearman_jueces <- cor.test(clasificacion1, clasificacion2, method = "spearman")
## Warning in cor.test.default(clasificacion1, clasificacion2, method =
## "spearman"): Cannot compute exact p-value with ties
print(prueba_spearman_jueces)
##
## Spearman's rank correlation rho
##
## data: clasificacion1 and clasificacion2
## S = 51.768, p-value = 0.348
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.3837161
# Nivel de significancia
alfa_spearman_jueces <- 0.01
# Valor crítico de t para 8 - 2 = 6 grados de libertad
valor_critico_t_jueces <- qt(1 - alfa_spearman_jueces / 2, df = 6)
cat("Valor crítico de t (bilateral):", valor_critico_t_jueces, "\n")
## Valor crítico de t (bilateral): 3.707428
# Gráfico de dispersión
plot(clasificacion1, clasificacion2, main = "Clasificación Juez 1 vs. Clasificación Juez 2",
xlab = "Clasificación Juez 1", ylab = "Clasificación Juez 2")
lines(lowess(clasificacion1, clasificacion2), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que existe una concordancia monótona significativa entre las clasificaciones de los dos jueces.
Se midió la concentración de un contaminante en 12 sitios y se calculó el índice de diversidad de especies en cada sitio. Se desea probar si existe una correlación monótona negativa significativa entre la concentración del contaminante y la diversidad de especies (\(\alpha = 0.05\), prueba unilateral).
Datos:
Sitio | Contaminante | Diversidad |
---|---|---|
1 | 1.5 | 4.2 |
2 | 2.0 | 3.8 |
3 | 1.0 | 4.5 |
4 | 2.5 | 3.5 |
5 | 0.5 | 4.8 |
6 | 3.0 | 3.0 |
7 | 1.8 | 4.0 |
8 | 2.2 | 3.7 |
9 | 0.8 | 4.6 |
10 | 2.8 | 3.2 |
11 | 1.2 | 4.3 |
12 | 3.5 | 2.8 |
Solución en R:
# Datos de contaminante y diversidad
contaminante <- c(1.5, 2.0, 1.0, 2.5, 0.5, 3.0, 1.8, 2.2, 0.8, 2.8, 1.2, 3.5)
diversidad <- c(4.2, 3.8, 4.5, 3.5, 4.8, 3.0, 4.0, 3.7, 4.6, 3.2, 4.3, 2.8)
# Calcular el coeficiente de Spearman y el p-valor (prueba unilateral "less")
prueba_spearman_contaminante <- cor.test(contaminante, diversidad, method = "spearman", alternative = "less")
print(prueba_spearman_contaminante)
##
## Spearman's rank correlation rho
##
## data: contaminante and diversidad
## S = 572, p-value < 2.2e-16
## alternative hypothesis: true rho is less than 0
## sample estimates:
## rho
## -1
# Nivel de significancia
alfa_spearman_contaminante <- 0.05
# Valor crítico de t para 12 - 2 = 10 grados de libertad (unilateral)
valor_critico_t_contaminante <- qt(alfa_spearman_contaminante, df = 10)
cat("Valor crítico de t (unilateral, less):", valor_critico_t_contaminante, "\n")
## Valor crítico de t (unilateral, less): -1.812461
# Gráfico de dispersión
plot(contaminante, diversidad, main = "Contaminante vs. Diversidad de Especies",
xlab = "Concentración del Contaminante", ylab = "Índice de Diversidad")
lines(lowess(contaminante, diversidad), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que existe una correlación monótona negativa significativa entre la concentración del contaminante y la diversidad de especies.
Se registraron la altitud y la temperatura promedio anual en 15 localidades. Se desea probar si existe una correlación monótona negativa significativa entre la altitud y la temperatura (\(\alpha = 0.01\), prueba unilateral).
Datos:
Localidad | Altitud (m) | Temperatura (°C) |
---|---|---|
1 | 100 | 25 |
2 | 500 | 22 |
3 | 1500 | 15 |
4 | 200 | 24 |
5 | 1000 | 18 |
6 | 300 | 23 |
7 | 1800 | 13 |
8 | 700 | 20 |
9 | 1200 | 16 |
10 | 400 | 22.5 |
11 | 1600 | 14.5 |
12 | 900 | 19 |
13 | 1100 | 17 |
14 | 2000 | 12 |
15 | 600 | 21 |
Solución en R:
# Datos de altitud y temperatura
altitud <- c(100, 500, 1500, 200, 1000, 300, 1800, 700, 1200, 400, 1600, 900, 1100, 2000, 600)
temperatura <- c(25, 22, 15, 24, 18, 23, 13, 20, 16, 22.5, 14.5, 19, 17, 12, 21)
# Calcular el coeficiente de Spearman y el p-valor (prueba unilateral "less")
prueba_spearman_altitud <- cor.test(altitud, temperatura, method = "spearman", alternative = "less")
print(prueba_spearman_altitud)
##
## Spearman's rank correlation rho
##
## data: altitud and temperatura
## S = 1120, p-value < 2.2e-16
## alternative hypothesis: true rho is less than 0
## sample estimates:
## rho
## -1
# Nivel de significancia
alfa_spearman_altitud <- 0.01
# Valor crítico de t para 15 - 2 = 13 grados de libertad (unilateral)
valor_critico_t_altitud <- qt(alfa_spearman_altitud, df = 13)
cat("Valor crítico de t (unilateral, less):", valor_critico_t_altitud, "\n")
## Valor crítico de t (unilateral, less): -2.650309
# Gráfico de dispersión
plot(altitud, temperatura, main = "Altitud vs. Temperatura Promedio",
xlab = "Altitud (m)", ylab = "Temperatura (°C)")
lines(lowess(altitud, temperatura), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que existe una correlación monótona negativa significativa entre la altitud y la temperatura promedio.
El coeficiente de tau de Kendall (\(\tau\)) es una medida no paramétrica de la correlación de rango entre dos variables. Al igual que el coeficiente de Spearman, evalúa la fuerza y la dirección de la relación monótona entre las variables, pero utiliza una lógica diferente basada en el número de pares concordantes y discordantes.
El procedimiento para calcular el coeficiente de Kendall (\(\tau_a\)) es el siguiente (existen variantes como \(\tau_b\) que corrigen para empates):
Ordenar los datos por una variable: Se ordenan los pares de observaciones según los valores de una de las variables (por ejemplo, la primera).
Contar pares concordantes y discordantes: Se examinan todos los pares de observaciones. Un par es concordante si el orden de la segunda variable es el mismo que el orden de la primera variable para ese par en relación con la observación de referencia. Un par es discordante si el orden es inverso.
Calcular Tau-a: El coeficiente \(\tau_a\) se calcula como:
\[ \tau_a = \frac{n_c - n_d}{n(n-1)/2} \]
Donde:
Para corregir por empates, se utilizan otras versiones como \(\tau_b\). En R, la función
cor.test
con method = "kendall"
calcula \(\tau_b\).
El coeficiente \(\tau\) varía entre -1 y +1, con la misma interpretación general que el coeficiente de Spearman (correlación monótona perfecta positiva, negativa o ausencia de tendencia).
Para probar la significancia del coeficiente de Kendall (es decir, si la correlación observada es significativamente diferente de cero en la población), se realiza una prueba de hipótesis. La hipótesis nula (\(H_0\)) es que no hay correlación monótona en la población (\(\tau = 0\)). La hipótesis alternativa (\(H_1\)) puede ser unilateral (\(\tau > 0\) o \(\tau < 0\)) o bilateral (\(\tau \neq 0\)).
El p-valor es la probabilidad de obtener un coeficiente de Kendall tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera.
Para tamaños de muestra grandes (\(n > 10\)), el estadístico \(Z\) se aproxima a una distribución normal estándar:
\[ Z = \frac{\tau}{\sqrt{\frac{2(2n+5)}{9n(n-1)}}} \]
El p-valor se calcula entonces utilizando la distribución normal estándar. Para pruebas unilaterales, se usa la probabilidad de una cola; para pruebas bilaterales, se usa la probabilidad de ambas colas.
Interpretación del p-valor:
Se registraron los años de experiencia laboral y el salario anual (en miles de dólares) para 10 empleados. Se desea determinar si existe una correlación monótona significativa entre estas dos variables (\(\alpha = 0.05\)).
Datos:
Empleado | Experiencia (años) | Salario (miles $) |
---|---|---|
1 | 2 | 45 |
2 | 5 | 60 |
3 | 1 | 40 |
4 | 8 | 75 |
5 | 3 | 50 |
6 | 10 | 80 |
7 | 4 | 55 |
8 | 6 | 65 |
9 | 7 | 70 |
10 | 9 | 85 |
Solución en R:
# Datos de experiencia y salario
experiencia <- c(2, 5, 1, 8, 3, 10, 4, 6, 7, 9)
salario <- c(45, 60, 40, 75, 50, 80, 55, 65, 70, 85)
# Calcular el coeficiente de Kendall y el p-valor
prueba_kendall <- cor.test(experiencia, salario, method = "kendall")
print(prueba_kendall)
##
## Kendall's rank correlation tau
##
## data: experiencia and salario
## T = 44, p-value = 5.511e-06
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.9555556
# Nivel de significancia
alfa_kendall <- 0.05
# Para visualizar la región de rechazo (aproximación normal)
z_critico_kendall <- qnorm(1 - alfa_kendall / 2)
cat("Valor crítico de Z (bilateral):", z_critico_kendall, "\n")
## Valor crítico de Z (bilateral): 1.959964
# Visualización de la región de rechazo
x_norm <- seq(-3, 3, length.out = 200)
y_norm <- dnorm(x_norm)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Kendall)")
abline(v = c(-z_critico_kendall, z_critico_kendall), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_kendall], -z_critico_kendall), c(0, y_norm[x_norm <= -z_critico_kendall], 0), col = "salmon", border = NA)
polygon(c(z_critico_kendall, x_norm[x_norm >= z_critico_kendall], Inf), c(0, y_norm[x_norm >= z_critico_kendall], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kendall$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(prueba_kendall$statistic, 3)),
col = "blue", lty = 2)
# Gráfico de dispersión
plot(experiencia, salario, main = "Experiencia vs. Salario",
xlab = "Experiencia (años)", ylab = "Salario (miles $)")
lines(lowess(experiencia, salario), col = "red", lwd = 2)
Interpretación:
El resultado de cor.test
proporcionará el coeficiente de
tau de Kendall (tau) y el p-valor. Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis
nula y concluiremos que existe una correlación monótona significativa
entre la experiencia laboral y el salario. La gráfica muestra la
distribución normal estándar y la región de rechazo para una prueba
bilateral.
Se pidió a 8 clientes que calificaran la calidad de un producto y su nivel de satisfacción en una escala del 1 al 10. Se desea determinar si existe una correlación monótona significativa entre estas dos variables (\(\alpha = 0.01\)).
Datos:
Cliente | Calidad | Satisfacción |
---|---|---|
1 | 7 | 8 |
2 | 6 | 7 |
3 | 8 | 9 |
4 | 5 | 6 |
5 | 9 | 7 |
6 | 7 | 9 |
7 | 6 | 8 |
8 | 8 | 9 |
Solución en R:
# Datos de calidad y satisfacción
calidad <- c(7, 6, 8, 5, 9, 7, 6, 8)
satisfaccion <- c(8, 7, 9, 6, 7, 9, 8, 9)
# Calcular el coeficiente de Kendall y el p-valor
prueba_kendall_satisfaccion <- cor.test(calidad, satisfaccion, method = "kendall")
## Warning in cor.test.default(calidad, satisfaccion, method = "kendall"): Cannot
## compute exact p-value with ties
print(prueba_kendall_satisfaccion)
##
## Kendall's rank correlation tau
##
## data: calidad and satisfaccion
## z = 1.4544, p-value = 0.1458
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.4587317
# Nivel de significancia
alfa_kendall_satisfaccion <- 0.01
# Valor crítico de Z
z_critico_satisfaccion <- qnorm(1 - alfa_kendall_satisfaccion / 2)
cat("Valor crítico de Z (bilateral):", z_critico_satisfaccion, "\n")
## Valor crítico de Z (bilateral): 2.575829
# Visualización de la región de rechazo
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Kendall)")
abline(v = c(-z_critico_satisfaccion, z_critico_satisfaccion), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_satisfaccion], -z_critico_satisfaccion), c(0, y_norm[x_norm <= -z_critico_satisfaccion], 0), col = "salmon", border = NA)
polygon(c(z_critico_satisfaccion, x_norm[x_norm >= z_critico_satisfaccion], Inf), c(0, y_norm[x_norm >= z_critico_satisfaccion], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kendall_satisfaccion$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(prueba_kendall_satisfaccion$statistic, 3)),
col = "blue", lty = 2)
# Gráfico de dispersión
plot(calidad, satisfaccion, main = "Calidad vs. Satisfacción del Cliente",
xlab = "Calidad", ylab = "Satisfacción")
lines(lowess(calidad, satisfaccion), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que existe una correlación monótona significativa entre la calidad del producto y la satisfacción del cliente.
Se administraron diferentes dosis de un fármaco a 12 pacientes y se midió su respuesta (en una escala del 1 al 10). Se desea probar si existe una correlación monótona positiva significativa entre la dosis y la respuesta (\(\alpha = 0.05\)).
Datos:
Paciente | Dosis (mg) | Respuesta |
---|---|---|
1 | 10 | 3 |
2 | 20 | 4 |
3 | 15 | 5 |
4 | 25 | 6 |
5 | 5 | 2 |
6 | 30 | 7 |
7 | 18 | 4 |
8 | 22 | 5 |
9 | 12 | 3 |
10 | 28 | 6 |
11 | 16 | 5 |
12 | 35 | 8 |
Solución en R:
# Datos de dosis y respuesta
dosis <- c(10, 20, 15, 25, 5, 30, 18, 22, 12, 28, 16, 35)
respuesta <- c(3, 4, 5, 6, 2, 7, 4, 5, 3, 6, 5, 8)
# Calcular el coeficiente de Kendall y el p-valor (prueba unilateral "greater")
prueba_kendall_dosis <- cor.test(dosis, respuesta, method = "kendall", alternative = "greater")
## Warning in cor.test.default(dosis, respuesta, method = "kendall", alternative =
## "greater"): Cannot compute exact p-value with ties
print(prueba_kendall_dosis)
##
## Kendall's rank correlation tau
##
## data: dosis and respuesta
## z = 3.623, p-value = 0.0001456
## alternative hypothesis: true tau is greater than 0
## sample estimates:
## tau
## 0.8263342
# Nivel de significancia
alfa_kendall_dosis <- 0.05
# Valor crítico de Z (unilateral)
z_critico_dosis <- qnorm(1 - alfa_kendall_dosis)
cat("Valor crítico de Z (unilateral, greater):", z_critico_dosis, "\n")
## Valor crítico de Z (unilateral, greater): 1.644854
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Kendall, Unilateral)")
abline(v = z_critico_dosis, col = "red", lty = 2)
polygon(c(z_critico_dosis, x_norm[x_norm >= z_critico_dosis], Inf), c(0, y_norm[x_norm >= z_critico_dosis], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kendall_dosis$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(prueba_kendall_dosis$statistic, 3)),
col = "blue", lty = 2)
# Gráfico de dispersión
plot(dosis, respuesta, main = "Dosis del Fármaco vs. Respuesta del Paciente",
xlab = "Dosis (mg)", ylab = "Respuesta")
lines(lowess(dosis, respuesta), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.05\), rechazaremos la hipótesis nula y concluiremos que existe una correlación monótona positiva significativa entre la dosis del fármaco y la respuesta del paciente.
Se registraron los años de antigüedad y el número de horas de inactividad durante el último año para 15 equipos idénticos. Se desea probar si existe una correlación monótona positiva significativa entre la antigüedad y el tiempo de inactividad (\(\alpha = 0.01\)).
Datos:
Equipo | Antigüedad (años) | Inactividad (horas) |
---|---|---|
1 | 1 | 5 |
2 | 3 | 12 |
3 | 5 | 20 |
4 | 2 | 8 |
5 | 4 | 15 |
6 | 6 | 25 |
7 | 1.5 | 7 |
8 | 3.5 | 14 |
9 | 5.5 | 22 |
10 | 2.5 | 10 |
11 | 4.5 | 18 |
12 | 6.5 | 27 |
13 | 2.8 | 11 |
14 | 4.8 | 19 |
15 | 5.8 | 23 |
Solución en R:
# Datos de antigüedad e inactividad
antiguedad <- c(1, 3, 5, 2, 4, 6, 1.5, 3.5, 5.5, 2.5, 4.5, 6.5, 2.8, 4.8, 5.8)
inactividad <- c(5, 12, 20, 8, 15, 25, 7, 14, 22, 10, 18, 27, 11, 19, 23)
# Calcular el coeficiente de Kendall y el p-valor (prueba unilateral "greater")
prueba_kendall_antiguedad <- cor.test(antiguedad, inactividad, method = "kendall", alternative = "greater")
print(prueba_kendall_antiguedad)
##
## Kendall's rank correlation tau
##
## data: antiguedad and inactividad
## T = 105, p-value = 7.647e-13
## alternative hypothesis: true tau is greater than 0
## sample estimates:
## tau
## 1
# Nivel de significancia
alfa_kendall_antiguedad <- 0.01
# Valor crítico de Z (unilateral)
z_critico_antiguedad <- qnorm(1 - alfa_kendall_antiguedad)
cat("Valor crítico de Z (unilateral, greater):", z_critico_antiguedad, "\n")
## Valor crítico de Z (unilateral, greater): 2.326348
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Kendall, Unilateral)")
abline(v = z_critico_antiguedad, col = "red", lty = 2)
polygon(c(z_critico_antiguedad, x_norm[x_norm >= z_critico_antiguedad], Inf), c(0, y_norm[x_norm >= z_critico_antiguedad], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = prueba_kendall_antiguedad$statistic, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(prueba_kendall_antiguedad$statistic, 3)),
col = "blue", lty = 2)
# Gráfico de dispersión
plot(antiguedad, inactividad, main = "Antigüedad del Equipo vs. Tiempo de Inactividad",
xlab = "Antigüedad (años)", ylab = "Inactividad (horas)")
lines(lowess(antiguedad, inactividad), col = "red", lwd = 2)
Interpretación:
Si el p-valor es menor que \(\alpha = 0.01\), rechazaremos la hipótesis nula y concluiremos que existe una correlación monótona positiva significativa entre la antigüedad del equipo y su tiempo de inactividad.
El coeficiente Kappa de Cohen (\(\kappa\)) es una medida estadística que evalúa el acuerdo entre dos evaluadores (o métodos de clasificación) que clasifican los mismos objetos en categorías mutuamente exclusivas. Corrige el acuerdo que podría esperarse por azar.
El coeficiente Kappa se calcula de la siguiente manera:
\[ \kappa = \frac{P_o - P_e}{1 - P_e} \]
Donde: - \(P_o\) es la proporción de acuerdo observado (la suma de las frecuencias en la diagonal principal de la tabla de contingencia, dividida por el número total de observaciones). - \(P_e\) es la proporción de acuerdo esperado por azar. Se calcula sumando los productos de las proporciones marginales para cada categoría. Para una tabla de \(r \times r\):
\[ P_e = \sum_{i=1}^{r} P_{i.} \times P_{.i} \]
Donde \(P_{i.}\) es la proporción marginal de la fila \(i\) y \(P_{.i}\) es la proporción marginal de la columna \(i\).
El valor de \(\kappa\) varía entre -1 y +1: - \(\kappa = 1\) indica un acuerdo perfecto. - \(\kappa = 0\) indica un acuerdo igual al que se esperaría por azar. - \(\kappa < 0\) indica un acuerdo menor del que se esperaría por azar (lo cual es raro).
Para probar la significancia del coeficiente Kappa (es decir, si el acuerdo observado es significativamente diferente del acuerdo esperado por azar en la población), se realiza una prueba de hipótesis. La hipótesis nula (\(H_0\)) es que el acuerdo entre los evaluadores es solo por azar (\(\kappa = 0\)). La hipótesis alternativa (\(H_1\)) es que el acuerdo es mayor que el azar (\(\kappa > 0\), generalmente se considera una prueba unilateral). También puede ser bilateral (\(\kappa \neq 0\)).
El p-valor se calcula utilizando el estadístico de prueba y su distribución bajo la hipótesis nula. Para muestras grandes, el estadístico \(Z\) se aproxima a una distribución normal estándar:
\[ Z = \frac{\kappa}{\sqrt{\frac{P_o(1 - P_o)}{N(1 - P_e)^2}}} \]
Donde \(N\) es el número total de observaciones. El p-valor se calcula entonces utilizando la distribución normal estándar.
Interpretación del p-valor:
Dos radiólogos diagnosticaron independientemente a 100 pacientes con respecto a la presencia de una condición médica (Presente/Ausente). Se desea evaluar el acuerdo entre sus diagnósticos (\(\alpha = 0.05\)).
Tabla de Contingencia:
Radiólogo 2: Presente | Radiólogo 2: Ausente | Total | |
---|---|---|---|
Radiólogo 1: Presente | 45 | 5 | 50 |
Radiólogo 1: Ausente | 10 | 40 | 50 |
Total | 55 | 45 | 100 |
Solución en R:
# ANÁLISIS DE CONFIABILIDAD INTER-EVALUADORES USANDO KAPPA DE COHEN
# 1. Creación de la matriz de confusión mejorada
tabla_radiologos <- matrix(c(45, 10,
5, 40),
nrow = 2, byrow = TRUE,
dimnames = list("Radiólogo A" = c("Positivo", "Negativo"),
"Radiólogo B" = c("Positivo", "Negativo")))
# Verificación de la tabla
if(any(dim(tabla_radiologos) != 2)) {
stop("Error: La tabla debe ser una matriz 2x2 para Kappa simple")
}
# 2. Cálculo del estadístico Kappa con manejo de errores
library(irr)
## Loading required package: lpSolve
tryCatch({
kappa_result <- kappa2(tabla_radiologos, weight = "unweighted")
# 3. Análisis de resultados con interpretación mejorada
alfa <- 0.05
kappa_value <- round(kappa_result$value, 3)
p_value <- format.pval(kappa_result$p.value, digits = 4, eps = 0.0001)
z_value <- round(kappa_result$statistic, 3)
# 4. Visualización profesional de resultados
cat("\n══════════════════════════════════════════════\n")
cat(" ANÁLISIS DE CONFIABILIDAD INTER-EVALUADORES\n")
cat("══════════════════════════════════════════════\n\n")
cat("Matriz de confusión:\n")
print(tabla_radiologos)
cat("\n")
cat("Estadístico Kappa de Cohen:\n")
cat("──────────────────────────────────────────────\n")
cat(sprintf("Valor de Kappa: %0.3f\n", kappa_value))
cat(sprintf("Error estándar: %0.3f\n", kappa_result$se))
cat(sprintf("Valor Z: %0.3f\n", z_value))
cat(sprintf("p-valor: %s\n\n", p_value))
# 5. Interpretación detallada
interpretacion_kappa <- if(kappa_value > 0.75) {
"Excelente acuerdo"
} else if(kappa_value > 0.6) {
"Buen acuerdo"
} else if(kappa_value > 0.4) {
"Acuerdo moderado"
} else if(kappa_value > 0.2) {
"Acuerdo mínimo"
} else {
"Acuerdo pobre o nulo"
}
cat("Interpretación:\n")
cat("──────────────────────────────────────────────\n")
if(kappa_result$p.value < alfa) {
cat(sprintf("Existe un acuerdo estadísticamente significativo (p = %s < α = 0.05)\n", p_value))
cat(sprintf("Grado de acuerdo: %s (Kappa = %0.3f)\n", interpretacion_kappa, kappa_value))
} else {
cat(sprintf("No se encontró acuerdo significativo (p = %s > α = 0.05)\n", p_value))
cat("El acuerdo observado puede deberse al azar\n")
}
# 6. Gráfico de visualización
if(requireNamespace("vcd", quietly = TRUE)) {
library(vcd)
agreementplot(tabla_radiologos, main = "Acuerdo entre Radiólogos")
} else {
warning("Paquete 'vcd' no instalado. Instálelo para visualización gráfica.")
}
}, error = function(e) {
cat("\nERROR en el cálculo de Kappa:\n")
cat(e$message, "\n")
cat("Verifique que:\n")
cat("- Los datos son una matriz 2x2 válida\n")
cat("- No hay celdas vacías o valores faltantes\n")
cat("- Los valores son conteos no negativos\n")
})
##
## ══════════════════════════════════════════════
## ANÁLISIS DE CONFIABILIDAD INTER-EVALUADORES
## ══════════════════════════════════════════════
##
## Matriz de confusión:
## Radiólogo B
## Radiólogo A Positivo Negativo
## Positivo 45 10
## Negativo 5 40
##
## Estadístico Kappa de Cohen:
## ──────────────────────────────────────────────
## Valor de Kappa: 0.000
## Valor Z: NaN
## p-valor: NA
##
## Interpretación:
## ──────────────────────────────────────────────
##
## ERROR en el cálculo de Kappa:
## missing value where TRUE/FALSE needed
## Verifique que:
## - Los datos son una matriz 2x2 válida
## - No hay celdas vacías o valores faltantes
## - Los valores son conteos no negativos
Interpretación: El valor de Kappa indica el nivel de acuerdo, y el p-valor de la prueba indica si este acuerdo es estadísticamente significativo.
Dos métodos automatizados clasificaron 150 imágenes en tres categorías (A, B, C). Se desea evaluar el acuerdo entre los métodos (\(\alpha = 0.01\)).
Tabla de Contingencia:
Método 2: A | Método 2: B | Método 2: C | Total | |
---|---|---|---|---|
Método 1: A | 50 | 10 | 5 | 65 |
Método 1: B | 15 | 40 | 10 | 65 |
Método 1: C | 5 | 10 | 5 | 20 |
Total | 70 | 60 | 20 | 150 |
Solución en R:
# ANÁLISIS DE CONCORDANCIA ENTRE MÉTODOS DE CLASIFICACIÓN
# 1. Creación de la matriz de confusión correcta
tabla_imagenes <- matrix(c(50, 10, 5,
15, 40, 10,
5, 10, 5),
nrow = 3, byrow = TRUE,
dimnames = list(Método1 = c("A", "B", "C"),
Método2 = c("A", "B", "C")))
# 2. Verificación de la tabla (CORRECCIÓN APLICADA AQUÍ)
if(!all(dim(tabla_imagenes) == c(3,3))) {
stop("Error: La tabla debe ser una matriz 3x3 para este análisis")
}
# 3. Cálculo del coeficiente Kappa para múltiples categorías
library(irr)
tryCatch({
# Usamos kappam.fleiss para múltiples categorías
kappa_result <- kappam.fleiss(tabla_imagenes)
# 4. Configuración de parámetros
alfa <- 0.01
kappa_value <- round(kappa_result$value, 3)
z_value <- round(kappa_result$statistic, 3)
p_value <- format.pval(kappa_result$p.value, digits = 4, eps = 0.0001)
# 5. Presentación de resultados
cat("\n══════════════════════════════════════════════\n")
cat(" ANÁLISIS DE CONCORDANCIA ENTRE MÉTODOS\n")
cat("══════════════════════════════════════════════\n\n")
cat("Tabla de contingencia:\n")
print(addmargins(tabla_imagenes)) # Muestra totales marginales
cat("\n")
cat("Estadístico Kappa de Fleiss (para múltiples categorías):\n")
cat("──────────────────────────────────────────────\n")
cat(sprintf("Valor de Kappa: %0.3f\n", kappa_value))
cat(sprintf("Valor Z: %0.3f\n", z_value))
cat(sprintf("p-valor: %s\n\n", p_value))
# 6. Interpretación detallada
interpretacion_kappa <- if(kappa_value > 0.8) {
"Concordancia casi perfecta"
} else if(kappa_value > 0.6) {
"Concordancia sustancial"
} else if(kappa_value > 0.4) {
"Concordancia moderada"
} else if(kappa_value > 0.2) {
"Concordancia ligera"
} else {
"Concordancia pobre"
}
cat("Interpretación:\n")
cat("──────────────────────────────────────────────\n")
if(kappa_result$p.value < alfa) {
cat(sprintf("Existe concordancia significativa (p = %s < α = 0.01)\n", p_value))
cat(sprintf("Grado de concordancia: %s (Kappa = %0.3f)\n", interpretacion_kappa, kappa_value))
} else {
cat(sprintf("No se encontró concordancia significativa (p = %s > α = 0.01)\n", p_value))
cat("La concordancia observada puede deberse al azar\n")
}
# 7. Visualización opcional
if(requireNamespace("vcd", quietly = TRUE)) {
library(vcd)
mosaic(tabla_imagenes, shade = TRUE,
main = "Concordancia entre Métodos de Clasificación",
labeling_args = list(set_varnames = c(Método1 = "Método 1", Método2 = "Método 2")))
} else {
warning("Para visualización gráfica, instale el paquete 'vcd'")
}
}, error = function(e) {
cat("\nERROR en el análisis:\n")
cat(e$message, "\n")
cat("Recomendaciones:\n")
cat("- Verifique que la matriz sea cuadrada (mismo número de categorías)\n")
cat("- Asegúrese que no haya celdas con valores negativos\n")
cat("- Compruebe que los totales marginales sean correctos\n")
cat("- Para matrices 3x3 o mayores, use kappam.fleiss() en lugar de kappa2()\n")
})
##
## ══════════════════════════════════════════════
## ANÁLISIS DE CONCORDANCIA ENTRE MÉTODOS
## ══════════════════════════════════════════════
##
## Tabla de contingencia:
## Método2
## Método1 A B C Sum
## A 50 10 5 65
## B 15 40 10 65
## C 5 10 5 20
## Sum 70 60 20 150
##
## Estadístico Kappa de Fleiss (para múltiples categorías):
## ──────────────────────────────────────────────
## Valor de Kappa: -0.200
## Valor Z: -1.078
## p-valor: 0.2812
##
## Interpretación:
## ──────────────────────────────────────────────
## No se encontró concordancia significativa (p = 0.2812 > α = 0.01)
## La concordancia observada puede deberse al azar
## Loading required package: grid
Dos evaluadores clínicos calificaron la severidad de una enfermedad en 80 pacientes utilizando una escala ordinal (Leve, Moderado, Severo). Se desea evaluar su acuerdo (\(\alpha = 0.05\)).
Tabla de Contingencia:
Evaluador 2: Leve | Evaluador 2: Moderado | Evaluador 2: Severo | Total | |
---|---|---|---|---|
Evaluador 1: Leve | 30 | 5 | 2 | 37 |
Evaluador 1: Moderado | 8 | 25 | 7 | 40 |
Evaluador 1: Severo | 2 | 6 | 15 | 23 |
Total | 40 | 36 | 24 | 100 |
Solución en R:
# ANÁLISIS DE CONCORDANCIA EN CLASIFICACIÓN DE SEVERIDAD
# 1. Creación de la matriz de confusión
tabla_severidad <- matrix(c(30, 8, 2,
5, 25, 6,
2, 7, 15),
nrow = 3, byrow = TRUE,
dimnames = list("Evaluador 1" = c("Leve", "Moderado", "Severo"),
"Evaluador 2" = c("Leve", "Moderado", "Severo")))
# 2. Verificación de la tabla
if(!all(dim(tabla_severidad) == c(3,3))) {
stop("Error: La tabla debe ser una matriz 3x3 para este análisis")
}
# 3. Cálculo del coeficiente Kappa (usando kappam.fleiss para múltiples categorías)
library(irr)
tryCatch({
kappa_result <- kappam.fleiss(tabla_severidad)
# 4. Configuración de parámetros
alfa <- 0.05
kappa_value <- round(kappa_result$value, 3)
p_value <- format.pval(kappa_result$p.value, digits = 3)
# 5. Presentación de resultados
cat("\n══════════════════════════════════════════════\n")
cat(" ANÁLISIS DE CONCORDANCIA EN SEVERIDAD\n")
cat("══════════════════════════════════════════════\n\n")
cat("Matriz de confusión:\n")
print(addmargins(tabla_severidad))
cat("\n")
cat("Estadístico Kappa de Fleiss:\n")
cat("──────────────────────────────────────────────\n")
cat(sprintf("Valor de Kappa: %0.3f\n", kappa_value))
cat(sprintf("Z = %.2f, p-valor = %s\n", kappa_result$statistic, p_value))
# 6. Interpretación cualitativa
interpretacion <- if(kappa_value > 0.8) {
"Acuerdo casi perfecto"
} else if(kappa_value > 0.6) {
"Acuerdo sustancial"
} else if(kappa_value > 0.4) {
"Acuerdo moderado"
} else if(kappa_value > 0.2) {
"Acuerdo ligero"
} else {
"Acuerdo pobre"
}
cat("\nInterpretación:\n")
cat("──────────────────────────────────────────────\n")
if(kappa_result$p.value < alfa) {
cat(sprintf("Existe acuerdo significativo (p = %s < α = 0.05)\n", p_value))
cat(sprintf("Grado de acuerdo: %s (Kappa = %.3f)\n", interpretacion, kappa_value))
} else {
cat(sprintf("No se encontró acuerdo significativo (p = %s > α = 0.05)\n", p_value))
cat("El acuerdo observado puede deberse al azar\n")
}
# 7. Visualización opcional
if(requireNamespace("vcd", quietly = TRUE)) {
library(vcd)
mosaic(tabla_severidad, shade = TRUE,
main = "Acuerdo en Clasificación de Severidad",
labeling_args = list(set_varnames = c(Evaluador1 = "Evaluador 1",
Evaluador2 = "Evaluador 2")))
} else {
cat("\nInstale el paquete 'vcd' para visualización gráfica\n")
}
}, error = function(e) {
cat("\nERROR en el análisis:\n")
cat(e$message, "\n")
cat("Posibles soluciones:\n")
cat("- Verifique que todos los valores sean numéricos positivos\n")
cat("- Confirme que la matriz sea cuadrada (3x3 en este caso)\n")
cat("- Instale el paquete 'irr' si no lo ha hecho\n")
})
##
## ══════════════════════════════════════════════
## ANÁLISIS DE CONCORDANCIA EN SEVERIDAD
## ══════════════════════════════════════════════
##
## Matriz de confusión:
## Evaluador 2
## Evaluador 1 Leve Moderado Severo Sum
## Leve 30 8 2 40
## Moderado 5 25 6 36
## Severo 2 7 15 24
## Sum 37 40 23 100
##
## Estadístico Kappa de Fleiss:
## ──────────────────────────────────────────────
## Valor de Kappa: -0.157
## Z = -1.21, p-valor = 0.226
##
## Interpretación:
## ──────────────────────────────────────────────
## No se encontró acuerdo significativo (p = 0.226 > α = 0.05)
## El acuerdo observado puede deberse al azar
Interpretación: El Kappa y su significancia evalúan la fiabilidad del acuerdo diagnóstico.
Dos sistemas de inteligencia artificial diagnosticaron 200 casos médicos en cuatro categorías. Se desea evaluar el acuerdo entre los sistemas (\(\alpha = 0.01\)).
Tabla de Contingencia:
Sistema 2: Cat 1 | Sistema 2: Cat 2 | Sistema 2: Cat 3 | Sistema 2: Cat 4 | Total | |
---|---|---|---|---|---|
Sistema 1: Cat 1 | 60 | 10 | 5 | 2 | 77 |
Sistema 1: Cat 2 | 8 | 45 | 12 | 3 | 68 |
Sistema 1: Cat 3 | 3 | 7 | 20 | 5 | 35 |
Sistema 1: Cat 4 | 1 | 2 | 4 | 13 | 20 |
Total | 72 | 64 | 41 | 23 | 200 |
Solución en R:
# ANÁLISIS DE CONCORDANCIA ENTRE SISTEMAS DE DIAGNÓSTICO AUTOMÁTICO
# 1. Creación de la matriz de confusión 4x4
tabla_ia <- matrix(c(60, 8, 3, 1,
10, 45, 7, 2,
5, 12, 20, 4,
2, 3, 5, 13),
nrow = 4, byrow = TRUE,
dimnames = list("Sistema A" = paste("Categoría", 1:4),
"Sistema B" = paste("Categoría", 1:4)))
# 2. Verificación de la tabla
if(!all(dim(tabla_ia) == c(4,4))) {
stop("Error: La tabla debe ser una matriz 4x4 para este análisis")
}
# 3. Cálculo del coeficiente Kappa (usando kappam.fleiss para múltiples categorías)
library(irr)
tryCatch({
kappa_result <- kappam.fleiss(tabla_ia)
# 4. Configuración de parámetros
alfa <- 0.01
kappa_value <- round(kappa_result$value, 3)
p_value <- format.pval(kappa_result$p.value, digits = 3, eps = 0.0001)
# 5. Presentación de resultados
cat("\n══════════════════════════════════════════════\n")
cat(" ANÁLISIS DE CONCORDANCIA ENTRE SISTEMAS IA\n")
cat("══════════════════════════════════════════════\n\n")
cat("Matriz de confusión:\n")
print(addmargins(tabla_ia))
cat("\n")
cat("Estadístico Kappa de Fleiss:\n")
cat("──────────────────────────────────────────────\n")
cat(sprintf("Valor de Kappa: %0.3f\n", kappa_value))
cat(sprintf("Estadístico Z: %.2f\n", kappa_result$statistic))
cat(sprintf("p-valor: %s\n\n", p_value))
# 6. Interpretación cualitativa
interpretacion <- if(kappa_value > 0.8) {
"Acuerdo casi perfecto"
} else if(kappa_value > 0.6) {
"Acuerdo sustancial"
} else if(kappa_value > 0.4) {
"Acuerdo moderado"
} else if(kappa_value > 0.2) {
"Acuerdo ligero"
} else {
"Acuerdo pobre"
}
cat("Interpretación:\n")
cat("──────────────────────────────────────────────\n")
if(kappa_result$p.value < alfa) {
cat(sprintf("Existe acuerdo estadísticamente significativo (p = %s < α = 0.01)\n", p_value))
cat(sprintf("Grado de acuerdo: %s (Kappa = %.3f)\n", interpretacion, kappa_value))
} else {
cat(sprintf("No se encontró acuerdo significativo (p = %s > α = 0.01)\n", p_value))
cat("El acuerdo observado puede deberse al azar\n")
}
# 7. Visualización opcional
if(requireNamespace("vcd", quietly = TRUE)) {
library(vcd)
mosaic(tabla_ia, shade = TRUE,
main = "Acuerdo entre Sistemas de Diagnóstico Automático",
labeling_args = list(set_varnames = c(SistemaA = "Sistema A",
SistemaB = "Sistema B")))
} else {
cat("\nPara visualización gráfica, instale el paquete 'vcd'\n")
}
}, error = function(e) {
cat("\nERROR en el análisis:\n")
cat(e$message, "\n")
cat("Recomendaciones:\n")
cat("- Verifique que la matriz sea 4x4 y contenga solo valores numéricos\n")
cat("- Asegúrese de haber instalado el paquete 'irr'\n")
cat("- Para matrices grandes, considere usar kappam.light()\n")
})
##
## ══════════════════════════════════════════════
## ANÁLISIS DE CONCORDANCIA ENTRE SISTEMAS IA
## ══════════════════════════════════════════════
##
## Matriz de confusión:
## Sistema B
## Sistema A Categoría 1 Categoría 2 Categoría 3 Categoría 4 Sum
## Categoría 1 60 8 3 1 72
## Categoría 2 10 45 7 2 64
## Categoría 3 5 12 20 4 41
## Categoría 4 2 3 5 13 23
## Sum 77 68 35 20 200
##
## Estadístico Kappa de Fleiss:
## ──────────────────────────────────────────────
## Valor de Kappa: -0.094
## Estadístico Z: -1.52
## p-valor: 0.129
##
## Interpretación:
## ──────────────────────────────────────────────
## No se encontró acuerdo significativo (p = 0.129 > α = 0.01)
## El acuerdo observado puede deberse al azar
Interpretación: El Kappa evalúa la consistencia entre los diagnósticos de los sistemas de IA.
La “región de rechazo” para la prueba de Kappa se visualiza en términos del p-valor en relación con el nivel de significancia \(\alpha\). Si el p-valor cae dentro de la región de rechazo (p-valor \(\leq \alpha\)), se considera que el resultado es estadísticamente significativo. La tabla de contingencia es la representación visual principal de los datos sobre los que se calcula el Kappa.
La prueba de rango con signo de Wilcoxon es una prueba no paramétrica utilizada para comparar la mediana de una muestra con un valor específico (prueba de un solo grupo) o para comparar las medianas de dos muestras relacionadas o pareadas (prueba de dos grupos pareados). Es una alternativa a la prueba t de Student para una muestra o para muestras pareadas cuando no se cumplen los supuestos de normalidad.
El procedimiento general para la prueba de un solo grupo es el siguiente:
Para la prueba de dos grupos pareados, el procedimiento es similar, pero las diferencias se calculan entre los pares de observaciones.
La hipótesis nula (\(H_0\)) es que la mediana de la población es igual al valor hipotético (prueba de un solo grupo) o que las medianas de las dos poblaciones relacionadas son iguales (prueba de dos grupos pareados). La hipótesis alternativa (\(H_1\)) puede ser unilateral (mediana > valor hipotético o mediana < valor hipotético) o bilateral (mediana \(\neq\) valor hipotético).
El valor p es la probabilidad de obtener un estadístico W tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera.
Para tamaños de muestra pequeños (\(n \leq 25\)), se utilizan tablas especiales para determinar el valor p asociado con el estadístico W.
Para tamaños de muestra grandes (\(n > 25\)), la distribución del estadístico W se aproxima a una distribución normal con: - Media: \(\mu_W = \frac{n(n+1)}{4}\) - Desviación estándar: \(\sigma_W = \sqrt{\frac{n(n+1)(2n+1)}{24}}\)
El estadístico Z se calcula como:
\[ Z = \frac{W - \mu_W}{\sigma_W} \]
El valor p se calcula entonces utilizando la distribución normal estándar (para pruebas unilaterales o bilaterales según la hipótesis alternativa).
Interpretación del valor p:
Se midieron los niveles de glucosa en sangre de 20 pacientes en ayunas. Se desea determinar si la mediana del nivel de glucosa es significativamente diferente de 90 mg/dL (\(\alpha = 0.05\)).
Datos:
85, 92, 88, 95, 89, 91, 86, 93, 90, 94, 87, 96, 84, 97, 83, 98, 82, 99, 81, 100
Solución en R:
# Datos de niveles de glucosa
glucosa <- c(85, 92, 88, 95, 89, 91, 86, 93, 90, 94, 87, 96, 84, 97, 83, 98, 82, 99, 81, 100)
mediana_esperada <- 90
alfa_wilcoxon <- 0.05
# Realizar la prueba de rango con signo de Wilcoxon
prueba_wilcoxon <- wilcox.test(glucosa, mu = mediana_esperada, alternative = "two.sided")
## Warning in wilcox.test.default(glucosa, mu = mediana_esperada, alternative =
## "two.sided"): cannot compute exact p-value with ties
## Warning in wilcox.test.default(glucosa, mu = mediana_esperada, alternative =
## "two.sided"): cannot compute exact p-value with zeroes
print(prueba_wilcoxon)
##
## Wilcoxon signed rank test with continuity correction
##
## data: glucosa
## V = 104.5, p-value = 0.717
## alternative hypothesis: true location is not equal to 90
# Para visualizar la región de rechazo (aproximación normal para n > 25, aquí n = 20, usaremos aproximación)
z_critico_wilcoxon <- qnorm(1 - alfa_wilcoxon / 2)
cat("Valor crítico de Z (bilateral):", z_critico_wilcoxon, "\n")
## Valor crítico de Z (bilateral): 1.959964
# Visualización de la región de rechazo
x_norm <- seq(-3, 3, length.out = 200)
y_norm <- dnorm(x_norm)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon)")
abline(v = c(-z_critico_wilcoxon, z_critico_wilcoxon), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_wilcoxon], -z_critico_wilcoxon), c(0, y_norm[x_norm <= -z_critico_wilcoxon], 0), col = "salmon", border = NA)
polygon(c(z_critico_wilcoxon, x_norm[x_norm >= z_critico_wilcoxon], Inf), c(0, y_norm[x_norm >= z_critico_wilcoxon], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = (prueba_wilcoxon$statistic - (length(glucosa) * (length(glucosa) + 1) / 4)) / sqrt(length(glucosa) * (length(glucosa) + 1) * (2 * length(glucosa) + 1) / 24), col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round((prueba_wilcoxon$statistic - (length(glucosa) * (length(glucosa) + 1) / 4)) / sqrt(length(glucosa) * (length(glucosa) + 1) * (2 * length(glucosa) + 1) / 24), 3)),
col = "blue", lty = 2)
Interpretación: El valor p de la prueba indicará si la mediana del nivel de glucosa es significativamente diferente de 90 mg/dL.
Se midió la presión arterial sistólica de 15 pacientes antes y después de recibir un nuevo tratamiento. Se desea determinar si el tratamiento tiene un efecto significativo en la presión arterial (\(\alpha = 0.01\)).
Datos:
Paciente | Antes | Después | Diferencia (Antes - Después) |
---|---|---|---|
1 | 140 | 135 | 5 |
2 | 145 | 142 | 3 |
3 | 138 | 136 | 2 |
4 | 150 | 148 | 2 |
5 | 142 | 140 | 2 |
6 | 135 | 137 | -2 |
7 | 148 | 145 | 3 |
8 | 139 | 138 | 1 |
9 | 152 | 149 | 3 |
10 | 141 | 139 | 2 |
11 | 136 | 134 | 2 |
12 | 144 | 143 | 1 |
13 | 147 | 146 | 1 |
14 | 140 | 138 | 2 |
15 | 143 | 141 | 2 |
Solución en R:
# Datos de presión arterial antes y después
antes <- c(140, 145, 138, 150, 142, 135, 148, 139, 152, 141, 136, 144, 147, 140, 143)
despues <- c(135, 142, 136, 148, 140, 137, 145, 138, 149, 139, 134, 143, 146, 138, 141)
# Realizar la prueba de rango con signo de Wilcoxon para datos pareados
prueba_wilcoxon_pareado <- wilcox.test(antes, despues, paired = TRUE, alternative = "two.sided")
## Warning in wilcox.test.default(antes, despues, paired = TRUE, alternative =
## "two.sided"): cannot compute exact p-value with ties
print(prueba_wilcoxon_pareado)
##
## Wilcoxon signed rank test with continuity correction
##
## data: antes and despues
## V = 112.5, p-value = 0.002615
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon_pareado <- 0.01
# Valor crítico de Z (aproximación normal)
z_critico_pareado <- qnorm(1 - alfa_wilcoxon_pareado / 2)
cat("Valor crítico de Z (bilateral):", z_critico_pareado, "\n")
## Valor crítico de Z (bilateral): 2.575829
# Visualización de la región de rechazo (similar al Ejemplo 1)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon)")
abline(v = c(-z_critico_pareado, z_critico_pareado), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_pareado], -z_critico_pareado), c(0, y_norm[x_norm <= -z_critico_pareado], 0), col = "salmon", border = NA)
polygon(c(z_critico_pareado, x_norm[x_norm >= z_critico_pareado], Inf), c(0, y_norm[x_norm >= z_critico_pareado], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = (prueba_wilcoxon_pareado$statistic - (length(antes) * (length(antes) + 1) / 4)) / sqrt(length(antes) * (length(antes) + 1) * (2 * length(antes) + 1) / 24), col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round((prueba_wilcoxon_pareado$statistic - (length(antes) * (length(antes) + 1) / 4)) / sqrt(length(antes) * (length(antes) + 1) * (2 * length(antes) + 1) / 24), 3)),
col = "blue", lty = 2)
# Boxplots para visualizar las distribuciones
boxplot(antes, despues, names = c("Antes del Tratamiento", "Después del Tratamiento"),
ylab = "Presión Arterial Sistólica", main = "Efecto del Tratamiento en la Presión Arterial")
Interpretación: El valor p indicará si hay una diferencia significativa en la mediana de la presión arterial antes y después del tratamiento.
Se midió el rendimiento de 25 atletas antes y después de un programa de entrenamiento. Se desea determinar si el programa aumentó significativamente su rendimiento (\(\alpha = 0.05\), prueba unilateral “greater” para la diferencia Después - Antes).
Datos: (Se omiten para brevedad, similar estructura al Ejemplo 2)
Solución en R:
# Datos de rendimiento antes y después (reemplazar con tus datos)
rendimiento_antes <- c(20, 22, 21, 23, 24, 25, 22, 23, 21, 20, 26, 27, 25, 24, 23, 22, 21, 20, 25, 26, 27, 24, 23, 22, 21)
rendimiento_despues <- c(23, 25, 24, 26, 27, 28, 25, 26, 24, 23, 29, 30, 28, 27, 26, 25, 24, 23, 28, 29, 30, 27, 26, 25, 24)
# Prueba unilateral "greater" (despues > antes => diferencia positiva)
prueba_wilcoxon_entrenamiento <- wilcox.test(rendimiento_despues, rendimiento_antes, paired = TRUE, alternative = "greater")
## Warning in wilcox.test.default(rendimiento_despues, rendimiento_antes, paired =
## TRUE, : cannot compute exact p-value with ties
print(prueba_wilcoxon_entrenamiento)
##
## Wilcoxon signed rank test with continuity correction
##
## data: rendimiento_despues and rendimiento_antes
## V = 325, p-value = 3.104e-07
## alternative hypothesis: true location shift is greater than 0
# Nivel de significancia
alfa_wilcoxon_entrenamiento <- 0.05
# Valor crítico de Z (unilateral)
z_critico_entrenamiento <- qnorm(1 - alfa_wilcoxon_entrenamiento)
cat("Valor crítico de Z (unilateral, greater):", z_critico_entrenamiento, "\n")
## Valor crítico de Z (unilateral, greater): 1.644854
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon, Unilateral)")
abline(v = z_critico_entrenamiento, col = "red", lty = 2)
polygon(c(z_critico_entrenamiento, x_norm[x_norm >= z_critico_entrenamiento], Inf), c(0, y_norm[x_norm >= z_critico_entrenamiento], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = (prueba_wilcoxon_entrenamiento$statistic - (length(rendimiento_antes) * (length(rendimiento_antes) + 1) / 4)) / sqrt(length(rendimiento_antes) * (length(rendimiento_antes) + 1) * (2 * length(rendimiento_antes) + 1) / 24), col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round((prueba_wilcoxon_entrenamiento$statistic - (length(rendimiento_antes) * (length(rendimiento_antes) + 1) / 4)) / sqrt(length(rendimiento_antes) * (length(rendimiento_antes) + 1) * (2 * length(rendimiento_antes) + 1) / 24), 3)),
col = "blue", lty = 2)
# Boxplots para visualizar
boxplot(rendimiento_antes, rendimiento_despues,names = c("Antes del Entrenamiento", "Después del Entrenamiento"),
ylab = "Rendimiento", main = "Efecto del Programa de Entrenamiento")
Interpretación: El valor p indicará si el rendimiento después del entrenamiento es significativamente mayor que antes.
Se midieron los tiempos de reacción de 30 sujetos a un estímulo después de tomar un medicamento. Se sabe que el tiempo de reacción promedio sin el medicamento es de 0.5 segundos. Se desea determinar si el medicamento disminuye significativamente el tiempo de reacción (\(\alpha = 0.01\), prueba unilateral “less”).
Datos: (Se omiten para brevedad)
Solución en R:
# Datos de tiempos de reacción (reemplazar con tus datos)
tiempo_reaccion <- c(0.45, 0.48, 0.42, 0.47, 0.49, 0.41, 0.46, 0.43, 0.44, 0.50,
0.39, 0.40, 0.38, 0.51, 0.47, 0.45, 0.49, 0.42, 0.43, 0.46,
0.41, 0.48, 0.44, 0.47, 0.40, 0.45, 0.43, 0.49, 0.46, 0.42)
referencia <- 0.5
alfa_wilcoxon_referencia <- 0.01
# Prueba unilateral "less" (tiempo_reaccion < referencia)
prueba_wilcoxon_referencia <- wilcox.test(tiempo_reaccion, mu = referencia, alternative = "less")
## Warning in wilcox.test.default(tiempo_reaccion, mu = referencia, alternative =
## "less"): cannot compute exact p-value with ties
## Warning in wilcox.test.default(tiempo_reaccion, mu = referencia, alternative =
## "less"): cannot compute exact p-value with zeroes
print(prueba_wilcoxon_referencia)
##
## Wilcoxon signed rank test with continuity correction
##
## data: tiempo_reaccion
## V = 2.5, p-value = 1.719e-06
## alternative hypothesis: true location is less than 0.5
# Nivel de significancia
alfa_wilcoxon_referencia <- 0.01
# Valor crítico de Z (unilateral)
z_critico_referencia <- qnorm(alfa_wilcoxon_referencia)
cat("Valor crítico de Z (unilateral, less):", z_critico_referencia, "\n")
## Valor crítico de Z (unilateral, less): -2.326348
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon, Unilateral)")
abline(v = z_critico_referencia, col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= z_critico_referencia], z_critico_referencia), c(0, y_norm[x_norm <= z_critico_referencia], 0), col = "salmon", border = NA)
legend("topleft", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = (prueba_wilcoxon_referencia$statistic - (length(tiempo_reaccion) * (length(tiempo_reaccion) + 1) / 4)) / sqrt(length(tiempo_reaccion) * (length(tiempo_reaccion) + 1) * (2 * length(tiempo_reaccion) + 1) / 24), col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round((prueba_wilcoxon_referencia$statistic - (length(tiempo_reaccion) * (length(tiempo_reaccion) + 1) / 4)) / sqrt(length(tiempo_reaccion) * (length(tiempo_reaccion) + 1) * (2 * length(tiempo_reaccion) + 1) / 24), 3)),
col = "blue", lty = 2)
# Histograma de los tiempos de reacción
hist(tiempo_reaccion, main = "Tiempos de Reacción Después del Medicamento",
xlab = "Tiempo de Reacción (s)", ylab = "Frecuencia")
abline(v = referencia, col = "blue", lty = 2)
legend("topright", legend = "Tiempo de Reacción Promedio sin Medicamento", col = "blue", lty = 2)
Interpretación: El valor p indicará si el tiempo de reacción después de tomar el medicamento es significativamente menor que 0.5 segundos.
La prueba de la suma de rangos de Wilcoxon es una prueba no paramétrica utilizada para comparar las medianas de dos grupos independientes. Es una alternativa a la prueba t de Student para muestras independientes cuando no se cumplen los supuestos de normalidad o igualdad de varianzas. A menudo se le conoce como la prueba de Mann-Whitney U.
El procedimiento general es el siguiente:
Combinar y ordenar los datos: Se combinan las observaciones de ambos grupos y se ordenan de menor a mayor.
Asignar rangos: Se asignan rangos a todas las observaciones en el conjunto combinado. En caso de empates, se asigna el rango promedio.
Sumar los rangos para cada grupo: Se calcula la suma de los rangos para el primer grupo (\(R_1\)) y la suma de los rangos para el segundo grupo (\(R_2\)).
Calcular el estadístico U: Se calcula el estadístico U para cada grupo utilizando las siguientes fórmulas:
\[ U_1 = n_1 n_2 + \frac{n_1(n_1 + 1)}{2} - R_1 \]
\[ U_2 = n_1 n_2 + \frac{n_2(n_2 + 1)}{2} - R_2 \]
Donde \(n_1\) y \(n_2\) son los tamaños de las muestras de los dos grupos. El estadístico U de la prueba es el menor de \(U_1\) y \(U_2\).
La hipótesis nula (\(H_0\)) es que las medianas de las dos poblaciones son iguales. La hipótesis alternativa (\(H_1\)) puede ser unilateral (la mediana de un grupo es mayor o menor que la del otro) o bilateral (las medianas de los dos grupos son diferentes).
El valor p es la probabilidad de obtener un estadístico U tan extremo (o más extremo) como el observado, asumiendo que la hipótesis nula es verdadera.
Para tamaños de muestra pequeños (\(n_1 \leq 20\) y \(n_2 \leq 20\)), se utilizan tablas especiales para determinar el valor p asociado con el estadístico U.
Para tamaños de muestra grandes (\(n_1 > 20\) o \(n_2 > 20\)), la distribución del estadístico U se aproxima a una distribución normal con: - Media: \(\mu_U = \frac{n_1 n_2}{2}\) - Desviación estándar: \(\sigma_U = \sqrt{\frac{n_1 n_2 (n_1 + n_2 + 1)}{12}}\)
El estadístico Z se calcula como:
\[ Z = \frac{U - \mu_U}{\sigma_U} \]
El valor p se calcula entonces utilizando la distribución normal estándar (para pruebas unilaterales o bilaterales según la hipótesis alternativa).
Interpretación del valor p:
Se compararon las calificaciones de dos grupos de estudiantes que fueron enseñados con dos métodos diferentes. Se desea determinar si hay una diferencia significativa en la mediana de las calificaciones entre los dos métodos (\(\alpha = 0.05\)).
Datos:
Método A: 78, 82, 90, 75, 88, 85 Método B: 85, 92, 79, 95, 81, 88, 91
Solución en R:
# Datos de calificaciones por método
metodo_a <- c(78, 82, 90, 75, 88, 85)
metodo_b <- c(85, 92, 79, 95, 81, 88, 91)
# Realizar la prueba de la suma de rangos de Wilcoxon
prueba_wilcoxon_grupos <- wilcox.test(metodo_a, metodo_b, alternative = "two.sided")
## Warning in wilcox.test.default(metodo_a, metodo_b, alternative = "two.sided"):
## cannot compute exact p-value with ties
print(prueba_wilcoxon_grupos)
##
## Wilcoxon rank sum test with continuity correction
##
## data: metodo_a and metodo_b
## W = 12, p-value = 0.2234
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon_grupos <- 0.05
# Para visualizar la región de rechazo (aproximación normal para n > 20, aquí n1=6, n2=7, usaremos aproximación)
n1 <- length(metodo_a)
n2 <- length(metodo_b)
media_u <- n1 * n2 / 2
sd_u <- sqrt(n1 * n2 * (n1 + n2 + 1) / 12)
z_critico_grupos <- qnorm(1 - alfa_wilcoxon_grupos / 2)
cat("Valor crítico de Z (bilateral):", z_critico_grupos, "\n")
## Valor crítico de Z (bilateral): 1.959964
# Visualización de la región de rechazo
x_norm <- seq(-3, 3, length.out = 200)
y_norm <- dnorm(x_norm)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon)")
abline(v = c(-z_critico_grupos, z_critico_grupos), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_grupos], -z_critico_grupos), c(0, y_norm[x_norm <= -z_critico_grupos], 0), col = "salmon", border = NA)
polygon(c(z_critico_grupos, x_norm[x_norm >= z_critico_grupos], Inf), c(0, y_norm[x_norm >= z_critico_grupos], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
z_estadistico <- (prueba_wilcoxon_grupos$statistic - media_u) / sd_u
abline(v = z_estadistico, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(z_estadistico, 3)),
col = "blue", lty = 2)
# Boxplots para visualizar las distribuciones
boxplot(metodo_a, metodo_b, names = c("Método A", "Método B"),
ylab = "Calificación", main = "Comparación de Métodos de Enseñanza")
Interpretación: El valor p de la prueba indicará si hay una diferencia significativa en la mediana de las calificaciones entre los dos métodos.
Se recolectaron los salarios anuales (en miles de dólares) de empleados en dos industrias diferentes. Se desea determinar si hay una diferencia significativa en la mediana de los salarios entre las industrias (\(\alpha = 0.01\)).
Datos:
Industria 1: 55, 60, 65, 70, 75, 80, 85, 90 Industria 2: 62, 68, 72, 78, 82, 88, 95, 100, 105
Solución en R:
# Datos de salarios por industria
industria1 <- c(55, 60, 65, 70, 75, 80, 85, 90)
industria2 <- c(62, 68, 72, 78, 82, 88, 95, 100, 105)
# Realizar la prueba de la suma de rangos de Wilcoxon
prueba_wilcoxon_salarios <- wilcox.test(industria1, industria2, alternative = "two.sided")
print(prueba_wilcoxon_salarios)
##
## Wilcoxon rank sum exact test
##
## data: industria1 and industria2
## W = 21, p-value = 0.1672
## alternative hypothesis: true location shift is not equal to 0
# Nivel de significancia
alfa_wilcoxon_salarios <- 0.01
# Aproximación normal
n1_salarios <- length(industria1)
n2_salarios <- length(industria2)
media_u_salarios <- n1_salarios * n2_salarios / 2
sd_u_salarios <- sqrt(n1_salarios * n2_salarios * (n1_salarios + n2_salarios + 1) / 12)
z_critico_salarios <- qnorm(1 - alfa_wilcoxon_salarios / 2)
cat("Valor crítico de Z (bilateral):", z_critico_salarios, "\n")
## Valor crítico de Z (bilateral): 2.575829
# Visualización de la región de rechazo (similar al Ejemplo 1)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon)")
abline(v = c(-z_critico_salarios, z_critico_salarios), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_salarios], -z_critico_salarios), c(0, y_norm[x_norm <= -z_critico_salarios], 0), col = "salmon", border = NA)
polygon(c(z_critico_salarios, x_norm[x_norm >= z_critico_salarios], Inf), c(0, y_norm[x_norm >= z_critico_salarios], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
z_estadistico_salarios <- (prueba_wilcoxon_salarios$statistic - media_u_salarios) / sd_u_salarios
abline(v = z_estadistico_salarios, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(z_estadistico_salarios, 3)),
col = "blue", lty = 2)
# Boxplots para visualizar
boxplot(industria1, industria2, names = c("Industria 1", "Industria 2"),
ylab = "Salario (miles $)", main = "Comparación de Salarios entre Industrias")
Interpretación: El valor p indicará si hay una diferencia significativa en la mediana de los salarios entre las dos industrias.
Se comparó el rendimiento (en kg/hectárea) de dos grupos de parcelas de tierra, uno tratado con un nuevo fertilizante y el otro sin tratamiento (control). Se desea determinar si el fertilizante aumenta significativamente el rendimiento (\(\alpha = 0.05\), prueba unilateral “greater” para fertilizante > control).
Datos:
Fertilizante: 4500, 4800, 5100, 4900, 5000, 5200, 4700, 5300 Control: 4200, 4400, 4500, 4300, 4600, 4100
Solución en R:
# Datos de rendimiento con y sin fertilizante
fertilizante <- c(4500, 4800, 5100, 4900, 5000, 5200, 4700, 5300)
control <- c(4200, 4400, 4500, 4300, 4600, 4100)
# Prueba unilateral "greater" (fertilizante > control)
prueba_wilcoxon_fertilizante <- wilcox.test(fertilizante, control, alternative = "greater")
## Warning in wilcox.test.default(fertilizante, control, alternative = "greater"):
## cannot compute exact p-value with ties
print(prueba_wilcoxon_fertilizante)
##
## Wilcoxon rank sum test with continuity correction
##
## data: fertilizante and control
## W = 46.5, p-value = 0.002232
## alternative hypothesis: true location shift is greater than 0
# Nivel de significancia
alfa_wilcoxon_fertilizante <- 0.05
# Aproximación normal
n1_fertilizante <- length(fertilizante)
n2_control <- length(control)
media_u_fertilizante <- n1_fertilizante * n2_control / 2
sd_u_fertilizante <- sqrt(n1_fertilizante * n2_control * (n1_fertilizante + n2_control + 1) / 12)
z_critico_fertilizante <- qnorm(1 - alfa_wilcoxon_fertilizante)
cat("Valor crítico de Z (unilateral, greater):", z_critico_fertilizante, "\n")
## Valor crítico de Z (unilateral, greater): 1.644854
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon, Unilateral)")
abline(v = z_critico_fertilizante, col = "red", lty = 2)
polygon(c(z_critico_fertilizante, x_norm[x_norm >= z_critico_fertilizante], Inf), c(0, y_norm[x_norm >= z_critico_fertilizante], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
z_estadistico_fertilizante <- (prueba_wilcoxon_fertilizante$statistic - media_u_fertilizante) / sd_u_fertilizante
abline(v = z_estadistico_fertilizante, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(z_estadistico_fertilizante, 3)),
col = "blue", lty = 2)
# Boxplots para visualizar
boxplot(fertilizante, control, names = c("Fertilizante", "Control"),
ylab = "Rendimiento (kg/hectárea)", main = "Efecto del Fertilizante en el Rendimiento")
Interpretación: El valor p indicará si el rendimiento con fertilizante es significativamente mayor que el del grupo control.
Se compararon los tiempos de reacción a un estímulo (en segundos) entre un grupo que tomó un suplemento y un grupo placebo. Se desea determinar si el suplemento disminuye significativamente el tiempo de reacción (\(\alpha = 0.01\), prueba unilateral “less” para suplemento < placebo).
Datos:
Suplemento: 0.35, 0.38, 0.32, 0.36, 0.39, 0.34 Placebo: 0.40, 0.42, 0.39, 0.41, 0.43, 0.45, 0.42
Solución en R:
# Datos de tiempos de reacción con suplemento y placebo
suplemento <- c(0.35, 0.38, 0.32, 0.36, 0.39, 0.34)
placebo <- c(0.40, 0.42, 0.39, 0.41, 0.43, 0.45, 0.42)
# Prueba unilateral "less" (suplemento < placebo)
prueba_wilcoxon_suplemento <- wilcox.test(suplemento, placebo, alternative = "less")
## Warning in wilcox.test.default(suplemento, placebo, alternative = "less"):
## cannot compute exact p-value with ties
print(prueba_wilcoxon_suplemento)
##
## Wilcoxon rank sum test with continuity correction
##
## data: suplemento and placebo
## W = 0.5, p-value = 0.002085
## alternative hypothesis: true location shift is less than 0
# Nivel de significancia
alfa_wilcoxon_suplemento <- 0.01
# Aproximación normal
n1_suplemento <- length(suplemento)
n2_placebo <- length(placebo)
media_u_suplemento <- n1_suplemento * n2_placebo / 2
sd_u_suplemento <- sqrt(n1_suplemento * n2_placebo * (n1_suplemento + n2_placebo + 1) / 12)
z_critico_suplemento <- qnorm(alfa_wilcoxon_suplemento)
cat("Valor crítico de Z (unilateral, less):", z_critico_suplemento, "\n")
## Valor crítico de Z (unilateral, less): -2.326348
# Visualización de la región de rechazo (unilateral)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Wilcoxon, Unilateral)")
abline(v = z_critico_suplemento, col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= z_critico_suplemento], z_critico_suplemento), c(0, y_norm[x_norm <= z_critico_suplemento], 0), col = "salmon", border = NA)
legend("topleft", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
z_estadistico_suplemento <- (prueba_wilcoxon_suplemento$statistic - media_u_suplemento) / sd_u_suplemento
abline(v = z_estadistico_suplemento, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(z_estadistico_suplemento, 3)),
col = "blue", lty = 2)
# Boxplots para visualizar
boxplot(suplemento, placebo, names = c("Suplemento", "Placebo"),
ylab = "Tiempo de Reacción (s)", main = "Efecto del Suplemento en el Tiempo de Reacción")
Interpretación: El valor p indicará si el tiempo de reacción en el grupo del suplemento es significativamente menor que en el grupo placebo.
La prueba de rachas es una prueba no paramétrica utilizada para determinar si una secuencia de datos es aleatoria. Examina el número de rachas (secuencias consecutivas de elementos similares) en la secuencia. Demasiadas o muy pocas rachas sugieren no aleatoriedad.
El procedimiento general es el siguiente:
La hipótesis nula (\(H_0\)) es que la secuencia es aleatoria. La hipótesis alternativa (\(H_1\)) es que la secuencia no es aleatoria (puede haber tendencias, ciclos o agrupaciones).
El valor p se calcula basándose en la distribución del número de rachas bajo la hipótesis de aleatoriedad.
Para tamaños de muestra pequeños (\(n \leq 20\)), se utilizan tablas especiales para determinar el valor p asociado con el número de rachas observado.
Para tamaños de muestra grandes (\(n > 20\)), la distribución del número de rachas (R) se aproxima a una distribución normal con: - Media: \(\mu_R = \frac{2 n_1 n_2}{n_1 + n_2} + 1\) - Desviación estándar: \(\sigma_R = \sqrt{\frac{2 n_1 n_2 (2 n_1 n_2 - n_1 - n_2)}{(n_1 + n_2)^2 (n_1 + n_2 - 1)}}\)
El estadístico Z se calcula como:
\[ Z = \frac{R - \mu_R}{\sigma_R} \]
El valor p se calcula entonces utilizando la distribución normal estándar (para pruebas bilaterales, ya que la no aleatoriedad puede manifestarse por demasiadas o muy pocas rachas).
Interpretación del valor p:
Se registraron los signos de los cambios diarios en el precio de una acción durante 30 días (+ para aumento, - para disminución). Se desea probar si la secuencia de cambios es aleatoria (\(\alpha = 0.05\)).
Datos:
+, +, -, +, -, -, +, -, +, +, +, -, -, +, -, +, -, -, +, +, -, +, -, -, +, +, -, +, -
Solución en R:
# Datos de los signos de los cambios en el precio
signos <- c("+", "+", "-", "+", "-", "-", "+", "-", "+", "+", "+", "-", "-", "+", "-", "+", "-", "-", "+", "+", "-", "+", "-", "-", "+", "+", "-", "+", "-")
# Función para calcular el número de rachas
calcular_rachas <- function(secuencia) {
rachas <- 1
if (length(secuencia) > 1) {
for (i in 2:length(secuencia)) {
if (secuencia[i] != secuencia[i-1]) {
rachas <- rachas + 1
}
}
}
return(rachas)
}
# Calcular el número de rachas
R_observado <- calcular_rachas(signos)
cat("Número de rachas observadas:", R_observado, "\n")
## Número de rachas observadas: 20
# Contar el número de signos + y -
n1 <- sum(signos == "+")
n2 <- sum(signos == "-")
n <- n1 + n2
cat("Número de +:", n1, "\n")
## Número de +: 15
cat("Número de -:", n2, "\n")
## Número de -: 14
# Calcular la media y la desviación estándar esperadas bajo aleatoriedad (aproximación normal)
media_R <- (2 * n1 * n2) / n + 1
sd_R <- sqrt((2 * n1 * n2 * (2 * n1 * n2 - n1 - n2)) / (n^2 * (n - 1)))
cat("Media esperada de rachas:", media_R, "\n")
## Media esperada de rachas: 15.48276
cat("Desviación estándar esperada de rachas:", sd_R, "\n")
## Desviación estándar esperada de rachas: 2.640803
# Calcular el estadístico Z
Z_observado <- (R_observado - media_R) / sd_R
cat("Estadístico Z observado:", Z_observado, "\n")
## Estadístico Z observado: 1.710556
# Calcular el valor p (prueba bilateral)
p_valor <- 2 * pnorm(abs(Z_observado), lower.tail = FALSE)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.08716311
# Nivel de significancia
alfa_rachas <- 0.05
# Valor crítico de Z (bilateral)
z_critico_rachas <- qnorm(1 - alfa_rachas / 2)
cat("Valor crítico de Z (bilateral):", z_critico_rachas, "\n")
## Valor crítico de Z (bilateral): 1.959964
# Visualización de la región de rechazo
x_norm <- seq(-3, 3, length.out = 200)
y_norm <- dnorm(x_norm)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Prueba de Rachas)")
abline(v = c(-z_critico_rachas, z_critico_rachas), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_rachas], -z_critico_rachas), c(0, y_norm[x_norm <= -z_critico_rachas], 0), col = "salmon", border = NA)
polygon(c(z_critico_rachas, x_norm[x_norm >= z_critico_rachas], Inf), c(0, y_norm[x_norm >= z_critico_rachas], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = Z_observado, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(Z_observado, 3)),
col = "blue", lty = 2)
# Interpretación
if (p_valor <= alfa_rachas) {
cat("\nEl valor p (", round(p_valor, 3), ") es menor o igual al nivel de significancia (", alfa_rachas, ").\n")
cat("Se rechaza la hipótesis nula. Existe evidencia estadística significativa para concluir que la secuencia de cambios en el precio de la acción no es aleatoria.\n")
} else {
cat("\nEl valor p (", round(p_valor, 3), ") es mayor que el nivel de significancia (", alfa_rachas, ").\n")
cat("No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de cambios en el precio de la acción no es aleatoria.\n")
}
##
## El valor p ( 0.087 ) es mayor que el nivel de significancia ( 0.05 ).
## No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de cambios en el precio de la acción no es aleatoria.
Interpretación: El valor p indicará si la secuencia de signos es significativamente diferente de lo que se esperaría por azar.
Se registró la secuencia de géneros de los últimos 40 recién nacidos en un hospital (M para masculino, F para femenino). Se desea probar si la secuencia es aleatoria (\(\alpha = 0.01\)).
Datos:
M, F, M, M, F, F, F, M, M, M, M, F, F, M, F, M, F, F, M, M, F, M, F, F, F, M, M, F, M, F, M, M, F, F, M, F, M, F, F
Solución en R:
# Datos de géneros
generos <- c("M", "F", "M", "M", "F", "F", "F", "M", "M", "M", "M", "F", "F", "M", "F", "M", "F", "F", "M", "M", "F", "M", "F", "F", "F", "M", "M", "F", "M", "F", "M", "M", "F", "F", "M", "F", "M", "F", "F")
# Calcular el número de rachas
R_observado_generos <- calcular_rachas(generos)
cat("Número de rachas observadas:", R_observado_generos, "\n")
## Número de rachas observadas: 24
# Contar el número de M y F
n1_generos <- sum(generos == "M")
n2_generos <- sum(generos == "F")
n_generos <- n1_generos + n2_generos
cat("Número de M:", n1_generos, "\n")
## Número de M: 19
cat("Número de F:", n2_generos, "\n")
## Número de F: 20
# Calcular la media y la desviación estándar esperadas
media_R_generos <- (2 * n1_generos * n2_generos) / n_generos + 1
sd_R_generos <- sqrt((2 * n1_generos * n2_generos * (2 * n1_generos * n2_generos - n1_generos - n2_generos)) / (n_generos^2 * (n_generos - 1)))
cat("Media esperada de rachas:", media_R_generos, "\n")
## Media esperada de rachas: 20.48718
cat("Desviación estándar esperada de rachas:", sd_R_generos, "\n")
## Desviación estándar esperada de rachas: 3.079059
# Calcular el estadístico Z
Z_observado_generos <- (R_observado_generos - media_R_generos) / sd_R_generos
cat("Estadístico Z observado:", Z_observado_generos, "\n")
## Estadístico Z observado: 1.140875
# Calcular el valor p (prueba bilateral)
p_valor_generos <- 2 * pnorm(abs(Z_observado_generos), lower.tail = FALSE)
cat("Valor p:", p_valor_generos, "\n")
## Valor p: 0.2539221
# Nivel de significancia
alfa_rachas_generos <- 0.01
# Valor crítico de Z (bilateral)
z_critico_rachas_generos <- qnorm(1 - alfa_rachas_generos / 2)
cat("Valor crítico de Z (bilateral):", z_critico_rachas_generos, "\n")
## Valor crítico de Z (bilateral): 2.575829
# Visualización de la región de rechazo (similar al Ejemplo 1)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Prueba de Rachas)")
abline(v = c(-z_critico_rachas_generos, z_critico_rachas_generos), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_rachas_generos], -z_critico_rachas_generos), c(0, y_norm[x_norm <= -z_critico_rachas_generos], 0), col = "salmon", border = NA)
polygon(c(z_critico_rachas_generos, x_norm[x_norm >= z_critico_rachas_generos], Inf), c(0, y_norm[x_norm >= z_critico_rachas_generos], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = Z_observado_generos, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(Z_observado_generos, 3)),
col = "blue", lty = 2)
# Interpretación
if (p_valor_generos <= alfa_rachas_generos) {
cat("\nEl valor p (", round(p_valor_generos, 3), ") es menor o igual al nivel de significancia (", alfa_rachas_generos, ").\n")
cat("Se rechaza la hipótesis nula. Existe evidencia estadística significativa para concluir que la secuencia de géneros de los recién nacidos no es aleatoria.\n")
} else {
cat("\nEl valor p (", round(p_valor_generos, 3), ") es mayor que el nivel de significancia (", alfa_rachas_generos, ").\n")
cat("No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de géneros de los recién nacidos no es aleatoria.\n")
}
##
## El valor p ( 0.254 ) es mayor que el nivel de significancia ( 0.01 ).
## No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de géneros de los recién nacidos no es aleatoria.
Interpretación: El valor p indicará si la secuencia de géneros es significativamente diferente de lo que se esperaría por azar.
Se registraron 50 mediciones de temperatura. Se desea probar si la secuencia de valores por encima y por debajo de la mediana es aleatoria (\(\alpha = 0.05\)).
Datos: (Se omiten para brevedad, pero serían 50 valores numéricos)
Solución en R:
# Datos de temperatura (reemplazar con tus datos)
temperaturas <- c(25.1, 24.8, 25.5, 25.2, 24.9, 25.6, 25.3, 25.0, 25.7, 25.4,
24.7, 25.8, 24.6, 25.9, 24.5, 26.0, 24.4, 26.1, 24.3, 26.2,
25.1, 24.9, 25.6, 25.3, 25.0, 25.7, 25.4, 25.1, 25.8, 24.8,
25.5, 25.2, 24.9, 25.6, 25.3, 25.0, 25.7, 25.4, 24.7, 25.8,
24.6, 25.9, 24.5, 26.0, 24.4, 26.1, 24.3, 26.2, 25.2, 24.8)
# Calcular la mediana
mediana_temp <- median(temperaturas)
# Crear la secuencia de signos (+ por encima, - por debajo)
signos_temp <- ifelse(temperaturas > mediana_temp, "+", ifelse(temperaturas < mediana_temp, "-", NA))
signos_temp <- signos_temp[!is.na(signos_temp)] # Eliminar empates (opcional)
# Calcular el número de rachas
R_observado_temp <- calcular_rachas(signos_temp)
cat("Número de rachas observadas:", R_observado_temp, "\n")
## Número de rachas observadas: 39
# Contar el número de + y -
n1_temp <- sum(signos_temp == "+")
n2_temp <- sum(signos_temp == "-")
n_temp <- n1_temp + n2_temp
cat("Número de +:", n1_temp, "\n")
## Número de +: 25
cat("Número de -:", n2_temp, "\n")
## Número de -: 25
# Calcular la media y la desviación estándar esperadas
media_R_temp <- (2 * n1_temp * n2_temp) / n_temp + 1
sd_R_temp <- sqrt((2 * n1_temp * n2_temp * (2 * n1_temp * n2_temp - n1_temp - n2_temp)) / (n_temp^2 * (n_temp - 1)))
cat("Media esperada de rachas:", media_R_temp, "\n")
## Media esperada de rachas: 26
cat("Desviación estándar esperada de rachas:", sd_R_temp, "\n")
## Desviación estándar esperada de rachas: 3.499271
# Calcular el estadístico Z
Z_observado_temp <- (R_observado_temp - media_R_temp) / sd_R_temp
cat("Estadístico Z observado:", Z_observado_temp, "\n")
## Estadístico Z observado: 3.715059
# Calcular el valor p (prueba bilateral)
p_valor_temp <- 2 * pnorm(abs(Z_observado_temp), lower.tail = FALSE)
cat("Valor p:", p_valor_temp, "\n")
## Valor p: 0.0002031559
# Nivel de significancia
alfa_rachas_temp <- 0.05
# Valor crítico de Z (bilateral)
z_critico_rachas_temp <- qnorm(1 - alfa_rachas_temp / 2)
cat("Valor crítico de Z (bilateral):", z_critico_rachas_temp, "\n")
## Valor crítico de Z (bilateral): 1.959964
# Visualización de la región de rechazo (similar al Ejemplo 1)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Prueba de Rachas)")
abline(v = c(-z_critico_rachas_temp, z_critico_rachas_temp), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_rachas_temp], -z_critico_rachas_temp), c(0, y_norm[x_norm <= -z_critico_rachas_temp], 0), col = "salmon", border = NA)
polygon(c(z_critico_rachas_temp, x_norm[x_norm >= z_critico_rachas_temp], Inf), c(0, y_norm[x_norm >= z_critico_rachas_temp], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = Z_observado_temp, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(Z_observado_temp, 3)),
col = "blue", lty = 2)
# Interpretación
if (p_valor_temp <= alfa_rachas_temp) {
cat("\nEl valor p (", round(p_valor_temp, 3), ") es menor o igual al nivel de significancia (", alfa_rachas_temp, ").\n")
cat("Se rechaza la hipótesis nula. Existe evidencia estadística significativa para concluir que la secuencia de temperaturas por encima y por debajo de la mediana no es aleatoria.\n")
} else {
cat("\nEl valor p (", round(p_valor_temp, 3), ") es mayor que el nivel de significancia (", alfa_rachas_temp, ").\n")
cat("No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de temperaturas por encima y por debajo de la mediana no es aleatoria.\n")
}
##
## El valor p ( 0 ) es menor o igual al nivel de significancia ( 0.05 ).
## Se rechaza la hipótesis nula. Existe evidencia estadística significativa para concluir que la secuencia de temperaturas por encima y por debajo de la mediana no es aleatoria.
Interpretación: El valor p indicará si la secuencia de valores por encima y por debajo de la mediana es significativamente diferente de lo que se esperaría por azar.
Se registraron las direcciones predominantes del viento al mediodía durante 60 días (N para norte, S para sur). Se desea probar si la secuencia de direcciones es aleatoria (\(\alpha = 0.01\)).
Datos: (Se omiten para brevedad, pero serían 60 caracteres ‘N’ o ‘S’)
Solución en R:
# Datos de dirección del viento (reemplazar con tus datos)
viento <- c("N", "N", "S", "N", "S", "S", "N", "S", "N", "N", "N", "S", "S", "N", "S", "N", "S", "S", "N", "N", "S", "N", "S", "S", "S", "N", "N", "S", "N", "S", "N", "N", "S", "S", "N", "S", "N", "S", "S", "N", "N", "S", "N", "S", "S", "S", "N", "N", "S", "N", "S", "N", "N", "S", "S", "N", "S", "N", "S", "S")
# Calcular el número de rachas
R_observado_viento <- calcular_rachas(viento)
cat("Número de rachas observadas:", R_observado_viento, "\n")
## Número de rachas observadas: 40
# Contar el número de N y S
n1_viento <- sum(viento == "N")
n2_viento <- sum(viento == "S")
n_viento <- n1_viento + n2_viento
cat("Número de N:", n1_viento, "\n")
## Número de N: 29
cat("Número de S:", n2_viento, "\n")
## Número de S: 31
# Calcular la media y la desviación estándar esperadas
media_R_viento <- (2 * n1_viento * n2_viento) / n_viento + 1
sd_R_viento <- sqrt((2 * n1_viento * n2_viento * (2 * n1_viento * n2_viento - n1_viento - n2_viento)) / (n_viento^2 * (n_viento - 1)))
cat("Media esperada de rachas:", media_R_viento, "\n")
## Media esperada de rachas: 30.96667
cat("Desviación estándar esperada de rachas:", sd_R_viento, "\n")
## Desviación estándar esperada de rachas: 3.835681
# Calcular el estadístico Z
Z_observado_viento <- (R_observado_viento - media_R_viento) / sd_R_viento
cat("Estadístico Z observado:", Z_observado_viento, "\n")
## Estadístico Z observado: 2.355079
# Calcular el valor p (prueba bilateral)
p_valor_viento <- 2 * pnorm(abs(Z_observado_viento), lower.tail = FALSE)
cat("Valor p:", p_valor_viento, "\n")
## Valor p: 0.01851875
# Nivel de significancia
alfa_rachas_viento <- 0.01
# Valor crítico de Z (bilateral)
z_critico_rachas_viento <- qnorm(1 - alfa_rachas_viento / 2)
cat("Valor crítico de Z (bilateral):", z_critico_rachas_viento, "\n")
## Valor crítico de Z (bilateral): 2.575829
# Visualización de la región de rechazo (similar al Ejemplo 1)
plot(x_norm, y_norm, type = "l", xlab = "Estadístico Z", ylab = "Densidad",
main = "Distribución Normal Estándar y Región de Rechazo (Prueba de Rachas)")
abline(v = c(-z_critico_rachas_viento, z_critico_rachas_viento), col = "red", lty = 2)
polygon(c(-Inf, x_norm[x_norm <= -z_critico_rachas_viento], -z_critico_rachas_viento), c(0, y_norm[x_norm <= -z_critico_rachas_viento], 0), col = "salmon", border = NA)
polygon(c(z_critico_rachas_viento, x_norm[x_norm >= z_critico_rachas_viento], Inf), c(0, y_norm[x_norm >= z_critico_rachas_viento], 0), col = "salmon", border = NA)
legend("topright", legend = c("Región de Rechazo", "Valor Crítico"),
fill = c("salmon", NA), border = c(NA, "red"), lty = c(NA, 2))
abline(v = Z_observado_viento, col = "blue", lty = 2)
legend("topleft", legend = paste("Estadístico Z =", round(Z_observado_viento, 3)),
col = "blue", lty = 2)
# Interpretación
if (p_valor_viento <= alfa_rachas_viento) {
cat("\nEl valor p (", round(p_valor_viento, 3), ") es menor o igual al nivel de significancia (", alfa_rachas_viento, ").\n")
cat("Se rechaza la hipótesis nula. Existe evidencia estadística significativa para concluir que la secuencia de direcciones del viento no es aleatoria.\n")
} else {
cat("\nEl valor p (", round(p_valor_viento, 3), ") es mayor que el nivel de significancia (", alfa_rachas_viento, ").\n")
cat("No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de direcciones del viento no es aleatoria.\n")
}
##
## El valor p ( 0.019 ) es mayor que el nivel de significancia ( 0.01 ).
## No se rechaza la hipótesis nula. No hay suficiente evidencia para concluir que la secuencia de direcciones del viento no es aleatoria.
Interpretación: El valor p indicará si la secuencia de direcciones del viento es significativamente diferente de lo que se esperaría por azar.