Innym przykładem testu z potencjalnie niejednoznacznymi wynikami jest test dwumianowy dla proporcji, gdy dostępna jest tylko proporcja, a nie wielkość próbki. Nie jest to całkowicie nierealne - często widzimy lub słyszymy słabo zgłoszone twierdzenia o formie „73% ludzi zgadza się, że ...” i tak dalej, gdy mianownik nie jest dostępny.
H.0: π= 0,5H.1: π≠ 0,5α = 0,05
p = 5 %1195 %α = 0,05
p = 49 %
p = 50 %H.0
p = 0 %p = 50 %p = 5 %p = 0 %p = 100 %p = 16 %Pr ( X≤ 3 ) ≈ 0,00221 < 0,025p = 17 %Pr ( X≤ 1 ) ≈ 0,109 > 0,025p = 16 %p = 18 %Pr ( X≤ 2 ) ≈ 0,0327 > 0,025p = 19 %Pr ( X≤ 3 ) ≈ 0,0106 < 0,025
p = 24 %p = 13 %α = 0,05: punkty poniżej linii są jednoznacznie znaczące, ale te powyżej nie są jednoznaczne. Wzór wartości p jest taki, że nie będzie pojedynczych dolnych i górnych granic obserwowanego procentu, aby wyniki były jednoznacznie znaczące.
Kod R.
# need rounding function that rounds 5 up
round2 = function(x, n) {
posneg = sign(x)
z = abs(x)*10^n
z = z + 0.5
z = trunc(z)
z = z/10^n
z*posneg
}
# make a results data frame for various trials and successes
results <- data.frame(successes = rep(0:100, 100),
trials = rep(1:100, each=101))
results <- subset(results, successes <= trials)
results$percentage <- round2(100*results$successes/results$trials, 0)
results$pvalue <- mapply(function(x,y) {
binom.test(x, y, p=0.5, alternative="two.sided")$p.value}, results$successes, results$trials)
# make a data frame for rounded percentages and identify which are unambiguously sig at alpha=0.05
leastsig <- sapply(0:100, function(n){
max(subset(results, percentage==n, select=pvalue))})
percentages <- data.frame(percentage=0:100, leastsig)
percentages$significant <- percentages$leastsig
subset(percentages, significant==TRUE)
# some interesting cases
subset(results, percentage==13) # inconclusive at alpha=0.05
subset(results, percentage==24) # unambiguously sig at alpha=0.05
# plot graph of greatest p-values, results below red line are unambiguously significant at alpha=0.05
plot(percentages$percentage, percentages$leastsig, panel.first = abline(v=seq(0,100,by=5), col='grey'),
pch=19, col="blue", xlab="Rounded percentage", ylab="Least significant two-sided p-value", xaxt="n")
axis(1, at = seq(0, 100, by = 10))
abline(h=0.05, col="red")
(Kod zaokrąglania jest wycinany z tego pytania StackOverflow .)