r - 在 R 中的某个点求解(确定)一个函数

标签 r function statistics normal-distribution

在我的下面的 R 代码中,我想知道当y == 0.5 时我如何找出rh1 是什么?

请注意,y 使用 atanh(rh1),可以使用 tanh() 将其转换回 rh1>.

rh1 <- seq(-1, 0.1, by = 0.001)
y <- pnorm(-0.13, atanh(rh1), 0.2)
plot(rh1, y, type = "l")

最佳答案

解析解

对于正态分布 X ~ N(mu, 0.2) .我们想找到mu , 这样 Pr (X < -0.13) = y .

记忆一下你之前的问题和我在那边的回答:Determine a normal distribution given its quantile information .这里我们有一些更简单的东西,因为只有一个未知参数和一个分位数信息。

同样,我们从标准化开始:

   Pr {X < -0.13} = y
=> Pr { [(X - mu) / 0.2] < [(-0.13 - mu) / 0.2] } = y
=> Pr { Z < [(-0.13 - mu) / 0.2] } = y    # Z ~ N(0,1)
=> (-0.13 - mu) / 0.2 = qnorm (y)
=> mu = -0.13 - 0.2 * qnorm (y)

现在,让atanh(rh1) = mu => rh1 = tanh(mu) ,所以简而言之,解析解是:

tanh( -0.13 - 0.2 * qnorm (y) )

数值解

这是一个寻根问题。我们首先构建以下函数f ,我们的目标是找到它的根,即 rh1这样f(rh1) = 0 .

f <- function (rh1, y) pnorm(-0.13, atanh(rh1), 0.2) - y

最简单的求根方法是二分法,由uniroot实现在 R 中。我建议您阅读 Uniroot solution in R了解我们应该如何使用它。

curve(f(x, 0.5), from = -1, to = 0.1); abline (h = 0, lty = 2)

我们看到(-0.2, 0)之间有一个根,所以:

uniroot(f, c(-0.2, 0), y = 0.5)$root
# [1] -0.129243

关于r - 在 R 中的某个点求解(确定)一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624175/

相关文章:

java - 在 Java 中估计 Holt-Winters 平滑系数

python - 将数据集与 Python 中的非标准概率分布进行比较

r - r 中的 SMOTE 显着减少了样本量

r - data.table .. 用 j 中的函数表示法

R数据帧排列函数

javascript - 无论函数名称如何,如何执行递归?

c++ - 隐藏/虚函数使用 C++

r - 在 R 中显示多个置信区间

r - 如何在每个 block 的基础上设置 knitr block 输出宽度?

javascript:将基本数学运算传递给函数