Diferencia entre dos medias

\[t = \frac{\bar X_1 - \bar X_2}{s_{\bar X_1-\bar X_2}}\]

donde el estadístico: \(s_{\bar X_1-\bar X_2}\), se obtiene de una demostración matemática-estadística que establece que la varianza de la diferencia de dos muestras es igual a la suma de las varianzas de las dos muestras. Reemplazando las varianzas por sus estimadores en las muestras, obtenemos la siguiente fórmula para el cálculo de \(s_{\bar X_1-\bar X_2}\):

\[s_{\bar X_1-\bar X_2} = \sqrt{\frac{s_p^{2}}{n_1}+\frac{s_p^{2}}{n_2}}\] donde \(n_1\) y \(n_2\) son los tamaños de las muestras, y \(s_p^{2}\) (varianza agrupada) se calcula como:

\[s_p^{2} = \frac{SS_1 + SS_2}{\nu_1 + \nu_2}\] donde \(\nu_1\) y \(\nu_2\) son los grados de libertad de las muestras, \(SS\) son las sumas de las diferencias al cuadrado de cada muestra:

\[SS = \sum{(X_i - \bar X)^2}\] Nuestra fórmula para \(t\) es entonces:

\[t = \frac{\bar X_1 - \bar X_2}{\sqrt{\frac{s_p^{2}}{n_1}+\frac{s_p^{2}}{n_2}}}\]


Prueba t de dos colas

Ejemplo 1: Tenemos datos de un experimento con dos drogas (A y B) que afectan la coagulación de la sangre (medida en minutos) en conejos adultos. Las hipótesis son:

\[H_0:\mu_1 = \mu_2 \quad H_A:\mu_1 \neq \mu_2\]

library(kableExtra)
#datos
drogaA <- c(8.8,8.4,7.9,8.7,9.1,9.6)
drogaB <- c(9.9,9.0,11.1,9.6,8.7,10.4,9.5)
#tabla de datos
tabla <- list(Droga_A = drogaA, Droga_B = drogaB)
as.data.frame(lapply(tabla, `length<-`, max(sapply(tabla, length))))
#tamaño de las muestras
nA <- length(drogaA)
nB <- length(drogaB)
#grados de libertad
vA = nA - 1
vB = nB - 1
#medias
mediaA <- mean(drogaA)
mediaB <- mean(drogaB)
#sumas de cuadrados de diferencias
ssA <- sum((drogaA - mean(drogaA))^2)
ssB <- sum((drogaB - mean(drogaB))^2)
#tablas parámetros de las muestras
dA <- data.frame(nA, vA, mediaA, ssA)
dB <- data.frame(nB, vB, mediaB, ssB)
kable(dA, format = "markdown")
nA vA mediaA ssA
6 5 8.75 1.695
kable(dB, format = "markdown")
nB vB mediaB ssB
7 6 9.742857 4.017143
#varianza agrupada
s2p <- (ssA+ssB)/(vA+vB)
sprintf("s2_p: %g", s2p)
## [1] "s2_p: 0.519286"
#error estándar de la diferencia entre medias
sxAxB <- sqrt((s2p/nA) + (s2p/nB))
sprintf("s_xA-xB: %g", sxAxB)
## [1] "s_xA-xB: 0.400913"
#cálculo de t
tcalc <- abs((mediaA-mediaB)/sxAxB)
sprintf("t-calculada: %g", tcalc)
## [1] "t-calculada: 2.47649"
#t para un alfa dado
alfa = 0.05
P1 = 1 - alfa
P2 = 1 - alfa/2
gl = vA + vB
t1 <- qt(P1, gl)
t2 <- qt(P2, gl)
sprintf("t_1cola: %g", t1)
## [1] "t_1cola: 1.79588"
sprintf("t_2colas: %g", t2)
## [1] "t_2colas: 2.20099"
#p-errorI para la t-calculada
Ptcalc1 <- pt(tcalc, gl, lower.tail = FALSE)
sprintf("P_errorI_1cola: %g", Ptcalc1)
## [1] "P_errorI_1cola: 0.0153824"
sprintf("P_errorI_2cola: %g", Ptcalc1*2)
## [1] "P_errorI_2cola: 0.0307649"

Prueba t dos colas con R

#hipótesis alterna: droga A - drogaB diferente de 0 (menor o mayor)
pruebat <- t.test(drogaA,drogaB, var.equal = TRUE, alternative = "two.sided")
pruebat
## 
##  Two Sample t-test
## 
## data:  drogaA and drogaB
## t = -2.4765, df = 11, p-value = 0.03076
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.8752609 -0.1104534
## sample estimates:
## mean of x mean of y 
##  8.750000  9.742857

Prueba t de una cola

Cuando el investigador está interesado en probar la diferencia entre muestras en una dirección, las hipótesis pasan a ser una de las siguientes alternativas:

\[H_0 : \mu_1 \leq \mu_2 \quad H_A : \mu_1 > \mu_2\] \[H_0 : \mu_1 \geq \mu_2 \quad H_A : \mu_1 < \mu_2\] Ejemplo 2: Un jardinero experimenta con un nuevo fertilizante, el cual es anunciado como mejor a otro que ha estado usando el jardinero. El jardinero aplica una misma cantidad del fertilizante tradicional (T) a 10 plantas de una especie, y del nuevo fertilizante (N) a 8 plantas de la misma especie; se sabe que esta especie responde a los fertilizantes con un mayor crecimiento en altura (cm). El jardinero quiere probar si el nuevo fertilizante produce una media de altura (\(\mu_2\)) mayor que la media de altura (\(\mu_1\)) de las plantas con fertilizante tradicional:

\[H_0 : \mu_1 \geq \mu_2 \quad H_A : \mu_1 < \mu_2\]

library(kableExtra)
#datos
fertT <- c(48.2,54.6,58.3,47.8,51.4,52.0,55.2,49.1,49.9,52.6)
fertN <- c(52.3,57.4,55.6,53.2,61.3,58.0,59.8,54.8)
#tabla de datos
tabla <- list(Fert_Trad. = fertT, Fert_Nuevo = fertN)
as.data.frame(lapply(tabla, `length<-`, max(sapply(tabla, length))))
#tamaño de las muestras
nT <- length(fertT)
nN <- length(fertN)
#grados de libertad
vT = nT - 1
vN = nN - 1
#medias
mediaT <- mean(fertT)
mediaN <- mean(fertN)
#sumas de cuadrados de diferencias
ssT <- sum((fertT - mean(fertT))^2)
ssN <- sum((fertN - mean(fertN))^2)
#tablas parámetros de las muestras
dT <- data.frame(nT, vT, mediaT, ssT)
dN <- data.frame(nN, vN, mediaN, ssN)
kable(dT, format = "markdown")
nT vT mediaT ssT
10 9 51.91 102.229
kable(dN, format = "markdown")
nN vN mediaN ssN
8 7 56.55 69.2
#varianza agrupada
s2p <- (ssT+ssN)/(vT+vN)
sprintf("s2_p: %g", s2p)
## [1] "s2_p: 10.7143"
#error estándar de la diferencia entre medias
sxTxN <- sqrt((s2p/nT) + (s2p/nN))
sprintf("s_xT-xN: %g", sxTxN)
## [1] "s_xT-xN: 1.55265"
#cálculo de t
t.calc <- abs((mediaT-mediaN)/sxTxN)
sprintf("t-calculada: %g", t.calc)
## [1] "t-calculada: 2.98844"
#t para un alfa dado
alfa = 0.05
Pr = 1 - alfa
gl = vT + vN
t.alfa <- qt(Pr, gl)
sprintf("t_alfa1cola: %g", t.alfa)
## [1] "t_alfa1cola: 1.74588"
#p-errorI para la t-calculada
Prcalc1 <- pt(t.calc, gl, lower.tail = FALSE)
sprintf("P_errorI_1cola: %g", Prcalc1)
## [1] "P_errorI_1cola: 0.0043432"

Prueba t una cola con R

#hipótesis alterna: fertT - fertN < 0
pruebat <- t.test(fertT, fertN, var.equal = TRUE, alternative = "less")
pruebat
## 
##  Two Sample t-test
## 
## data:  fertT and fertN
## t = -2.9884, df = 16, p-value = 0.004343
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##       -Inf -1.929255
## sample estimates:
## mean of x mean of y 
##     51.91     56.55

Prueba t pareada

  • En las pruebas anteriores con dos muestras, cada medición se considera independiente una de otra.
  • En algunos casos las muestras son mediciones realizadas en las mismas unidades o individuos, por ejemplo, cuando la misma unidad o individuo es medido en dos instancias, o se usan unidades e individuos pareados de antemano.
  • Las hipótesis para esta prueba son (caso dos colas):

\[H_0 : \mu_1-\mu_2 = 0 \quad H_A : \mu_1-\mu_2 \neq 0\] También pueden escribirse de la siguiente forma, usando la diferencia entre las mediciones pareadas: \[H_0 : \mu_d = 0 \quad H_A : \mu_d \neq 0\]

  • El estadístico para esta prueba es:

\[t = \frac{\bar d}{s_{\bar d}}\]

  • La prueba t pareada no tiene el requisito de normalidad e igualdad de varianza de los datos, como en las pruebas de dos muestras diferentes, sin embargo se asume que las diferencias entre los pares están distribuidas normalmente.

Ejemplo 3: Queremos probar si las patas izquierdas delanteras de una muestra de 10 de venados son diferentes en longitud (cm), en comparación con las patas izquierdas traseras del mismo individuo. Podríamos realizar la comparación entre dos muestras, pero introduciríamos un factor de diversidad entre los venados. Para controlar ese efecto, vamos a comparar (calcular diferencia) entre la pata izquierda anterior y la pata izquierda posterior de cada individuo. Las hipótesis serían: \[H_0 : \mu_d = 0 \quad H_A : \mu_d \neq 0\] Como no tenemos de antemano una hipótesis alterna direccional (diferencia mayor o menor), la prueba es una de dos colas, y vamos a considerar un \(\alpha\) aceptable de 0.05.

library(kableExtra)
#datos de longitud patas izquierdas delanteras y traseras de venado (cm)
pataD <- c(142,140,144,144,142,146,149,150,142,148)
pataT <- c(138,136,147,139,143,141,143,145,136,146)
#diferencias
dif.patas <- pataD-pataT
#tabla de datos
tabla <- list(L_pata_del. = pataD, L_pata_tra. = pataT, Diferencias = dif.patas)
as.data.frame(lapply(tabla, `length<-`, max(sapply(tabla, length))))
#tamaño de muestra
n <- length(dif.patas)
#media
m.dif <- mean(dif.patas)
#varianza
v.dif <- var(dif.patas)
#error estándar
es.dif <- sqrt(v.dif/n)
#grados de libertad
gl = n - 1
#tabla de estadísticos
df <- data.frame(n, m.dif, v.dif, es.dif, gl)
kable(df, format = "markdown")
n m.dif v.dif es.dif gl
10 3.3 9.344444 0.9666667 9
#t calculada
t.calc <- m.dif/es.dif
sprintf("t-calculada: %g", t.calc)
## [1] "t-calculada: 3.41379"
# t tabla para alfa = 0.05 dos colas
t.alfa <- qt(0.975, gl)
sprintf("t_alfa2cola: %g", t.alfa)
## [1] "t_alfa2cola: 2.26216"
#probabilidad error tipo I
Pr <- pt(t.calc, gl, lower.tail = FALSE)
sprintf("P_errorI_2cola: %g", Pr*2)
## [1] "P_errorI_2cola: 0.00770322"

Prueba t pareada dos colas en R

#hipótesis alterna: diferencias no iguales a 0
pruebatpar <- t.test(pataD, pataT, paired = TRUE, alternative = "two.sided")
pruebatpar 
## 
##  Paired t-test
## 
## data:  pataD and pataT
## t = 3.4138, df = 9, p-value = 0.007703
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  1.113248 5.486752
## sample estimates:
## mean of the differences 
##                     3.3

Supuestos para la prueba t

Antes de continuar, debemos recordar que para aplicar las pruebas de hipótesis, usando la t de Student, asumimos: (i) una distribución normal de los datos de cada muestra, y (ii) varianzas iguales de las muestras. A continuación se muestran las pruebas para estos supuestos.

Prueba de distribución normal para muestras aleatorias

Gráficamente podemos observar si los datos de una muestra se ajustan a una distribución normal, usando un ‘q-q normal plot’, en el cual se grafican los cuantiles estandarizados de los valores de las muestras y los cuantiles teóricos. Si la distribución de los datos es normal, los puntos deben caer sobre la recta de igualdad.

#datos ejemplo 1
drogaA <- c(8.8,8.4,7.9,8.7,9.1,9.6)
drogaB <- c(9.9,9.0,11.1,9.6,8.7,10.4,9.5)
#gráficas
qqnorm(drogaA, main = "Droga A"); qqline(drogaA)

qqnorm(drogaB, main = "Droga B"); qqline(drogaB)

También podemos utilizar pruebas estadísticas para probar la normalidad; en estas pruebas la normalidad es la hipótesis nula, por lo tanto si obtenemos un valor de probabilidad menor que un nivel \(\alfa\) establecido, entonces tenemos que rechazar la hipótesis nula, y no tenemos normalidad en los datos.

library(nortest)
#prueba de normalidad Shapiro-Wilks
shapiro.test(drogaA)
## 
##  Shapiro-Wilk normality test
## 
## data:  drogaA
## W = 0.99456, p-value = 0.9973
shapiro.test(drogaB)
## 
##  Shapiro-Wilk normality test
## 
## data:  drogaB
## W = 0.97211, p-value = 0.9132
#prueba de normalidad Kolmogorov-Smirnov
ks.test(drogaA, "pnorm", mean(drogaA), sqrt(var(drogaA)))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  drogaA
## D = 0.13245, p-value = 0.9994
## alternative hypothesis: two-sided
ks.test(drogaB, "pnorm", mean(drogaB), sqrt(var(drogaB)))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  drogaB
## D = 0.14073, p-value = 0.995
## alternative hypothesis: two-sided

Prueba de varianzas iguales para muestras

El otro aspecto a probar, para poder usar la prueba t regular, es la igualdad de las varianzas de las muestras. Esto se puede realizar usando la prueba de razón de varianzas, cuando los datos tienen distribución normal. En caso de no-normalidad, se pueden realizar diversas pruebas, como la de Levene.

Las hipótesis a probar son:

\[H_0 : \sigma_1{^2} = \sigma_2{^2} \quad H_A : \sigma_1{^2} \neq \sigma_2{^2}\]

library(kableExtra)
#datos ejemplo 1
drogaA <- c(8.8,8.4,7.9,8.7,9.1,9.6)
drogaB <- c(9.9,9.0,11.1,9.6,8.7,10.4,9.5)
#tamaño de las muestras
nA <- length(drogaA)
nB <- length(drogaB)
#grados de libertad
vA = nA - 1
vB = nB - 1
#sumas de cuadrados de diferencias
ssA <- sum((drogaA - mean(drogaA))^2)
ssB <- sum((drogaB - mean(drogaB))^2)
#varianzas
s2A <- ssA/vA
s2B <- ssB/vB
#tablas parámetros de las muestras
dA <- data.frame(nA, vA, ssA, s2A)
dB <- data.frame(nB, vB, ssB, s2B)
kable(dA, format = "markdown")
nA vA ssA s2A
6 5 1.695 0.339
kable(dB, format = "markdown")
nB vB ssB s2B
7 6 4.017143 0.6695238
#estadístico F calculado
Fcalc <- s2A/s2B
sprintf("F calculado: %g", Fcalc)
## [1] "F calculado: 0.50633"
#F teórico para alfa = 0.05 (dos colas)
Ftabla <- qf(c(0.025,0.975), vA, vB)
sprintf("F alfa,v1,v2: %g", Ftabla)
## [1] "F alfa,v1,v2: 0.143314" "F alfa,v1,v2: 5.98757"
#Probabilidad error tipo I
Pr <- pf(Fcalc, vA, vB)
sprintf("Pr Fcalc: %g", Pr)
## [1] "Pr Fcalc: 0.236082"

Si el valor de F no es significativo, no rechazamos la hipótesis nula de igualdad de las varianzas.

Cuando los valores de las muestras no se ajustan a la distribución normal, podemos usar la prueba de Levene para la igualdad de varianza; las hipótesis son las mismas de la prueba anterior.

library(car)
## Loading required package: carData
#acomodando los datos en data.frame con droga como grupo
df.droga <- data.frame(droga=c(rep("A", times=length(drogaA)),
                               rep("B", times=length(drogaB))),
                       min=c(drogaA, drogaB))
df.droga
#prueba de Levene para dos varianzas, alfa = 0.05
leveneTest(df.droga$min, df.droga$droga, location=c("mean"))

Prueba t con varianzas diferentes

Cuando ocurre que las varianzas resultan ser diferentes, según las pruebas anteriores, pero los datos tienen distribución normal, o el tamaño de muestra es grande (> 30), podemos usar una variante de la prueba t para varianzas diferentes (prueba Behrens-Fisher).

El estadístico t a usar se transforma en el estadístico t’, debido a que no se puede calcular una varianza agrupada (\(s_p{^2}\)) al ser las varianzas diferentes.

\[t' = \frac{\bar X_1 - \bar X_2}{\sqrt{s_\bar {X_1}{^2} + s_\bar {X_2}{^2}}}\] Donde:

\[s_\bar {X_i}{^2} = \frac {{s_i}^2} {n_i}\] La otra diferencia con la prueba t regular, es que los grados de libertad no son la suma de los grados de libertad de las muestras. Se usa la siguiente fórmula:

\[v' = \frac{(s_\bar {X_1}{^2} + s_\bar {X_2}{^2})^2}{\frac{(s_\bar {X_1}{^2})^2}{n_1 - 1} + \frac{(s_\bar {X_2}{^2})^2}{n_2 - 1}}\]

Ejemplo 4: Los datos son los tiempos (días) que toman en eclosionar huevos de cucaracha sometidos a dos temperaturas (T1:30ºC, T2:10ºC). Queremos comprobar las hipótesis:

\[H_0: \mu_1 = \mu_2 \quad H_A: \mu_1 \neq \mu_2\] pero antes haremos la prueba de igualdad de varianza.

library(car)
#datos tiempo para eclosión en días
T1 <- c(40,38,32,37,39,41,35)
T2 <- c(36,45,32,52,59,41,48,55)
#ahora probaremos si las varianzas son iguales
#primero acomodamos los datos en data.frame con Temp como grupo
df.T <- data.frame(Temp=c(rep("T130C", times=length(T1)),
                               rep("T210C", times=length(T2))),
                       dias=c(T1, T2))
#prueba de Levene para dos varianzas, alfa = 0.05
leveneTest(df.T$dias, df.T$Temp, location=c("mean"))

Rechazamos la hipótesis de que las varianzas son iguales, y procedemos a realizar la prueba de diferencias de las medias usando t’.

library(kableExtra)
#estadísticas básicas
nT1 <- length(T1)
nT2 <- length(T2)
vT1 <- nT1 - 1
vT2 <- nT2 - 1
mediaT1 <- mean(T1)
mediaT2 <- mean(T2)
varT1 <- var(T1)
varT2 <- var(T2)
var.mediaT1 <- varT1/nT1
var.mediaT2 <- varT2/nT2
#tablas
dT1 <- data.frame(nT1, vT1, mediaT1, varT1, var.mediaT1)
dT2 <- data.frame(nT2, vT2, mediaT2, varT2, var.mediaT2)
kable(dT1, format = "markdown")
nT1 vT1 mediaT1 varT1 var.mediaT1
7 6 37.42857 9.619048 1.37415
kable(dT2, format = "markdown")
nT2 vT2 mediaT2 varT2 var.mediaT2
8 7 46 87.42857 10.92857
#error estándar de la diferencia de las medias
s.prima <- sqrt(var.mediaT1 + var.mediaT2)
sprintf("error estándar dif medias: %g", s.prima)
## [1] "error estándar dif medias: 3.50752"
#t prima para varianzas diferentes
t.prima <- (mediaT1 - mediaT2)/s.prima
sprintf("t': %g", t.prima)
## [1] "t': -2.44373"
#grados de libertad ajustados
v.prima <- ((var.mediaT1 + var.mediaT2)^2)/(((var.mediaT1^2)/vT1) + ((var.mediaT2^2)/vT2))
sprintf("v': %g", v.prima)
## [1] "v': 8.71036"

Para obtener el valor teórico podemos interpolar entre los valores disponibles en la tabla t regular (o usar el valor entero inferior de \(v'\)).

También podemos usar funciones de R:

tprimoteorico <- qt(0.025,8.7)
sprintf("t'(0.05(2),8.7): %g", tprimoteorico)
## [1] "t'(0.05(2),8.7): -2.2741"
Pr <- pt(-2.44373, 8.7)*2
sprintf("Pr t': %g", Pr)
## [1] "Pr t': 0.0380115"

En conclusión, rechazamos la \(H_0\) de igualdad de las medias de los días hasta eclosión, y aceptamos la hipótesis alterna sobre el efecto de la temperatura en el tiempo de eclosión.

Intervalo de confianza para las medias

Para una muestra utilizamos la fórmula del intervalo de confianza (IC), para una probabilidad dada (P), usualmente 95%:

\[IC(P) : \bar{X} \pm t_{\alpha(2),\nu} s_{\bar X}\]

En el caso de dos muestras, con una varianza agrupada \(s_{p}^2\), la fórmula es la siguiente, para cada media (\(\bar X_i\)):

\[\bar{X_i} \pm t_{\alpha(2),\nu} \sqrt{\frac{s_{p}^2}{n_i}}\]

Usaremos los datos del Ejemplo 1, con una \(s_{p}^2\) = 0.5193 min2:

library(kableExtra)
#datos
drogaA <- c(8.8,8.4,7.9,8.7,9.1,9.6)
drogaB <- c(9.9,9.0,11.1,9.6,8.7,10.4,9.5)
#tabla de datos
tabla <- list(Droga_A = drogaA, Droga_B = drogaB)
as.data.frame(lapply(tabla, `length<-`, max(sapply(tabla, length))))
#tamaño de las muestras
nA <- length(drogaA)
nB <- length(drogaB)
#grados de libertad
vA = nA - 1
vB = nB - 1
#medias
mediaA <- mean(drogaA)
mediaB <- mean(drogaB)
#sumas de cuadrados de diferencias
ssA <- sum((drogaA - mean(drogaA))^2)
ssB <- sum((drogaB - mean(drogaB))^2)
#varianza agrupada
s2p <- (ssA+ssB)/(vA+vB)
#tabla de cálculos
df.calc <- data.frame(mediaA, nA, mediaB, nB, s2p)
kable(df.calc, format = "markdown", col.names = c("m droga A", "n droga A", "m droga B", "n droga B", "var. agrupada"))
m droga A n droga A m droga B n droga B var. agrupada
8.75 6 9.742857 7 0.5192857
#ic media droga A
icA <- qt(0.975, vA+vB)*sqrt(s2p/nA)
l.icA <- mediaA - icA
h.icA <- mediaA + icA
df.icA <- data.frame(l.icA, mediaA, h.icA)
kable(df.icA, format = "markdown", col.names = c("lim inf ic(95)", "m droga A", "lim sup ic(95)"))
lim inf ic(95) m droga A lim sup ic(95)
8.102493 8.75 9.397507
#ic media droga B
icB <- qt(0.975, vA+vB)*sqrt(s2p/nB)
l.icB <- mediaB - icB
h.icB <- mediaB + icB
df.icB <- data.frame(l.icB, mediaB, h.icB)
kable(df.icB, format = "markdown", col.names = c("lim inf ic(95)", "m droga B", "lim sup ic(95)"))
lim inf ic(95) m droga B lim sup ic(95)
9.143382 9.742857 10.34233

Selección de pruebas de hipótesis para dos muestras

Vamos a repasar las alternativas para pruebas de hipótesis con dos muestras:

  • Si las dos muestras representan problaciones distribuidas normalmente, y sus varianzas son iguales (o si se desvían moderadamente de una distribución normal, y sus varianzas son semejantes): se usa la prueba t para dos muestras, para un \(\alpha\) establecido (si hay algo de desviación de la normalidad, el valor de error tipo I debe estar muy por debajo de \(\alpha\) para llegar a una conclusión sobre las hipótesis).

  • Si las dos poblaciones muestreadas tienen distribución normal (o con poca desviación), pero sus varianzas son muy diferentes: podemos usar la prueba t modificada de Behrens-Fisher.

  • Si las dos poblaciones muestreadas tienen distribuciones muy diferentes de la normalidad, pero su forma o varianza son similares: se pueden utilizar pruebas no-paramétricas, que no requieren el cumplimiento extricto de los supuestos para las pruebas paramétricas.

  • Si no hay normalidad, ni similitud en las varianzas: las alternativas pueden ser:

    1. usar transformaciones de los datos, para tratar de llegar a una distribución más o menos normal, y con varianza similar;
    1. buscar pruebas no-paramétricas especiales;
    1. reportar solamente los resultados y gráficas, sin llegar a conclusiones definitivas. También se puede considerar repetir las observaciones o experimentos con un mayor tamaño de las muestras.

Pruebas no-paramétricas

  • En las pruebas de hipótesis anteriores, se hacen inferencias acerca de los parámetros de las poblaciones de donde se sacan las muestras, examinando los estadísticos de estas muestras.

  • En aquellos casos en que no se cumplen los supuestos de estos métodos paramétricos, podemos acudir a métodos de comparación que no recurren a esos parámetros, y por eso se denominan no-paramétricos.

  • Las pruebas no-paramétricas más comunes son:
    • Prueba de Mann-Whitney
    • Prueba de rango-suma de Wilcoxon (‘Wilcoxon rank-sum’)

Prueba de Mann-Whitney para dos muestras

  • Para este tipo de pruebas no se utilizan los valores reales de los datos, sino el rango de las mediciones ordenadas.

  • Las mediciones de cada muestra se ordenan de menor a mayor (también puede ser al revés), y luego se le procede a dar un número de rango, tomando en cuenta los valores de ambas muestras.

  • Si hay valores iguales, se les asigna el valor promedio de los rangos que le correspondería si no fueran iguales, pero contiguos.

  • Una vez determinados los rangos, se calcula la suma de rangos de cada muestra (R1 y R2).

  • El estadístico para la prueba es el siguiente (\(n_1\) y \(n_2\) son los tamaños de cada muestra):

\[U = n{_1}n{_2} + \frac {n{_1}(n{_1} + 1)}{2} - R_1\]

Cuando es una prueba de dos colas, es necesario calcular \(U'\):

\[U' = n{_2}n{_1} + \frac {n{_2}(n{_2} + 1)}{2} - R_2\] Para una prueba de dos colas, se utiliza el valor mayor entre U y U’; para la prueba de una cola (con los datos en orden de menor a mayor) se decide según los siguientes criterios:

  • si la hipótesis alterna es que el grupo 1 es menor que el grupo 2, se utiliza U

  • si la hipótesis alterna es que el grupo 1 es mayor que el grupo 2, se utiliza U’

Ejemplo 5: Se desea saber si el adiestramiento en escritura con teclado en la escuela superior, se refleja en una mayor velocidad de escritura en la universidad; el grupo 1 recibió adiestramiento es escritura con teclado en la escuela superior, y el grupo 2 no la recibió. Las hipótesis son:

\(H_0:\) La velocidad de escritura con teclado en la universidad no es mayor en los estudiantes que recibieron adiestramiento en la escuela superior.

\(H_A:\) La velocidad de escritura con teclado en la universidad es mayor en los estudiantes que recibieron adiestramiento en la escuela superior.

library(kableExtra)
#datos: grupo 1 si tuvo adiestramiento previo (siT),
# grupo 2 no tuvo adiestramiento previo (noT) 
siT <- c(44,48,36,32,51,45,54,56)
noT <- c(32,40,44,44,34,30,26)
#cálculo de tamaños de muestras
n.siT <- length(siT)
n.noT <- length(noT)
#creación de data frame de factor 'Tr' y medición 'wpm'
df.T <- data.frame(Tr=c(rep("ST", times=length(siT)),
                          rep("NT", times=length(noT))),
                   wpm=c(siT, noT))
#asignación de rangos de menor a mayor, con promedio de iguales
R <- rank(df.T$wpm, ties.method = "average")
#tabla con resultados
ranked <- cbind(df.T,R)
ranked
#suma de rangos de cada grupo
Ri <- aggregate(ranked$R, list(ranked$Tr), sum)
#tabla de valores de R1 (RST) y  R2 (RNT)
RNT <- Ri[1,2]
RST <- Ri[2,2]
Up <- n.noT*n.siT + (n.noT*(n.noT + 1))/2 - RNT
U <- n.siT*n.noT + (n.siT*(n.siT + 1))/2 - RST
Ues <- data.frame(n.siT, n.noT, RST, RNT, U, Up)
kable(Ues, format = "markdown", col.names = c("n1", "n2", "R1", "R2", "U", "U'"))
n1 n2 R1 R2 U U’
8 7 83.5 36.5 8.5 47.5

Usamos el valor de U’, porque la hipótesis alterna establece que el grupo 1 (siT) es más rápido que el grupo 2 (noT).

Debemos buscar el valor de \(U_{0.05(1),8,7}\) de una tabla ‘U-Mann-Whitney’. En este caso el valor es 13, entonces \(U'(47.5) > U_{0.05(1),8,7}(13)\), por lo tanto podemos rechazar la hipótesis nula, y aceptar la alterna (más velocidad de escritura en teclado en la universidad, si los estudiantes reciben adiestramiento en la escuela superior).

Otra prueba no-paramétrica es la de ‘Wilcoxon rank-sum’, y a continuación la usamos con un procedimiento directo en R:

wilcox.test(siT, noT, alternative = c("greater"))
## Warning in wilcox.test.default(siT, noT, alternative = c("greater")):
## cannot compute exact p-value with ties
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  siT and noT
## W = 47.5, p-value = 0.0136
## alternative hypothesis: true location shift is greater than 0
#valor crítico para una cola, alfa = 0.05
Wc <- qwilcox(0.05, 8, 7, lower.tail = FALSE)
sprintf("W 0.05(1),8,7: %g", Wc)
## [1] "W 0.05(1),8,7: 42"