[英]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=2
和n=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.