r - optimize() 给出不同的答案?
问题描述
下面,我试图解决ncp
(有一个答案)。但是我想知道为什么当我扩展答案interval
中的论点时optimize
会发生巨大变化?
我可以用这里uniroot
代替optimize
吗?
f <- function(pwr, q, df1, df2, ncp){
abs(pwr - pf(q, df1, df2, ncp, lower.tail = FALSE))
}
optimize(f, interval = c(0, 1e2), pwr = .8, q = 2.5, df1 = 3, df2 = 108)[[1]]
# [1] 10.54639 !!! HERE
optimize(f, interval = c(0, 5e2), pwr = .8, q = 2.5, df1 = 3, df2 = 108)[[1]]
# [1] 499.9999 !!! HERE
解决方案
因为曲线的最右边部分太平 - 所有超过 150 的值都是相同的。
实用功能:
f2 <- function(x) f(x, pwr = .8, q = 2.5, df1 = 3, df2 = 108)
cc <- curve(f2(x)-0.2,from=150,to=500)
unique(cc$y)
## [1] -5.551115e-17
uniroot()
确实可以正常工作:我们必须更改函数f
以返回有符号值。
f <- function(pwr, q, df1, df2, ncp){
pwr - pf(q, df1, df2, ncp, lower.tail = FALSE)
}
uniroot(f, interval = c(0, 5e2), pwr = .8, q = 2.5, df1 = 3, df2 = 108)
## $root
## [1] 10.54641
## $f.root
## [1] -3.806001e-08
## etc.
一般来说,通过平方或取绝对值将求根问题转换为求最小值问题是一种脆弱的策略(我在多年前的数值食谱中读到过这个......)
推荐阅读
- python-3.x - 从 pandas Dataframe 获取的节点没有被 NetworkX 完全连接
- sqlplus - SQLPLUS 为 pagesize 和 linesize 设置默认值
- python-3.x - python函数的返回值
- python - to_excel() 缺少 1 个必需的位置参数:我的函数中的“excel_writer”
- ruby-on-rails - 如何在使用 ruby on rails 渲染特定模板的同时渲染特定布局
- python - DeepFace:如何从 url 导入图像以进行进一步分析
- javascript - 我无法让我的不和谐机器人获取消息并将其添加到嵌入
- linux-kernel - Cannot printk user space string parameter when intercepting a syscall
- http - 卷曲不返回任何东西
- javascript - 减少礼品卡数组