如何在R

时间:2018-10-10 12:02:34

标签: r

我需要求解以下非线性方程来获得(sd.1.est)的值。 (k)和(R.bar)是从上一步计算得出的已知值。这是我的代码:

library(nleqslv) 
k=0.7642437
R.bar=0.4419803
sd=1.109488
fun <- function(sd.1.est){
(-(k^2)/(2*(sd.1.est^2)))+log((k/sd.1.est)+
(((k/sd.1.est)^3)*factorial(3)/((factorial(1))^2*(factorial(2))*(2^3)))+
(((k/sd.1.est)^5)*factorial(5)/((factorial(2))^2*(factorial(3))*(2^6)))+
(((k/sd.1.est)^7)*factorial(7)/((factorial(3))^2*(factorial(4))*(2^9))))-log(4*R.bar/sqrt(2*pi))}
ss1=nleqslv(sd,fun,method="Broyden",global="qline",control=list(cndtol=10^-12,maxit=1000,allowSingular =TRUE)) 

我需要对sd.1.est施加正约束(因为它是scale参数的估计值)。 我不知道该怎么写。

1 个答案:

答案 0 :(得分:0)

由于您未提供任何数据,因此我们无法运行您的代码。 换句话说,您的代码不可复制。

有一种方法可以通过更改变量来使自己获得sd.1.est的正值。 编写您的函数的标题,如下所示:

fun <- function(z) {
    sd.1.est <- z*z
    ........
}

这里z是一个中间变量。通过平方z并将结果分配给sd.1.est,您将始终为sd.1.est得到一个正值。

在调用nleqslv时,z的初始值应设置为初始值sqrt的{​​{1}}。

警告:这可能无效。