La compréhension de l'analyse de puissance des tests d'hypothèses statistiques peut être améliorée en effectuant certains et en regardant de près les résultats.
De par sa conception, un test de taille est destiné à rejeter l'hypothèse nulle avec une chance d'au moins lorsque le zéro est vrai (son taux de faux positifs attendu ). ααα Lorsque nous avons la capacité (ou le luxe) de choisir parmi des procédures alternatives avec cette propriété, nous préférerions celles qui (a) se rapprochent réellement du taux de faux positifs nominaux et (b) ont des chances relativement plus élevées de rejeter l'hypothèse nulle lorsqu'elle est pas vrai.
Le deuxième critère nous oblige à préciser de quelle (s) manière (s) et dans quelle mesure le nul ne se révèle pas vrai. Dans les cas de manuels, cela est facile, car les alternatives sont de portée limitée et clairement spécifiées. Avec des tests de distribution comme le Shapiro-Wilk, l'alternative est beaucoup plus vague: ils sont «non normaux». Lors du choix parmi les tests de distribution, l'analyste devra probablement mener sa propre étude de puissance ponctuelle pour évaluer dans quelle mesure les tests fonctionnent avec des hypothèses alternatives plus spécifiques qui sont préoccupantes dans le problème en question.
Un exemple motivé par la réponse de Michael Mayer postule que la distribution alternative peut avoir des qualités similaires à celles de la famille des distributions t de Student. Cette famille, paramétrée par un nombre (ainsi que par emplacement et échelle) inclut dans la limite des grands les distributions normales.ν≥1ν
Dans les deux situations - qu'il s'agisse d'évaluer la taille réelle du test ou sa puissance - nous devons générer des échantillons indépendants à partir d'une distribution spécifiée, exécuter le test sur chaque échantillon et trouver la vitesse à laquelle il rejette l'hypothèse nulle. Cependant, il y a plus d'informations disponibles dans n'importe quel résultat de test: sa valeur P. En conservant l'ensemble des valeurs de P produites lors d'une telle simulation, nous pouvons ultérieurement évaluer la vitesse à laquelle le test rejetterait la valeur nulle pour toute valeur de pourrait nous intéresser. Le cœur de l'analyse de puissance est donc un sous-programme qui génère cette distribution de valeur P (soit par simulation, comme nous venons de le décrire, soit - occasionnellement - avec une formule théorique). Voici un exemple codé . Ses arguments incluentαR
rdist
, le nom d'une fonction pour produire un échantillon aléatoire à partir d'une distribution
n
, la taille des échantillons à demander rdist
n.iter
, le nombre de ces échantillons à obtenir
...
, tous les paramètres facultatifs à transmettre rdist
(tels que les degrés de liberté ).ν
Les paramètres restants contrôlent l'affichage des résultats; ils sont inclus principalement pour faciliter la génération des chiffres dans cette réponse.
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)
}
Vous pouvez voir que le calcul ne prend en fait qu'une seule ligne; le reste du code trace l'histogramme. Pour l'illustrer, utilisons-le pour calculer les taux de faux positifs attendus. «Taux» est au pluriel car les propriétés d'un test varient généralement avec la taille de l'échantillon. Comme il est bien connu que les tests de distribution ont une puissance élevée par rapport à des alternatives qualitativement petites lorsque la taille des échantillons est grande, cette étude se concentre sur une gamme de petites tailles d'échantillon où ces tests sont souvent appliqués dans la pratique: généralement environ à Pour économiser le calcul temps, je ne signale que des valeurs de de à5100.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 ")))
)
Après avoir spécifié les paramètres, ce code n'est également qu'une seule ligne. Il donne la sortie suivante:
C'est l'apparence attendue: les histogrammes montrent des distributions presque uniformes des valeurs de P sur toute la plage de à . Avec la taille nominale fixée à les simulations indiquent entre et des valeurs P étaient en fait inférieures à ce seuil: ce sont les résultats surlignés en rouge. La proximité de ces fréquences à la valeur nominale atteste que le test de Shapiro-Wilk fonctionne comme annoncé.01α=0.05,.04810.0499
(Il semble y avoir une tendance vers une fréquence inhabituellement élevée de valeurs de P proches de Ceci est peu préoccupant, car dans presque toutes les applications, les seules valeurs de P que l'on examine sont ou moins.)10.2
Passons maintenant à l'évaluation de la puissance. La gamme complète des valeurs de pour la distribution de Student t peut être étudiée de manière adéquate en évaluant quelques exemples d'environ à . Comment le sais-je? J'ai effectué quelques essais préliminaires en utilisant un très petit nombre d'itérations (de à ), ce qui ne prend pas de temps du tout. Le code nécessite désormais une double boucle (et dans des situations plus complexes, nous avons souvent besoin de boucles triples ou quadruples pour s'adapter à tous les aspects dont nous devons varier): une pour étudier comment la puissance varie avec la taille de l'échantillon et une autre pour étudier comment elle varie avec les degrés de liberté. Encore une fois, cependant, tout se fait en une seule ligne de code (la troisième et dernière):νν=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)
Une petite étude de ce tableau fournit une bonne intuition sur le pouvoir. Je voudrais attirer l'attention sur ses aspects les plus saillants et utiles:
À mesure que les degrés de liberté passent de à gauche à à droite, de plus en plus de valeurs P sont petites, ce qui montre que le pouvoir de discriminer ces distributions d'une distribution normale augmente. (La puissance est quantifiée dans chaque titre de tracé: elle est égale à la proportion de la zone de l'histogramme qui est rouge.)ν=64ν=1
À mesure que la taille de l'échantillon passe de sur la rangée du haut à sur le bas, la puissance augmente également.n=5n=20
Remarquez que, comme la distribution alternative diffère davantage de la distribution nulle et que la taille de l'échantillon augmente, les valeurs P commencent à se collecter vers la gauche, mais il y en a toujours une "queue" qui s'étend jusqu'à . Ceci est caractéristique des études de puissance. Cela montre que le test est un pari : même lorsque l'hypothèse nulle est violée de manière flagrante et même lorsque notre taille d'échantillon est raisonnablement grande, notre test formel peut ne pas produire de résultat significatif.1
Même dans le cas extrême en bas à droite, où un échantillon de est tiré d'une distribution de Student t avec degré de liberté (une distribution de Cauchy), la puissance n'est pas : il y a chance qu'un échantillon de iid variables de Cauchy ne sera pas considéré comme significativement différent de Normal à un niveau de (c'est-à-dire avec une confiance de ).2011100−86.57=13%205%95%
Nous pourrions évaluer la puissance à n'importe quelle valeur de nous choisissons en coloriant plus ou moins de barres sur ces histogrammes. Par exemple, pour évaluer la puissance à , coloriez les deux barres de gauche de chaque histogramme et estimez sa surface en fraction du total.αα=0.10
(Cela ne fonctionnera pas trop bien pour des valeurs de inférieures à avec cette figure. En pratique, on limiterait les histogrammes aux valeurs P uniquement dans la plage qui serait utilisée, peut-être de à , et les montrer avec suffisamment de détails pour permettre une évaluation visuelle de la puissance jusqu'à ou même . (C'est à cela que sert l' option .) Le post-traitement des résultats de la simulation peut fournir encore plus de détails.)α0.05020%α=0.01α=0.005breaks
sim
Il est amusant de pouvoir en tirer autant de ce qui équivaut en fait à trois lignes de code: une pour simuler des échantillons iid d'une distribution spécifiée, une pour l'appliquer à un tableau de distributions nulles et la troisième pour l'appliquer à un tableau de distributions alternatives. Ce sont les trois étapes qui entrent dans toute analyse de puissance: le reste résume et interprète simplement les résultats.