簡體   English   中英

功率測試錯誤

[英]Power.t.test error

當我運行power.t.test時,如果SD低於2,則會出現錯誤。更糟糕的是,當我在循環中運行它時,它將使其余結果變為0。

輸出圖像

有人可以向我解釋一下問題是什么以及如何解決它嗎?

power.t.test(#n=10,
             power=.95, 
             sig.level=.05, 
             sd=  1.069045,
             delta =91, 
             alternative = "two.sided",
             strict = FALSE
            )  

Error in uniroot(function(n) eval(p.body) - power, c(2, 1e+07), tol = tol,  : 
  did not succeed extending the interval endpoints for f(lower) * f(upper) <= 0
In addition: Warning message:
In qt(sig.level/tside, nu, lower.tail = FALSE) : NaNs produced

您遇到了一些內部問題(我尚未完全診斷出該問題,盡管也可能是“只是不這樣做”,但這可能被認為是一個錯誤)。 問題是您得到的所需樣本量太小power.t.test通過power.t.test可靠地找到。 在內部, power.t.test使用對uniroot(..., interval=c(2,1e7))的調用來嘗試查找樣本大小-也就是說,它正在嘗試n=2n=1e7之間的所有值(應該涵蓋所有現實情況!)。 確實會嘗試 (如您在下面看到的)在必要時擴展搜索區域,但顯然在極端情況下並不總是能夠進行管理。

表中其余值均為零的原因是,遇到錯誤時, for循環將停止運行。 您可以嘗試類似

for (...) {
    pp <- try(power.t.test(...))
    if (inherits(pp,"try-error")) {
        ## set stuff to NA
    } else {
        ## set stuff to values extracted from pp
    }
}

(有更多復雜的方法可以使用tryCatch()捕獲錯誤,但這是我通常要做的事情……)

f <- function(sd) {
  pp <- try(power.t.test(power=.95,sig.level=.05,
         delta =91, sd=sd,
         alternative = "two.sided",
         strict = FALSE
        ),silent=TRUE)
   if (inherits(pp,"try-error")) return(NA)
   else return(pp$n)
}   
f(1.4)   ## 1.382
f(1.37)  ## 1.38
f(1.36)  ## NA

我懷疑這是否是一個實際問題(除了循環停止之外); 如果power.t.test以這種方式失敗,則您知道所需的樣本大小小於1.38 ,即對於任何實際情況而言都太小了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM