我想知道如何在下面的函数中解决x
的问题?
我可以使用uniroot()
或optimize()
吗?
这是我尝试过的方法(没有成功):
f <- function(x){
.8 - pt(qt(.05, df = x, lower = F)/sqrt(x + 1), df = x, ncp = .1*sqrt(x + 1), lower = F)
}
curve(f, 0, 30)
uniroot(f, c(0, 30))[[1]]
# Error in uniroot(f, c(0, 30)) : f.lower = f(lower) is NA
In addition: Warning message:
In qt(0.05, df = x, lower = F) : NaNs produced
答案 0 :(得分:1)
(0)通常,uniroot()
是查找根的正确工具;正如我在先前的回答中所说,将寻根问题转换为最小化问题会使其更加脆弱。
(1)f(0)
是NaN
,这导致您的近端错误。
(2)uniroot(f,c(1e-8,30))
给出
端点上的f()值不是相反的符号
因此,您要寻找的解决方案不存在于您要寻找的解决方案中;从curve()
的结果中也可以清楚地看到这一点。
(3)uniroot(f,c(1e-8,30),extendInt="downX")
(“ downX”表示uniroot正在寻找向下交叉的根)有效,其值为100.2549。如果您需要结果在(0,30]以内,则表示您不走运。