Perché i valori p sono diversi
Sono in corso due effetti:
A causa della discrezione dei valori, si sceglie il vettore "più probabile che accada" 0 2 1 1 1. Ma questo differirebbe dal (impossibile) 0 1,25 1,25 1,25 1,25, che avrebbe un valore più piccolo .χ2
Il risultato è che il vettore 5 0 0 0 0 non viene più conteggiato come caso minimo (5 0 0 0 0 ha un minore di 0 2 1 1 1). Questo era il caso prima. Il test di Fisher su due lati sulla tabella 2x2 considera entrambi i casi in cui le 5 esposizioni nel primo o nel secondo gruppo sono ugualmente estreme.χ2
Questo è il motivo per cui il valore p differisce di quasi un fattore 2. (non esattamente a causa del punto successivo)
Mentre perdi 5 0 0 0 0 come caso altrettanto estremo, ottieni 1 4 0 0 0 come caso più estremo di 0 2 1 1 1.
Quindi la differenza sta nel limite del valore (o di un valore p direttamente calcolato come utilizzato dall'implementazione R dell'esatto test di Fisher). Se dividi il gruppo di 400 in 4 gruppi di 100, i diversi casi saranno considerati più o meno "estremi" dell'altro. 5 0 0 0 0 è ora meno "estremo" di 0 2 1 1 1. Ma 1 4 0 0 0 è più "estremo".χ2
esempio di codice:
# probability of distribution a and b exposures among 2 groups of 400
draw2 <- function(a,b) {
choose(400,a)*choose(400,b)/choose(800,5)
}
# probability of distribution a, b, c, d and e exposures among 5 groups of resp 400, 100, 100, 100, 100
draw5 <- function(a,b,c,d,e) {
choose(400,a)*choose(100,b)*choose(100,c)*choose(100,d)*choose(100,e)/choose(800,5)
}
# looping all possible distributions of 5 exposers among 5 groups
# summing the probability when it's p-value is smaller or equal to the observed value 0 2 1 1 1
sumx <- 0
for (f in c(0:5)) {
for(g in c(0:(5-f))) {
for(h in c(0:(5-f-g))) {
for(i in c(0:(5-f-g-h))) {
j = 5-f-g-h-i
if (draw5(f, g, h, i, j) <= draw5(0, 2, 1, 1, 1)) {
sumx <- sumx + draw5(f, g, h, i, j)
}
}
}
}
}
sumx #output is 0.3318617
# the split up case (5 groups, 400 100 100 100 100) can be calculated manually
# as a sum of probabilities for cases 0 5 and 1 4 0 0 0 (0 5 includes all cases 1 a b c d with the sum of the latter four equal to 5)
fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
draw2(0,5) + 4*draw(1,4,0,0,0)
# the original case of 2 groups (400 400) can be calculated manually
# as a sum of probabilities for the cases 0 5 and 5 0
fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
draw2(0,5) + draw2(5,0)
uscita di quell'ultimo bit
> fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
$p.value
[1] 0.03318617
> draw2(0,5) + 4*draw(1,4,0,0,0)
[1] 0.03318617
> fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
$p.value
[1] 0.06171924
> draw2(0,5) + draw2(5,0)
[1] 0.06171924
Come influenza il potere quando si dividono i gruppi
Ci sono alcune differenze dovute ai passaggi discreti nei livelli "disponibili" dei valori di p e alla conservatività del test esatto di Fishers (e queste differenze possono diventare piuttosto grandi).
anche il test Fisher si adatta al modello (sconosciuto) in base ai dati e quindi utilizza questo modello per calcolare i valori p. Il modello nell'esempio è che ci sono esattamente 5 individui esposti. Se modelli i dati con un binomio per i diversi gruppi, otterrai occasionalmente più o meno di 5 individui. Quando si applica il test del pescatore a questo, allora verrà inserito parte dell'errore e i residui saranno più piccoli rispetto ai test con marginali fissi. Il risultato è che il test è troppo conservativo, non esatto.
Mi aspettavo che l'effetto sulla probabilità di errore di tipo I dell'esperimento non sarebbe stato così grande se si dividessero casualmente i gruppi. Se l'ipotesi nulla è vera, allora incontrerai all'incirca percento dei casi un valore p significativo. Per questo esempio le differenze sono grandi come mostra l'immagine. Il motivo principale è che, con un totale di 5 esposizioni, ci sono solo tre livelli di differenza assoluta (5-0, 4-1, 3-2, 2-3, 1-4, 0-5) e solo tre discreti p- valori (nel caso di due gruppi di 400).α
Più interessante è la trama delle probabilità di rifiutare se è vero e se è vero. In questo caso il livello alfa e la discrezione non contano molto (tracciamo il tasso di rifiuto effettivo) e vediamo ancora una grande differenza.H0H aH0Ha
Resta da chiedersi se ciò valga per tutte le possibili situazioni.
3 volte la regolazione del codice della tua analisi di potenza (e 3 immagini):
usando il binomio restringente al caso di 5 individui esposti
Grafici della probabilità effettiva di rifiutare in funzione dell'alfa selezionata. È noto per il test esatto di Fisher che il valore p è calcolato esattamente ma solo pochi livelli (i passaggi) si verificano così spesso che il test potrebbe essere troppo conservativo rispetto a un livello alfa scelto.H0
È interessante vedere che l'effetto è molto più forte nel caso 400-400 (rosso) rispetto al caso 400-100-100-100-100 (blu). Quindi possiamo davvero usare questa divisione per aumentare la potenza, rendere più probabile il rifiuto di H_0. (anche se non ci preoccupiamo molto di rendere più probabile l'errore di tipo I, quindi il punto di fare questa divisione per aumentare la potenza potrebbe non essere sempre così forte)
usando il binomio non limitando a 5 persone esposte
Se usiamo un binomio come hai fatto tu, nessuno dei due casi 400-400 (rosso) o 400-100-100-100-100 (blu) fornisce un valore p accurato. Questo perché il test esatto di Fisher presuppone totali fissi di riga e colonna, ma il modello binomiale consente a questi di essere liberi. Il test di Fisher "adatta" i totali di riga e colonna rendendo il termine residuo più piccolo del termine di errore reale.
la maggiore potenza ha un costo?
Se confrontiamo le probabilità di rifiuto quando è vero e quando è vero (desideriamo il primo valore basso e il secondo valore alto) allora vediamo che effettivamente la potenza (rifiuto quando è vera) può essere aumentata senza il costo che aumenta l'errore di tipo I.H a H aH0HaHa
# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
p <- replicate(4000, { n <- rbinom(4, 100, 0.006125); m <- rbinom(1, 400, 0.006125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
plot(ps,ps,type="l",
xlab = "chosen alpha level",
ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)
title("due to concervative test p-value will be smaller\n leading to differences")
# using all samples also when the sum exposed individuals is not 5
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,] < x))
plot(ps,ps,type="l",
xlab = "chosen alpha level",
ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)
title("overly conservative, low effective p-values \n fitting marginals makes residuals smaller than real error")
#
# Third graph comparing H_0 and H_a
#
# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
offset <- 0.5
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
offset <- 0.6
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1a <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2a <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
plot(ps,ps,type="l",
xlab = "p rejecting if H_0 true",
ylab = "p rejecting if H_a true",log="xy")
points(m1,m1a,col=4)
points(m2,m2a,col=2)
legend(0.01,0.001,c("400-400","400-100-100-100-100"),pch=c(1,1),col=c(2,4))
title("comparing H_0:p=0.5 \n with H_a:p=0.6")
Perché influenza il potere
Credo che la chiave del problema risieda nella differenza dei valori di risultato scelti come "significativi". La situazione è che cinque individui esposti sono stati estratti da 5 gruppi di 400, 100, 100, 100 e 100 dimensioni. È possibile effettuare selezioni diverse che sono considerate "estreme". apparentemente la potenza aumenta (anche quando l'errore effettivo di tipo I è lo stesso) quando optiamo per la seconda strategia.
Se tracciassimo graficamente la differenza tra la prima e la seconda strategia. Quindi immagino un sistema di coordinate con 5 assi (per i gruppi di 400 100 100 100 e 100) con un punto per i valori di ipotesi e la superficie che raffigura una distanza di deviazione oltre la quale la probabilità è inferiore a un certo livello. Con la prima strategia questa superficie è un cilindro, con la seconda strategia questa superficie è una sfera. Lo stesso vale per i valori veri e una superficie attorno per l'errore. Ciò che vogliamo è che la sovrapposizione sia il più piccola possibile.
Siamo in grado di creare un grafico reale se consideriamo un problema leggermente diverso (con dimensionalità inferiore).
Immagina di voler testare un processo di Bernoulli facendo 1000 esperimenti. Quindi possiamo fare la stessa strategia suddividendo i 1000 in gruppi in due gruppi di dimensioni 500. Che aspetto ha (lascia X e Y come conteggi in entrambi i gruppi)?H0:p=0.5
La trama mostra come sono distribuiti i gruppi di 500 e 500 (anziché un singolo gruppo di 1000).
Il test di ipotesi standard valuterà (per un livello alfa del 95%) se la somma di X e Y è maggiore di 531 o inferiore a 469.
Ma questo include una distribuzione ineguale molto improbabile di X e Y.
Immagina uno spostamento della distribuzione da a . Quindi le regioni ai bordi non contano molto e un confine più circolare avrebbe più senso.H aH0Ha
Questo non è tuttavia (necesarilly) vero quando non selezioniamo la divisione dei gruppi in modo casuale e quando potrebbe esserci un significato per i gruppi.