La comprensione dell'analisi di potenza dei test statistici di ipotesi può essere migliorata effettuandone alcuni e osservando attentamente i risultati.
Di progettazione, un test di dimensione è destinato a rifiutare l'ipotesi nulla con una probabilità di almeno quando il nulla è vera (il suo atteso tasso di falsi positivi ). ααα Quando avremo la possibilità (o il lusso) di scegliere tra procedure alternative con questa proprietà, preferiremmo quelle che (a) si avvicinano effettivamente al tasso di falsi positivi nominali e (b) hanno possibilità relativamente più alte di respingere l'ipotesi nulla quando è non vero.
Il secondo criterio ci impone di stabilire in che modo e in che misura il nulla non è vero. Nei casi da manuale questo è facile, perché le alternative hanno portata limitata e sono chiaramente specificate. Con test di distribuzione come lo Shapiro-Wilk, le alternative sono molto più vaghe: sono "non normali". Quando si sceglie tra i test di distribuzione, quindi, è probabile che l'analista debba condurre il proprio studio di potenza una tantum per valutare quanto bene i test funzionano contro ipotesi alternative più specifiche che sono preoccupanti per il problema in questione.
Un esempio motivato dalla risposta di Michael Mayer ipotizza che la distribuzione alternativa possa avere qualità simili a quelle della famiglia di distribuzioni Student t. Questa famiglia, parametrizzata da un numero (nonché da posizione e scala) include nel limite di grandi le distribuzioni Normali.ν≥ 1ν
In entrambe le situazioni, che si tratti della valutazione della dimensione effettiva del test o della sua potenza , dobbiamo generare campioni indipendenti da una distribuzione specificata, eseguire il test su ciascun campione e trovare la velocità con cui rifiuta l'ipotesi nulla. Tuttavia, ci sono ulteriori informazioni disponibili in qualsiasi risultato del test: il suo valore P. Mantenendo l'insieme di valori P prodotti durante una simile simulazione, possiamo successivamente valutare la velocità con cui il test rifiuterebbe il valore nullo per qualsiasi valore di cui potremmo preoccuparci. Il cuore dell'analisi della potenza, quindi, è una subroutine che genera questa distribuzione del valore P (o mediante simulazione, come appena descritto, o - occasionalmente - con una formula teorica). Ecco un esempio codificato . I suoi argomenti includonoαR
rdist
, il nome di una funzione per produrre un campione casuale da una distribuzione
n
, la dimensione dei campioni da richiedere rdist
n.iter
, il numero di tali campioni da ottenere
...
, eventuali parametri opzionali da trasmettere rdist
(come i gradi di libertà ).ν
I restanti parametri controllano la visualizzazione dei risultati; sono inclusi principalmente come comodità per generare le cifre in questa risposta.
sim <- function(rdist, n, n.iter, prefix="",
breaks=seq(0, 1, length.out=20), alpha=0.05,
plot=TRUE, ...) {
# The simulated P-values.
# NB: The optional arguments "..." are passed to `rdist` to specify
# its parameters (if any).
x <- apply(matrix(rdist(n*n.iter, ...), ncol=n.iter), 2,
function(y) shapiro.test(y)$p.value)
# The histogram of P-values, if requested.
if (plot) {
power <- mean(x <= alpha)
round.n <- 1+ceiling(log(1 + n.iter * power * (1-power), base=10) / 2)
hist(x[x <= max(breaks)], xlab=paste("P value (n=", n, ")", sep=""),
breaks=breaks,
main=paste(prefix, "(power=", format(power, digits=round.n), ")", sep=""))
# Specially color the "significant" part of the histogram
hist(x[x <= alpha], breaks=breaks, col="#e0404080", add=TRUE)
}
# Return the array of P-values for any further processing.
return(x)
}
Puoi vedere che il calcolo in realtà richiede solo una riga; il resto del codice traccia l'istogramma. Per illustrare, usiamolo per calcolare i tassi di falsi positivi previsti. "Tariffe" è al plurale perché le proprietà di un test di solito variano con la dimensione del campione. Poiché è noto che i test distributivi hanno un alto potere contro alternative qualitativamente piccole quando le dimensioni dei campioni sono grandi, questo studio si concentra su una gamma di campioni di piccole dimensioni in cui tali test sono spesso applicati nella pratica: in genere da circa a Per salvare il calcolo tempo, riporto solo sui valori di da a5100.n520.
n.iter <- 10^5 # Number of samples to generate
n.spec <- c(5, 10, 20) # Sample sizes to study
par(mfrow=c(1,length(n.spec))) # Organize subsequent plots into a tableau
system.time(
invisible(sapply(n.spec, function(n) sim(rnorm, n, n.iter, prefix="DF = Inf ")))
)
Dopo aver specificato i parametri, anche questo codice è solo una riga. Produce il seguente output:
Questo è l'aspetto atteso: gli istogrammi mostrano distribuzioni quasi uniformi di valori P nell'intero intervallo da a . Con la dimensione nominale impostata su le simulazioni riportano tra e valori P in realtà inferiori a tale soglia: questi sono i risultati evidenziati in rosso. La vicinanza di queste frequenze al valore nominale attesta che il test di Shapiro-Wilk si comporta come pubblicizzato.01α = 0,05 ,0,04810,0499
(Sembra che ci sia una tendenza verso una frequenza insolitamente alta di valori di P vicino a Questo è di scarsa preoccupazione, perché in quasi tutte le applicazioni gli unici valori di P che si osservano sono o meno.)10.2
Passiamo ora a valutare il potere. L'intera gamma di valori di per la distribuzione Student t può essere adeguatamente studiata valutando alcuni casi da circa fino a . Come lo so? Ho eseguito alcune esecuzioni preliminari utilizzando un numero molto piccolo di iterazioni (da a ), il che non richiede tempo. Il codice ora richiede un doppio loop (e in situazioni più complesse spesso abbiamo bisogno di loop tripli o quadrupli per soddisfare tutti gli aspetti che dobbiamo variare): uno per studiare come varia la potenza con la dimensione del campione e un altro per studiare come varia con i gradi di libertà. Ancora una volta, tuttavia, tutto viene eseguito in una sola riga di codice (la terza e l'ultima):νν= 100ν= 11001000
df.spec <- c(64, 16, 4, 2, 1)
par(mfrow=c(length(n.spec), length(df.spec)))
for (n in n.spec)
for (df in df.spec)
tmp <- sim(rt, n, n.iter, prefix=paste("DF =", df, ""), df=df)
Un piccolo studio di questo tableau fornisce una buona intuizione sul potere. Vorrei attirare l'attenzione sui suoi aspetti più salienti e utili:
Man mano che i gradi di libertà si riducono da a sinistra a a destra, sempre più valori P sono piccoli, dimostrando che aumenta il potere di discriminare queste distribuzioni da una distribuzione normale. (Il potere è quantificato in ogni titolo della trama: è uguale alla proporzione dell'area dell'istogramma che è rossa.)ν= 64ν= 1
n = 5n = 20
1
2011100 - 86.57 = 13 %205 %95 %
αα = 0,10
α0.05020%α=0.01α=0.005breaks
sim
È divertente che si possa ricavare così tanto da ciò che, in effetti, equivale a tre righe di codice: uno per simulare i campioni da una distribuzione specificata, uno da applicare a una matrice di distribuzioni nulle e il terzo a cui applicarlo una serie di distribuzioni alternative. Questi sono i tre passaggi che vanno in qualsiasi analisi di potenza: il resto è semplicemente riassumere e interpretare i risultati.