首先,检查一下这个方程是否有解,幸运的是,它在这个 x 范围内:
library(ggplot2)
f1 <- function(d) log(1-P)*log(1-X2/d)
f2 <- function(d) log(1-Q)*log(1-X1/d)
(p <- ggplot() +
xlim(-12, 12) +
ylim(-10, 10) +
geom_function(fun = f1, n = 1E4, aes(color = "f1")) +
geom_function(fun = f2, n = 1E4, aes(color = "f2")))
请注意,在 x = 0 处有一条垂直渐近线,在 y = 0 处有一条水平渐近线。这将有助于设置搜索间隔。
接下来,您需要让方程式正确。我不确定^2 来自哪里。将方程的 LHS 移到 RHS 得到这个函数:
f <- function(d) log(1-P)*log(1-X2/d) - (log(1-Q)*log(1-X1/d))
我们可以使用基础R 中的uniroot 函数来解决:
(eq <- uniroot(f, lower = -10, upper = -0.01))
$root
[1] -0.8258847
$f.root
[1] -5.59396e-06
$iter
[1] 10
$init.it
[1] NA
$estim.prec
[1] 6.103516e-05
并与情节确认:
p +
geom_point(data = data.frame(x = eq$root, y = f1(eq$root)), aes(x = x, y = y))
注意y 可以与f1 或f2 一起找到,因为此时它们是相等的。这个值也是通过优化找到的,所以有一些错误,如eq$estim.prec所示。