α et sont liés. Je vais essayer d'illustrer le point avec un test de diagnostic. Disons que vous avez un test de diagnostic qui mesure le niveau d'un marqueur sanguin. Il est connu que les personnes atteintes d'une certaine maladie ont des niveaux de ce marqueur inférieurs à ceux des personnes en bonne santé. Il est immédiatement clair que vous devez décider d'une valeur seuil, en dessous de laquelle une personne est classée comme «malade», tandis que les personnes dont la valeur est supérieure à cette limite sont considérées comme saines. Il est très probable, cependant, que la distribution des bloodmarker varie considérablement , même au sein des malades et en bonne santé. Certaines personnes en bonne santé peuvent avoir des niveaux de marqueurs sanguins très bas, même si elles sont parfaitement saines.β
Il y a quatre possibilités qui peuvent se produire:
- une personne malade est correctement identifiée comme malade (vrai positif = TP)
- une personne malade est faussement classée en bonne santé (faux négatif = FN)
- une personne en bonne santé est correctement identifiée comme en bonne santé (vrai négatif = TN)
- une personne en bonne santé est faussement classée comme malade (faux positif = PF)
Ces possibilités peuvent être illustrées par un tableau 2x2 :
Sick Healthy
Test positive TP FP
Test negative FN TN
α désigne le taux de faux positifs, qui est . est le taux de faux négatifs, qui est . J'ai écrit simplement un script pour illustrer graphiquement la situation.α=FP/(FP+TN)ββ=FN/(TP+FN)R
alphabeta <- function(mean.sick=100, sd.sick=10, mean.healthy=130, sd.healthy=10, cutoff=120, n=10000, side="below", do.plot=TRUE) {
popsick <- rnorm(n, mean=mean.sick, sd=sd.sick)
pophealthy <- rnorm(n, mean=mean.healthy, sd=sd.healthy)
if ( side == "below" ) {
truepos <- length(popsick[popsick <= cutoff])
falsepos <- length(pophealthy[pophealthy <= cutoff])
trueneg <- length(pophealthy[pophealthy > cutoff])
falseneg <- length(popsick[popsick > cutoff])
} else if ( side == "above" ) {
truepos <- length(popsick[popsick >= cutoff])
falsepos <- length(pophealthy[pophealthy >= cutoff])
trueneg <- length(pophealthy[pophealthy < cutoff])
falseneg <- length(popsick[popsick < cutoff])
}
twotable <- matrix(c(truepos, falsepos, falseneg, trueneg), 2, 2, byrow=T)
rownames(twotable) <- c("Test positive", "Test negative")
colnames(twotable) <- c("Sick", "Healthy")
spec <- twotable[2,2]/(twotable[2,2] + twotable[1,2])
alpha <- 1 - spec
sens <- pow <- twotable[1,1]/(twotable[1,1] + twotable[2,1])
beta <- 1 - sens
pos.pred <- twotable[1,1]/(twotable[1,1] + twotable[1,2])
neg.pred <- twotable[2,2]/(twotable[2,2] + twotable[2,1])
if ( do.plot == TRUE ) {
dsick <- density(popsick)
dhealthy <- density(pophealthy)
par(mar=c(5.5, 4, 0.5, 0.5))
plot(range(c(dsick$x, dhealthy$x)), range(c(c(dsick$y, dhealthy$y))), type = "n", xlab="", ylab="", axes=FALSE)
box()
axis(1, at=mean(pophealthy), lab=substitute(mu[H[0]]~paste("=",m, sep=""), list(m=mean.healthy)), cex.axis=1.5,tck=0.02)
axis(1, at=mean(popsick), lab=substitute(mu[H[1]]~paste("=",m, sep=""), list(m=mean.sick)), cex.axis=1.5, tck=0.02)
axis(1, at=cutoff, lab=substitute(italic(paste("Cutoff=",coff, sep="")), list(coff=cutoff)), pos=-0.004, tick=FALSE, cex.axis=1.25)
lines(dhealthy, col = "steelblue", lwd=2)
if ( side == "below" ) {
polygon(c(cutoff, dhealthy$x[dhealthy$x<=cutoff], cutoff), c(0, dhealthy$y[dhealthy$x<=cutoff],0), col = "grey65")
} else if ( side == "above" ) {
polygon(c(cutoff, dhealthy$x[dhealthy$x>=cutoff], cutoff), c(0, dhealthy$y[dhealthy$x>=cutoff],0), col = "grey65")
}
lines(dsick, col = "red", lwd=2)
if ( side == "below" ) {
polygon(c(cutoff,dsick$x[dsick$x>cutoff],cutoff),c(0,dsick$y[dsick$x>cutoff],0) , col="grey90")
} else if ( side == "above" ) {
polygon(c(cutoff,dsick$x[dsick$x<=cutoff],cutoff),c(0,dsick$y[dsick$x<=cutoff],0) , col="grey90")
}
legend("topleft",
legend=(c(as.expression(substitute(alpha~paste("=", a), list(a=round(alpha,3)))),
as.expression(substitute(beta~paste("=", b), list(b=round(beta,3)))))), fill=c("grey65", "grey90"), cex=1.2, bty="n")
abline(v=mean(popsick), lty=3)
abline(v=mean(pophealthy), lty=3)
abline(v=cutoff, lty=1, lwd=1.5)
abline(h=0)
}
#list(specificity=spec, sensitivity=sens, alpha=alpha, beta=beta, power=pow, positiv.predictive=pos.pred, negative.predictive=neg.pred)
c(alpha, beta)
}
Regardons un exemple. Nous supposons que le niveau moyen du marqueur sanguin chez les personnes malades est de 100 avec un écart-type de 10. Chez les personnes en bonne santé, le niveau sanguin moyen est de 140 avec un écart-type de 15. Le clinicien fixe le seuil à 120.
alphabeta(mean.sick=100, sd.sick=10, mean.healthy=140, sd.healthy=15, cutoff=120, n=100000, do.plot=TRUE, side="below")
Sick Healthy
Test positive 9764 901
Test negative 236 9099
Vous voyez que les zones ombrées sont en relation les unes avec les autres. Dans ce cas, et . Mais que se passe-t-il si le clinicien a fixé le seuil différemment? Fixons-le un peu plus bas, à 105 et voyons ce qui se passe.α=901/(901+9099)≈0.09β=236/(236+9764)≈0.024
Sick Healthy
Test positive 6909 90
Test negative 3091 9910
Notre est très bas maintenant car presque aucune personne en bonne santé n'est diagnostiquée malade. Mais notre a augmenté, car les personnes malades avec un niveau de marqueur sanguin élevé sont désormais faussement classées comme saines.αβ
Enfin, regardons comment et changent pour différents seuils:αβ
cutoffs <- seq(0, 200, by=0.1)
cutoff.grid <- expand.grid(cutoffs)
plot.frame <- apply(cutoff.grid, MARGIN=1, FUN=alphabeta, mean.sick=100, sd.sick=10, mean.healthy=140, sd.healthy=15, n=100000, do.plot=FALSE, side="below")
plot(plot.frame[1,]~cutoffs, type="l", las=1, xlab="Cutoff value", ylab="Alpha/Beta", lwd=2, cex.axis=1.5, cex.lab=1.2)
lines(plot.frame[2,]~cutoffs, col="steelblue", lty=2, lwd=2)
legend("topleft", legend=c(expression(alpha), expression(beta)), lwd=c(2,2),lty=c(1,2), col=c("black", "steelblue"), bty="n", cex=1.2)
Vous pouvez immédiatement voir que le rapport de et n'est pas constant. Ce qui est également très important, c'est la taille de l'effet. Dans ce cas, ce serait la différence des moyennes des niveaux de marqueurs sanguins chez les personnes malades et en bonne santé. Plus la différence est grande, plus les deux groupes peuvent être facilement séparés par une coupure:αβ
Ici, nous avons un test "parfait" dans le sens où le seuil de 150 discrimine les malades des sains.
Ajustements de Bonferroni
Les ajustements de Bonferroni réduisent l' erreur mais gonflent l'erreur de type II ( ) . Cela signifie que l'erreur de prendre une décision faussement négative est augmentée tandis que les faux positifs sont minimisés. C'est pourquoi l'ajustement de Bonferroni est souvent appelé conservateur. Dans les graphiques ci-dessus, notez comment le augmenté lorsque nous avons abaissé le seuil de 120 à 105: il est passé de à . Dans le même temps, passé de à .αββ0.020.31α0.090.01
Pour d'autres à l'avenir:
Dans l'estimation de la taille de l'échantillon, le Ztotal est calculé en ajoutant le Z correspondant à alpha et Z correspondant à la puissance (1-beta). Donc, mathématiquement, si la taille de l'échantillon est maintenue constante, l'augmentation de Z pour alpha signifie que vous diminuez le Z pour la puissance de la même quantité, par exemple, l'augmentation de Zalpha de 0,05 à 0,1 diminue la puissance de Z de 0,05.
La différence est que le Z pour alpha est bilatéral tandis que le Z pour beta est unilatéral. Ainsi, alors que la valeur Z change du même montant, mais la probabilité% à laquelle cette valeur Z correspond ne change pas du même montant.
Exemple:
5% alpha (95% de confiance) avec 80% de puissance (20% bêta) donne la même taille d'échantillon que
20% alpha (80% de confiance) avec 93,6% de puissance (6,4% bêta) plutôt que la puissance de 95% que nous aurions si la relation était de 1: 1.
la source
Il n'y a pas de relation générale entre alpha et bêta.
Tout dépend de votre test, prenez l'exemple simple:
(Wikipédia)
Dans l'usage courant, l'erreur de type I peut être considérée comme «condamner une personne innocente» et l'erreur de type II «laisser un coupable se libérer».
Un jury peut être sévère: pas d'erreur de type II, certains de type I Un jury peut être "gentil": pas de type I mais certains de type II Un jury peut être normal: certains types I et certains types II Un jury peut être parfait: pas d'erreur
En pratique, il existe deux effets antagonistes:
Lorsque la qualité du test augmente, les erreurs de type I et de type II diminuent jusqu'à un certain point. Lorsqu'un jury s'améliore, il a tendance à mieux juger les innocents et les coupables.
Après un certain point, le problème sous-jacent apparaît dans la construction du test. Les types I ou II sont plus importants pour celui qui exécute le test. Avec l'exemple du jury, les erreurs de type I sont plus importantes et donc le processus juridique est conçu pour éviter le type I. En cas de doute, la personne est libre. Intuitivement, cela a conduit à une augmentation de l'erreur de type II.
Concernant Bonferroni:
(Wikipédia à nouveau)
La correction de Bonferroni contrôle uniquement la probabilité de faux positifs. La correction se fait généralement au prix d'une augmentation de la probabilité de production de faux négatifs, et par conséquent d'une réduction de la puissance statistique. Lorsque vous testez un grand nombre d'hypothèses, cela peut entraîner de grandes valeurs critiques.
la source