Testowanie hipotez dla dużych danych powinno uwzględniać pożądany poziom różnicy, a nie to, czy istnieje różnica, czy nie. H0 nie interesuje cię, że oszacowanie wynosi dokładnie 0. Ogólnym podejściem byłoby sprawdzenie, czy różnica między hipotezą zerową a obserwowaną wartością jest większa niż podana wartość odcięcia.
Prosty przykład z testem T: Możesz przyjąć następujące założenia dla dużych próbek, biorąc pod uwagę, że masz jednakowe rozmiary próbek i standardowe odchylenia w obu grupach, i :
stąd
X1¯>X2¯T=¯X1-¯X2
T=X1¯−X2¯−δS2n−−−√+δS2n−−−√≈N(δS2n−−−√,1)
T=X1¯−X2¯S2n−−−√≈N(δS2n−−−√,1)
jak twoja hipoteza oznacza:H0:X1¯−X2¯=δ
X1¯−X2¯−δS2n−−−√≈N(0,1)
Można to łatwo wykorzystać do przetestowania znaczącej i istotnej różnicy. W R można użyć parametru niecentryczności rozkładów T, aby uogólnić ten wynik również dla mniejszych próbek. Należy wziąć pod uwagę, że jest to test jednostronny, alternatywnym jest .¯ X 1 - ¯ X 2 > δHAX1¯−X2¯>δ
mod.test <- function(x1,x2,dif,...){
avg.x1 <- mean(x1)
avg.x2 <- mean(x2)
sd.x1 <- sd(x1)
sd.x2 <- sd(x2)
sd.comb <- sqrt((sd.x1^2+sd.x2^2)/2)
n <- length(x1)
t.val <- (abs(avg.x1-avg.x2))*sqrt(n)/sd.comb
ncp <- (dif*sqrt(n)/sd.comb)
p.val <- pt(t.val,n-1,ncp=ncp,lower.tail=FALSE)
return(p.val)
}
n <- 5000
test1 <- replicate(100,
t.test(rnorm(n),rnorm(n,0.05))$p.value)
table(test1<0.05)
test2 <- replicate(100,
t.test(rnorm(n),rnorm(n,0.5))$p.value)
table(test2<0.05)
test3 <- replicate(100,
mod.test(rnorm(n),rnorm(n,0.05),dif=0.3))
table(test3<0.05)
test4 <- replicate(100,
mod.test(rnorm(n),rnorm(n,0.5),dif=0.3))
table(test4<0.05)
Co daje :
> table(test1<0.05)
FALSE TRUE
24 76
> table(test2<0.05)
TRUE
100
> table(test3<0.05)
FALSE
100
> table(test4<0.05)
TRUE
100