Test di ipotesi: numerico vs. classificato
Ho creduto che il test di ipotesi più potente per giudicare se provenga un singolo campione$N(0,1)$ o da $N(1,1)$utilizza il valore medio come statistica del test . Pertanto, ho calcolato la dimensione del campione utilizzando una simulazione Monte Carlo e ho confrontato due metodi: (a) utilizzando il valore medio numerico come statistica del test e (b) trasformando i dati prima in ranghi e quindi calcolando il valore medio. Quello che ho scoperto è che i dati classificati producono una dimensione del campione più piccola. Com'è possibile?
Quello che finalmente mi interessa è determinare la dimensione del campione per un esperimento futuro. Mi piace prendere$n$campioni da un processo industriale con una distribuzione nota, analizzano i campioni e mostrano che il processo rientra nei limiti delle sue specifiche. Questo mi permette di produrre il prodotto senza misurare ogni parte.
Ci sono molte sottili difficoltà coinvolte nel test delle ipotesi. Ecco perché ho impostato il seguente modello di giocattolo per focalizzare l'attenzione sulla domanda "numerica vs. classificata" sopra descritta.
set.seed(2020)
transformToRank = FALSE
alpha = 0.05
betaTarget = 0.20
T = matrix(nrow = 1e4, ncol = 2) # alloc space for test statistic
for ( nSample in 3:100 ) {
for ( i in 1:1e4 ){
# combine data:
random = c(rnorm(nSample,0,1), rnorm(nSample,1,1))
if ( transformToRank ){
# rank data (combined):
random = rank(random)
}
# Calc test statistic:
T[i,] = c(mean(random[1:nSample]), mean(random[(nSample+1):(2*nSample)]) );
}
cutoff1 = quantile(T[, 1], alpha/2)
cutoff2 = quantile(T[, 1], 1-alpha/2)
beta = sum(cutoff1 < T[, 2] & T[, 2] < cutoff2) / 1e4
if ( beta <= betaTarget ){
break
} else {
nSample = nSample + 1
}
}
print(beta)
print(nSample)
Il caso numerico può essere verificato utilizzando il seguente codice:
library(BSDA)
set.seed(2020)
pValue = replicate(1e4,z.test(rnorm(8,1,1),
alternative="two.sided", mu=0, sigma.x=1)$p.value);
power = mean(pValue <= 0.05)
beta = 1 - power
print(beta)
Se utilizzo il valore numerico, la dimensione del campione $ n = 8 $ soddisfa la condizione di rischio $ \ beta $ . Al contrario, se trasformo i numeri casuali in ranghi, mi serve solo $ n = 4 $ . Pertanto, se sono disposto a utilizzare un set di dati generato casualmente per analizzare (classificare) i dati sperimentali, la potenza del test aumenta in modo significativo. Questa logica si applica anche se eseguo il campionamento da una versione con ridimensionamento della posizione di $ t $ -distribution. Cosa mi sto perdendo?
La mia domanda chiave è: perché la versione classificata ha una potenza così elevata? Credevo che avrei ottenuto approssimativamente la stessa dimensione del campione, perché è noto che la trasformazione del rango fornisce un ponte per i test di ipotesi non parametrici, vedere ad esempio Ref1 o Ref2 .
Risposte
Ecco le simulazioni che confrontano due campioni di dimensione 15 da $\mathsf{Norm}(0,1)$ e $\mathsf{Norm}(1,1),$rispettivamente. La mia simulazione mostra che il test t raggruppato ha una potenza migliore del test Wilcoxon a due campioni, che è ben noto, e che nessuno dei due test ha potenza$0.8.$
set.seed(2020)
pv = replicate(10^4, t.test(rnorm(15,0,1),
rnorm(15,1,1), var.eq=T)$p.val) mean(pv <= 0.05) [1] 0.7525 set.seed(911) pv = replicate(10^4, wilcox.test(rnorm(15,0,1), rnorm(15,1,1))$p.val)
mean(pv <= 0.05)
[1] 0.7118
Sembra che io abbia frainteso quello che stai facendo, che il tuo codice di simulazione sia sbagliato, o entrambe le cose. Potrebbe essere utile avere una spiegazione più chiara di ciò che stai facendo con i ranghi e vedere il ciclo interno del tuo programma in cui calcoli la potenza.
[Non ha senso prendere le medie dei ranghi per i due campioni separatamente: ad esempio, se$n=15,$ quindi entrambi i set di ranghi andrebbero da 1 a 15 ed entrambi i set di ranghi sommeranno sempre a 120. Potresti voler guardare cosa fa il test Wilcoxon della somma dei ranghi con i ranghi dei due campioni.]
Ecco le simulazioni con le dimensioni del campione $n=25$ e differenza $0.5$in mezzi di popolazione. In nessuno dei due casi la potenza è vicina all'80%.
set.seed(1066)
pv = replicate(10^4, t.test(rnorm(25,0,1),
rnorm(25,.5,1), var.eq=T)$p.val) mean(pv <= 0.05) [1] 0.3978 set.seed(1776) pv = replicate(10^4, wilcox.test(rnorm(25,0,1), rnorm(25,.5,1))$p.val)
mean(pv <= 0.05)
[1] 0.3867
Nota: per i test t raggruppati, ecco un calcolatore online di "potenza e dimensione del campione", che funziona per parametri ragionevoli.