R 中的 Uniroot 解决方案

2024-03-24

我想找到以下函数的根:

       x=0.5
       f <- function(y) ((1-pbeta(1-exp(-0.002926543
        *( 107.2592+y)^1.082618 *exp(0.04097536*(107.2592+y))),shape1=0.2640229,shape2=0.1595841)) -
(1-pbeta(1-exp(-0.002926543*(x)^1.082618 *exp(0.04097536*(x))),shape1=0.2640229,shape2=0.1595841))^2)

sroot=uniroot(f, lower=0, upper=1000)$root

uniroot(f, lower = 0, upper = 1000) 中的错误:f() 值位于末尾 符号不相反的点

我该如何解决该错误?


uniroot()及其使用注意事项

uniroot https://svn.r-project.org/R/trunk/src/library/stats/src/zeroin.c正在实施粗二分法 https://en.wikipedia.org/wiki/Bisection_method。这种方法要简单得多(拟)牛顿法 https://en.wikipedia.org/wiki/Newton%27s_method,但需要更强的假设来确保根的存在:f(lower) * f(upper) < 0.

这可能会很痛苦,因为这样的假设是充分条件,但不是必要条件。在实践中,如果f(lower) * f(upper) > 0,仍然有可能存在根,但由于这不是 100% 确定,二分法不能冒这个风险。

考虑这个例子:

# a quadratic polynomial with root: -2 and 2
f <- function (x) x ^ 2 - 4

显然,有根[-5, 5]. But

uniroot(f, lower = -5, upper = 5)
#Error in uniroot(f, lower = -5, upper = 5) : 
#  f() values at end points not of opposite sign

实际上,使用二分法需要观察/检查f,这样就可以提出根所在的合理区间。在R中,我们可以使用curve():

curve(f, from = -5, to = 5); abline(h = 0, lty = 3)

从图中,我们观察到根存在于[-5, 0] or [0, 5]。所以这些工作正常:

uniroot(f, lower = -5, upper = 0)
uniroot(f, lower = 0, upper = 5)

你的问题

现在让我们尝试一下你的函数(为了便于阅读,我将其分成几行;这样也很容易检查正确性):

f <- function(y) {
  g <- function (u) 1 - exp(-0.002926543 * u^1.082618 * exp(0.04097536 * u))
  a <- 1 - pbeta(g(107.2592+y), 0.2640229, 0.1595841)
  b <- 1 - pbeta(g(x), 0.2640229, 0.1595841)
  a - b^2
  }

x <- 0.5
curve(f, from = 0, to = 1000)

这个函数怎么会是一条水平线呢?它不可能有根!

  1. 检查f以上,它真的是在做你想做的正确的事情吗?我怀疑有什么问题g;你可能把括号放错了地方?
  2. 一旦你得到f正确,使用curve检查存在根的适当间隔。然后使用uniroot.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的 Uniroot 解决方案 的相关文章

随机推荐

  • Java,BorderLayout.CENTER,获取JPanel的宽度和高度

    我正在使用 Swing 和 AWT 针对听众 制作一个小程序 我在获取 JPanel 名为 Chess 的类 的大小时遇到 问题 我的布局 public class Main extends JFrame implements MouseL
  • 在 Typo3 中实现 HTML 模板,内容不起作用或者是我的错误

    我尝试在typo3中实现html模板 通过本教程 http wiki typo3 org Templated Tutorial Basics http wiki typo3 org Templating Tutorial Basics 所有
  • 使用 xsi:nil="true" C# 序列化删除 xml 元素

    我有一个 XML 其中包含一些值 有时可能存在空值 如下所示 我根本不希望在 XML 中列出带有 null 的节点 元素已设置IsNullable true在课堂里 任何建议 因为我在谷歌中尝试了很多东西 没有任何帮助
  • 更改 pandas 中的默认选项

    我想知道是否有任何方法可以更改 pandas 的默认显示选项 我想在每次运行 python 时更改显示格式和显示宽度 例如 pandas options display width 150 我看到默认值是硬编码的pandas core co
  • 部署.NET Web应用程序时如何获取预编译的razor文件?

    我的任务是改进服务器上应用程序的 IIS 预加载和初始化 我已经在IIS上实现了应用程序初始化和应用程序预加载 但回收 重新启动应用程序池时仍然有很长的等待时间 我找到了一些有用的链接 我认为这些链接对我有帮助 但我仍然没有获得预编译的 R
  • 通过引用切片为不可变字符串,而不是复制

    如果你使用string split http docs python org library stdtypes html str split对于 Python 字符串 它返回字符串列表 这些已拆分的子字符串是其父字符串部分的副本 是否有可能
  • Spring Boot 中的代理设置

    我的应用程序需要从 Web 获取 XML 文件 如下所示 Bean public HTTPMetadataProvider metadataProvider throws MetadataProviderException String m
  • 未排序数组中的前 5 个元素

    给定一个未排序的数组 我们需要以有效的方式找到前 5 个元素 但我们无法对列表进行排序 我的解决方案 找到数组中的最大元素 在 处理 使用此最大元素后删除它 重复步骤 1 和 2 k 次 本例中为 5 次 时间复杂度 O kn O n 空间
  • WooCommerce - 发送有关自定义订单状态更改的自定义电子邮件

    我添加了自定义状态wc order confirmed Register new status function register order confirmed order status register post status wc o
  • OS X Lion 中的 easy_install pip 需要 sudo 吗?

    我从工作中的 Snow Leopard 转到家里的 Lion 安装 我不记得必须 sudo easy install pip 狮子需要这个吗 在我这样做之前我遇到了错误 pip 最终出现在这里 some computer which pip
  • 大规模分布式系统中的日志文件

    我在网格和 HPC 领域做了很多工作 对于分布在数百 或在某些情况下数千 服务器上的系统 我们面临的最大挑战之一是分析日志文件 当前日志文件本地写入每个刀片上的磁盘 但我们也可以考虑使用 UDP Appender 等发布日志信息并集中收集
  • PyDSTool 与 anaconda 未正确安装

    我正在尝试使用 anaconda2 安装 PyDSTool conda install PyDSTool 这似乎进展顺利 但是当我打开spyder并导入PyDSTool时 它给了我错误 import PyDSTool Traceback m
  • “scrollViewDidScroll”无法连续捕获移动

    我正在编写程序来在滚动 UITableView 时移动名为 myView 的 UIView 请看下面的图片 myView 会随着tableview的contentoffset的变化而改变它的 y坐标 我编写的主要代码是 func scrol
  • 使用 Knockout-Kendo.js 动态启用/禁用 kendo 日期选择器

    我正在尝试使用 Knockout Kendo js 根据选择的选定值启用 禁用 kendo 日期选择器 HTML
  • 将我的 HTML Google MAP API 版本 2 迁移到版本 3

    我将非常感谢对此的帮助 我的 html v2 文件和一些临时密钥工作正常 我从一些 XML 中获取位置 创建不同的颜色标记 并从信息窗口中的 XML 属性添加一些 URL 不是太复杂 现在我需要将其迁移到 v3 我找到了 v2 中函数的一些
  • 找不到 id= 的用户 (ActiveRecord::RecordNotFound)

    使用我的 Rails 应用程序 我可以成功创建一个对象 称为工作 将它们视为博客文章 作为 current user 一个用户 has many 可以工作 我可以通过使用 postgresql 浏览器检查数据库来验证该对象是否已成功创建 该
  • TMUX 会话不会导入 Python 模块

    大家好 这是我在 StackOverflow 上提出的第一个问题 希望大家都满意 我最近开始使用 TMUX 但在将其用于机器学习问题集时遇到问题 我正在使用 python 创建一个程序 并使用 sklearn 模块 基本上 当我在 TMUX
  • 库伯内特斯。 kubernetes 节点之间支持的最大距离/延迟是多少?

    我想创建一个 kubernetes 集群 我想要一个具有高可用性的主节点 工作节点和代理节点的集群 并且节点位于两个位置 是否记录了位置之间支持的最大距离或延迟 此外 我希望能提供官方文档的链接 但我找不到任何相关内容 谢谢 kuberne
  • 使用 GET_FILE_NAME Oracle Forms 无法打开对话框

    我有 Oracle 数据库 11g 带有 Oracle 表单和报告 11g 我创建了浏览按钮来从计算机或笔记本电脑目录中打开 CSV 文件 我在按下按钮时触发时使用此代码 declare filename varchar2 500 begi
  • R 中的 Uniroot 解决方案

    我想找到以下函数的根 x 0 5 f lt function y 1 pbeta 1 exp 0 002926543 107 2592 y 1 082618 exp 0 04097536 107 2592 y shape1 0 264022