Power.t.test错误

时间:2015-10-27 22:56:19

标签: r statistics

当我运行power.t.test时,当SD低于2时我会收到错误。更糟糕的是,当我在循环中运行它时,它会使结果的其余部分为0。

Output image

有人可以解释一下问题是什么以及如何解决它?

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

1 个答案:

答案 0 :(得分:1)

您遇到了一些内部问题(我还没有完全诊断出来,哪些可能被视为错误,尽管也可能是&# 34;不要那么做&#34;)。问题是,您所需的样本数量太低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 - 即任何实际情况都非常小。