Valutare la potenza di un test di normalità (in R)


9

Voglio valutare l'accuratezza dei test di normalità su diverse dimensioni del campione in R (mi rendo conto che i test di normalità possono essere fuorvianti ). Ad esempio, per esaminare il test di Shapiro-Wilk, sto conducendo la seguente simulazione (oltre a tracciare i risultati) e mi aspetterei che quando la dimensione del campione aumenta la probabilità di rifiutare il valore nullo diminuisce:

n <- 1000
pvalue_mat <- matrix(NA, ncol = 1, nrow = n)

for(i in 10:n){
    x1 <- rnorm(i, mean = 0, sd = 1)
    pvalue_mat[i,] <- shapiro.test(x1)$p.value
}   

plot(pvalue_mat)

Il mio pensiero sarebbe che con l'aumentare della dimensione del campione ci dovrebbe essere un tasso di rifiuto inferiore, tuttavia sembra abbastanza uniforme. Penso di aver frainteso tutto ciò - tutti i pensieri sono ben accetti.


2

Risposte:


7

Stai simulando sotto l'ipotesi nulla (distribuzione normale), quindi il tasso di rifiuto tenderà al livello di significatività come previsto. Per valutare la potenza, è necessario simulare in qualsiasi distribuzione non normale. Ci sono infinite possibilità / scenari (ad es. Distribuzioni gamma con crescente asimmetria, distribuzione t con decrescente df ecc.) Tra cui scegliere, a seconda dell'ambito del tuo studio.


Grazie per la risposta. Quando simulo su distribuzioni non normali, osservo un modello convesso rispetto all'origine, ovvero quando la dimensione del campione aumenta per qualsiasi distribuzione non normale, aumenta la probabilità di rifiutare il valore nullo della normalità. Tuttavia, non capisco perché non sia l'inverso quando si attinge da una distribuzione normale: perché la probabilità di rifiutare il valore nullo diminuisce con l'aumentare della dimensione del campione? Grazie
user94759,

3
Perché la probabilità di commettere un simile errore di tipo 1 è per definizione uguale al livello di significatività, che è costante. In altre parole, i valori di p sono distribuiti uniformemente sotto il valore null. A proposito, è consigliabile eseguire molte simulazioni per impostazione, inclusa la scelta di n, non solo una come nel codice.
Michael M,

7

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:

Istogrammi per il null

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,.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)

Istogrammi per le alternative

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

  • 201110086.57=13%205%95%

  • αα=0.10

    α0.05020%α=0.01α=0.005breakssim


È 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.


1

(Più che un commento, forse non una risposta completa)

[I] si aspetterebbe che all'aumentare della dimensione del campione diminuisca la probabilità di rifiutare il valore nullo

Tralasciando le considerazioni sui test distorti (che non sono rari nella bontà di adattamento, quindi vale la pena menzionare), ci sono tre situazioni relative al tasso di rifiuto che si potrebbe prendere in considerazione:

1) il tasso di rifiuto durante la simulazione dal nulla (come sembra stia facendo nella domanda)

α

2) il tasso di rifiuto quando si simula da qualche alternativa

Qui il tasso di rifiuto dovrebbe aumentare all'aumentare di n .

3) il tasso di rifiuto per alcune raccolte di dati reali

In pratica, il valore nullo non è mai realmente vero e i dati reali avranno una combinazione di quantità di non normalità (misurate dalla statistica del test). Se il grado di non normalità non è correlato alla dimensione del campione, il tasso di rifiuto dovrebbe aumentare all'aumentare di n .

Quindi, in nessuna di queste situazioni, dovremmo vedere il tasso di rifiuto diminuire con la dimensione del campione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.