我已经找到第一行定义函数:
f <- function(x) 3034*log(x)+2305.84*log(1-x)-1517*log(1-x)
现在我遇到的问题是我需要找到所有x
值
f(x)=-1947.92
但是我不知道这个命令是做什么的?
答案 0 :(得分:1)
通常我会说你应该使用uniroot()
,修改函数后在目标处返回零,但这会有问题:
target <- -1947.92
f <- function(x) 3034*log(x)+2305.84*log(1-x)-1517*log(1-x)
g <- function(x) f(x)-target
uniroot(g,interval=c(1e-4,1-1e-4))
## Error in uniroot(g, interval = c(1e-04, 1 - 1e-04)) :
## f() values at end points not of opposite sign
正在进行的是你的曲线在两个地方过零。 uniroot()
要求您括号根:
让我们来看看:
curve(g(x))
abline(h=0,col=2)
放大:
curve(g(x),from=0.75,to=0.85)
abline(h=0,col=2)
现在我们可以只关注这一点(即根据我们感兴趣的词根使用interval=c(1e-4,0.8)
或interval=c(0.8,1-1e-4)
)或找到
opt1 <- optim(g,par=0.5,method="L-BFGS-B",lower=1e-4,upper=1-1e-4,
control=list(fnscale=-1)) ## maximize rather than min
然后使用opt1$par
作为切入点。 (或者你可以做一些简单的微积分:最大[导数wrt x为零的点]比根更容易计算...)
或者,您可以ask Wolfram Alpha ...