if (!require('devtools')) install.packages('devtools')
## Loading required package: devtools
## Loading required package: usethis
devtools::install_github('fhernanb/stests', force=TRUE)
## Downloading GitHub repo fhernanb/stests@HEAD
##
## ── R CMD build ─────────────────────────────────────────────────────────────────
## checking for file ‘/private/var/folders/p_/f8jn5wdn70l6t5xrjn756wtm0000gn/T/RtmpJ15gxk/remotes61315aac7f7e/fhernanb-stests-b25bf7e/DESCRIPTION’ ... ✔ checking for file ‘/private/var/folders/p_/f8jn5wdn70l6t5xrjn756wtm0000gn/T/RtmpJ15gxk/remotes61315aac7f7e/fhernanb-stests-b25bf7e/DESCRIPTION’
## ─ preparing ‘stests’:
## checking DESCRIPTION meta-information ... ✔ checking DESCRIPTION meta-information
## ─ checking for LF line-endings in source and make files and shell scripts
## ─ checking for empty or unneeded directories
## Omitted ‘LazyData’ from DESCRIPTION
## ─ building ‘stests_0.1.0.tar.gz’
##
##
Para realizar este tipo de prueba se usa la función var.test del paquete stests (Hernandez et al. 2024) disponible en el repositorio. La función var.test tiene la siguiente estructura.
Los argumentos a definir dentro de var.test para hacer la prueba son:
x: vector numérico con los datos. alternative: tipo de hipótesis
alterna. Los valores disponibles son “two.sided” cuando la alterna
es
≠, “less” para el caso < y “greater” para el caso>. null.value:
valor de referencia de la prueba. conf.level: nivel de confianza para
reportar el intervalo de confianza asociado (opcional).
Ejemplo Para verificar si el proceso de llenado de bolsas de café está operando con la variabilidad permitida se toman aleatoriamente muestras de tamaño diez cada cuatro horas. Una muestra de bolsas está compuesta por las siguientes observaciones: 502, 501, 497, 491, 496, 501, 502, 500, 489, 490. El proceso de llenado está bajo control si presenta un varianza de 40 o menos. ¿Está el proceso llenando bolsas conforme lo dice la envoltura? Use un nivel de significancia del 5%.
Solución
En un ejemplo anterior se comprobó que la muestra proviene de una población normal así que se puede proceder con la prueba de hipótesis sobre σ 2.En este ejemplo nos interesa estudiar el siguiente conjunto de hipótesis
H0: σ2 ≤ 40
H1: σ2 > 40
La prueba de hipótesis se puede realizar usando la función var.test por medio del siguiente código.
contenido <- c(510, 492, 494, 498, 492,
496, 502, 491, 507, 496)
stests::var.test(x=contenido, alternative='greater',
null.value=40, conf.level=0.95)
##
## X-squared test for variance
##
## data: contenido
## X-squared = 9.64, df = 9, p-value = 0.3804
## alternative hypothesis: true variance is greater than 40
## 95 percent confidence interval:
## 0.000 115.966
## sample estimates:
## variance of x
## 42.84444
##
## X-squared test for variance
##
## data: contenido
## X-squared = 9.64, df = 9, p-value = 0.3804
## alternative hypothesis: true variance is greater than 40
## 95 percent confidence interval:
## 0.000 115.966
## sample estimates:
## variance of x
## 42.84444
Como el valor-P es mayor que el nivel de significancia 5%, no se rechaza la hipótesis nula, es decir, las evidencias no son suficientes para afirmar que la varianza del proceso de llenado es mayor que 40 unidades.
σ21 / σ22
Para realizar este tipo de prueba se puede usar la función var.test.
Ejemplo Se realiza un estudio para comparar dos tratamientos que se aplicarán a frijoles crudos con el objetivo de reducir el tiempo de cocción. El tratamiento T1 es a base de bicarbonato de sodio, el T2 es a base de cloruro de sodio o sal común. La variable respuesta es el tiempo de cocción en minutos. Los datos se muestran abajo. ¿Son las varianzas de los tiempos iguales o diferentes? Usar α = 0.05 .
T1: 76, 85, 74, 78, 82, 75, 82.
T2: 57, 67, 55, 64, 61, 63, 63.
En este problema interesa probar si las varianzas poblacionales son
iguales o no, por esta razón el cociente de
σ2T1 / σ2T2 se iguala al valor de 1 que será el valor de referencia de
la prueba.
H0: σ2T1 / σ2T2 = 1
H1: σ2T1 / σ2T2 ≠ 1
Para ingresar los datos se hace lo siguiente:
T1 <- c(76, 85, 74,78, 82, 75, 82)
T2 <- c(57, 67, 55, 64, 61, 63, 63)
Primero se debe explorar si las muestras provienen de una población normal y para esto se construyen los QQplot que se muestran en la Figura 24.2, a continuación el código para generar la Figura 24.2.
q1 <- qqnorm(T1, plot.it=FALSE)
q2 <- qqnorm(T2, plot.it=FALSE)
plot(range(q1$x, q2$x), range(q1$y, q2$y), type="n", las=1,
xlab='Theoretical Quantiles', ylab='Sample Quantiles')
points(q1, pch=19)
points(q2, col="red", pch=19)
qqline(T1, lty='dashed')
qqline(T2, col="red", lty="dashed")
legend('topleft', legend=c('T1', 'T2'), bty='n',
col=c('black', 'red'), pch=19)
De la Figura 24.2 se observa que los puntos están bastante alineados lo cual nos lleva a pensar que las muestras si provienen de una población normal, para estar más seguros se aplicará una prueba formal para estudiar la normalidad.
A continuación el código para aplicar la prueba de normalidad Kolmogorov-Smirnov a cada una de las muestras.
require(nortest) # Se debe tener instalado
## Loading required package: nortest
lillie.test(T1)$p.value
## [1] 0.520505
## [1] 0.520505
lillie.test(T2)$p.value
## [1] 0.3952748
## [1] 0.3952748
Del QQplot mostrado en la Figura 24.2 y las pruebas de normalidad se observa que se puede asumir que las poblaciones son normales.
Para resolver este ejercicio podemos usar la función var.test de
stats o de stests. En esta ocasión vamos a usar stats para probar
H0 , a continuación el código para realizar la prueba.
stats::var.test(x=T1, y=T2, null.value=1,
alternative="two.sided",
conf.level=0.95)
##
## F test to compare two variances
##
## data: T1 and T2
## F = 1.011, num df = 6, denom df = 6, p-value = 0.9897
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.1737219 5.8838861
## sample estimates:
## ratio of variances
## 1.011019
##
## F test to compare two variances
##
## data: T1 and T2
## F = 1.011, num df = 6, denom df = 6, p-value = 0.9897
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.1737219 5.8838861
## sample estimates:
## ratio of variances
## 1.011019
Como el valor-P es 0.9897 (reportado como 1 en la salida anterior), muy superior al nivel α de significancia 5%, se puede concluir que las varianzas son similares.
Ejemplo El arsénico en agua potable es un posible riesgo para la salud. Un artículo reciente reportó concentraciones de arsénico en agua potable en partes por billón (ppb) para diez comunidades urbanas y diez comunidades rurales. Los datos son los siguientes:
Urbana: 3, 7, 25, 10, 15, 6, 12, 25, 15, 7
Rural: 48, 44, 40, 38, 33, 21, 20, 12, 1, 18
Solución
¿Son las varianzas de las concentraciones iguales o diferentes?
Usar
α = 0.05.
En este problema interesa probar:
H0: σ2Urb / σ2Rur = 1
H1: σ2Urb / σ2Rur ≠ 1
Para ingresar los datos se hace lo siguiente:
urb <- c(3, 7, 25, 10, 15, 6, 12, 25, 15, 7)
rur <- c(48, 44, 40, 38, 33, 21, 20, 12, 1, 18)
A continuación el código para aplicar la prueba de normalidad Kolmogorov-Smirnov, a continuación el código usado.
require(nortest) # Se debe tener instalado
lillie.test(urb)$p.value
## [1] 0.5522105
## [1] 0.5522105
lillie.test(rur)$p.value
## [1] 0.6249628
## [1] 0.6249628
Del QQplot mostrado en la Figura 24.3 y las pruebas de normalidad se observa que se pueden asumir poblaciones normales.
Para resolver este ejercicio podemos usar la función var.test de
stats o de stests. En esta ocasión vamos a usar stests para probar
H0, a continuación el código para realizar la prueba.
stests::var.test(x=urb, y=rur, null.value=1,
alternative="two.sided",
conf.level=0.95)
##
## F test to compare two variances
##
## data: urb and rur
## F = 0.24735, num df = 9, denom df = 9, p-value = 0.04936
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.06143758 0.99581888
## sample estimates:
## ratio of variances
## 0.2473473
##
## F test to compare two variances
##
## data: urb and rur
## F = 0.24735, num df = 9, denom df = 9, p-value = 0.04936
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.06143758 0.99581888
## sample estimates:
## ratio of variances
## 0.2473473
Como el valor-P es 0.0493604 (reportado como 0.05 en la salida
anterior) y es menor que el nivel de significancia
α = 0.05, se puede concluir que las varianzas no son iguales.
#####24.6 Prueba de hipótesis para la diferencia de medias μ1 − μ2 con varianzas iguales
Los argumentos a definir dentro de t.test para hacer la prueba son:
x: vector numérico con la información de la muestra 1, y: vector numérico con la información de la muestra 2, alternative: tipo de hipótesis alterna. Los valores disponibles son “two.sided” cuando la alterna es ≠, “less” para el caso < y “greater” para >. mu: valor de referencia de la prueba. var.equal=TRUE: indica que las varianzas son desconocidas pero iguales. conf.level: nivel de confianza para reportar el intervalo de confianza asociado (opcional).
Ejemplo Retomando el ejemplo de los fríjoles, ¿existen diferencias entre los tiempos de cocción de los fríjoles con T1 y T2? Usar un nivel de significancia del 5%.
Primero se construirá un boxplot comparativo para los tiempos de cocción diferenciando por el tratamiento que recibieron. Abajo el código para obtener en este caso el boxplot. En la Figura 24.4 se muestra el boxplot, de esta figura se observa que las cajas de los boxplot no se traslapan, esto es un indicio de que las medias poblacionales, μ1 y μ2, son diferentes, se observa también que el boxplot para el tratamiento T1 está por encima del T2.
datos <- data.frame(tiempo=c(T1, T2), trat=rep(1:2, each=7))
boxplot(tiempo ~ trat, data=datos, las=1,
xlab='Tratamiento', ylab='Tiempo (min)')
En este problema interesa estudiar el siguiente conjunto de hipótesis.
H0: μ1 − μ2 = 0
H1: μ1 − μ2 ≠ 0
El código para realizar la prueba es el siguiente:
t.test(x=T1, y=T2, alternative="two.sided", mu=0,
paired=FALSE, var.equal=TRUE, conf.level=0.97)
##
## Two Sample t-test
##
## data: T1 and T2
## t = 7.8209, df = 12, p-value = 4.737e-06
## alternative hypothesis: true difference in means is not equal to 0
## 97 percent confidence interval:
## 11.94503 22.91212
## sample estimates:
## mean of x mean of y
## 78.85714 61.42857
##
## Two Sample t-test
##
## data: T1 and T2
## t = 7.8209, df = 12, p-value = 4.737e-06
## alternative hypothesis: true difference in means is not equal to 0
## 97 percent confidence interval:
## 11.94503 22.91212
## sample estimates:
## mean of x mean of y
## 78.85714 61.42857
De la prueba se obtiene un valor-P muy pequeño, por lo tanto, podemos concluir que si hay diferencias significativas entre los tiempos promedios de cocción con T1 y T2, resultado que ya se sospechaba al observar la Figura 24.4.
Si el objetivo fuese elegir el tratamiento que minimice los tiempos de cocción se recomendaría el tratamiento T2, remojo de fríjoles en agua con sal.
Ejemplo
Retomando el ejemplo de la concentración de arsénico en el agua, ¿existen diferencias entre las concentraciones de arsénico de la zona urbana y rural? Usar un nivel de significancia del 5%.
Primero se construirá un boxplot comparativo para las concentraciones
de arsénico diferenciando por la zona donde se tomaron las muestras.
Abajo el código para obtener en este caso el boxplot. En la Figura 24.5
se muestra el boxplot, de esta figura se observa que las cajas de los
boxplot no se traslapan, esto es un indicio de que las medias
poblacionales,
μ1 y μ 2, son diferentes, se observa también que el boxplot para la zona
rural está por encima del de la zona urbana.
datos <- data.frame(Concentracion=c(urb, rur),
Zona=rep(c('Urbana', 'Rural'), each=10))
boxplot(Concentracion ~ Zona, data=datos, las=1,
xlab='Zona', ylab='Concentración arsénico (ppb)')
En este problema interesa estudiar el siguiente conjunto de hipótesis.
H0: μ1 − μ2 = 0
H1: μ1 − μ2 ≠ 0
El código para realizar la prueba es el siguiente:
t.test(x=urb, y=rur, alternative="two.sided", mu=0,
paired=FALSE, var.equal=FALSE, conf.level=0.95)
##
## Welch Two Sample t-test
##
## data: urb and rur
## t = -2.7669, df = 13.196, p-value = 0.01583
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -26.694067 -3.305933
## sample estimates:
## mean of x mean of y
## 12.5 27.5
##
## Welch Two Sample t-test
##
## data: urb and rur
## t = -2.7669, df = 13.196, p-value = 0.01583
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -26.694067 -3.305933
## sample estimates:
## mean of x mean of y
## 12.5 27.5
De la prueba se obtiene un valor-P pequeño, por lo tanto, podemos concluir que si hay diferencias significativas entre las concentraciones de arsénico del agua entre las dos zonas, resultado que ya se sospechaba al observar la Figura 24.5. La zona que presenta mayor concentración media de arsénico en el agua es la rural.
#####24.8 Prueba de hipótesis para la diferencia de proporciones p1 − p2
Para realizar pruebas de hipótesis para la proporción se usa la función prop.test y es necesario definir los siguientes argumentos:
x: vector con el conteo de éxitos de las dos muestras, n: vector con el número de ensayos de las dos muestras, alternative: tipo de hipótesis alterna. Los valores disponibles son “two.sided” cuando la alterna es ≠, “less” para el caso < y “greater” para >. p: valor de referencia de la prueba. conf.level: nivel de confianza para reportar el intervalo de confianza asociado (opcional).
Ejemplo Se quiere determinar si un cambio en el método de fabricación de una piezas ha sido efectivo o no. Para esta comparación se tomaron 2 muestras, una antes y otra después del cambio en el proceso y los resultados obtenidos son los siguientes.
prop.test(x=c(75, 80), n=c(1500, 2000),
alternative='greater', conf.level=0.90)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(75, 80) out of c(1500, 2000)
## X-squared = 1.7958, df = 1, p-value = 0.09011
## alternative hypothesis: greater
## 90 percent confidence interval:
## 0.0002765293 1.0000000000
## sample estimates:
## prop 1 prop 2
## 0.05 0.04
Realizar una prueba de hipótesis con un nivel de significancia del 10%.
En este problema interesa estudiar el siguiente conjunto de hipótesis.
H0: pantes − pdespues = 0
H1: pantes − pdespues > 0
Para realizar la prueba se usa la función prop.test como se muestra a continuación.
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(75, 80) out of c(1500, 2000)
## X-squared = 1.7958, df = 1, p-value = 0.09011
## alternative hypothesis: greater
## 90 percent confidence interval:
## 0.0002765293 1.0000000000
## sample estimates:
## prop 1 prop 2
## 0.05 0.04
Del reporte anterior se observa que el Valor-P es 9%, por lo tanto no hay evidencias suficientes para pensar que el porcentaje de defectuosos después del cambio ha disminuído.