Statistical-Significance

統計數據:Alpha 和 Beta 之間的關係

  • May 16, 2013

我的問題與 alpha 和 beta 之間的關係以及它們在統計中的定義有關。

alpha = I 型錯誤率 = 考慮 NULL 假設正確的顯著性水平

Beta = II 型錯誤率

如果 alpha 降低(特異性隨著 alpha = 1 - 特異性而增加),則 beta 增加(靈敏度/功效隨著 beta = 1 - 靈敏度/功效而降低)

alpha 的變化如何影響 beta ? 是否存在線性關係?alpha/beta 的比率是否始終相同,換句話說,特異性/敏感性比率始終相同嗎?如果是,這意味著通過使用 bonferroni 校正,我們只是轉向更低的靈敏度和更高的特異性,但我們不會改變靈敏度/特異性比。這樣說對嗎?

更新(案例特定問題):

對於給定的實驗設計,我們對數據運行 5 個線性模型。我們的真陽性率(靈敏度/功效)為 0.8,真陰性率(特異性)為 0.7。(讓我們想像一下,我們知道什麼應該是積極的,什麼不應該是積極的。)。如果我們現在使用 Bonferroni 將顯著性水平修正為 0.05 / 5 = 0.01。我們可以數值估計得到的真陽性率(靈敏度/功率)和真陰性率(特異性)嗎?

非常感謝你的幫助。

$ \alpha $ 和 $ \beta $ 有關係。我將嘗試通過診斷測試來說明這一點。假設您有一個測量血液標誌物水平的診斷測試。眾所周知,與健康人相比,患有某種疾病的人的這種標誌物水平較低。很明顯,您必須確定一個臨界值,低於該臨界值的人被歸類為“生病”,而高於該臨界值的人被認為是健康的。然而,即使病人和健康人中,血液標誌物的分佈也很可能有很大差異。一些健康人的血液標誌物水平可能非常低,即使他們非常健康。一些病人即使患有疾病,血液標誌物的水平也很高。

有四種可能發生:

  1. 一個病人被正確識別為病人(真陽性 = TP)
  2. 病人被錯誤地歸類為健康人(假陰性 = FN)
  3. 一個健康的人被正確識別為健康(真陰性 = TN)
  4. 一個健康的人被錯誤地歸類為有病(假陽性 = FP)

這些可能性可以用2x2 表來說明:

              Sick Healthy
Test positive   TP     FP
Test negative   FN     TN

$ \alpha $ 表示誤報率,即 $ \alpha = FP/(FP + TN) $ . $ \beta $ 是假陰性率,即 $ \beta = 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)
     
   }

讓我們看一個例子。我們假設病人血液標誌物的平均水平為 100,標準差為 10。在健康人中,平均血液水平為 140,標準差為 15。臨床醫生將臨界值設置為 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

Beta 和 alpha,截止值為 120

您會看到陰影區域彼此相關。在這種情況下, $ \alpha = 901/(901+ 9099) \approx 0.09 $ 和 $ \beta = 236/(236 + 9764)\approx 0.024 $ . 但是,如果臨床醫生以不同的方式設置截止值會怎樣?讓我們把它設置得低一點,到 105 看看會發生什麼。

             Sick Healthy
Test positive 6909      90
Test negative 3091    9910

截止 105

我們的 $ \alpha $ 現在非常低,因為幾乎沒有健康人被診斷為生病。但是我們的 $ \beta $ 增加了,因為血液標誌物水平高的病人現在被錯誤地歸類為健康人。

最後,讓我們看看如何 $ \alpha $ 和 $ \beta $ 更改不同的截止值:

   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)

具有不同截止值的 alpha 和 beta 繪圖

你可以立即看到比例 $ \alpha $ 和 $ \beta $ 不是恆定的。同樣非常重要的是效果大小。在這種情況下,這將是病人和健康人血液標誌物水平平均值的差異。差異越大,兩組越容易被截斷分開:

完美截止

在這裡,我們有一個“完美”的測試,因為 150 的截止值可以區分病人和健康人。


Bonferroni 調整

Bonferroni 調整減少了 $ \alpha $ 錯誤但誇大了第二類錯誤( $ \beta $ ) . 這意味著做出錯誤否定決定的錯誤會增加,而錯誤肯定會最小化。這就是為什麼 Bonferroni 調整通常被稱為保守的原因。在上圖中,請注意如何 $ \beta $ 當我們將截止值從 120 降低到 105 時增加:它從 $ 0.02 $ 到 $ 0.31 $ . 同時, $ \alpha $ 從減少 $ 0.09 $ 到 $ 0.01 $ .

引用自:https://stats.stackexchange.com/questions/59202

comments powered by Disqus