R中的optimx函数

时间:2014-12-02 15:53:21

标签: r math optimization

我正在尝试在R中使用optimx函数,但不断收到错误消息:   optimx.check出错(par,optcfg $ ufn,optcfg $ ugr,optcfg $ uhess,lower,:   无法在初始参数下评估函数

我查看了另一个stackoverflow问题R- Optimx for exponential function with 2 parameters - cannot evaluate function at initial parameter values

但该解决方案对我没有用。

这是我的测试数据:

t <- seq(from=1,to=60,by=1)
len <- 100*(1-exp(-0.2*(t-0)))

t.data<-data.frame(t,len)

在optimx函数中为par起始值

p <- as.vector(c(30,110,0.3,1.0)) 

以下函数的年龄

Age1 <- 1    #### a young age
Age2 <- 50   #### an old age

最小化的功能

schnute_richards <- function(p,data) # which are Len1,Len2,K,R
           {
            zero <- p[1]^p[4]                         #  Len1^R
            one <- p[2]^p[4]-p[1]^p[4]                # (Len2^R-Len1^R)
            two <- 1-exp(-p[3]*(data$t-Age1))     # (1-EXP(-K*(ObsAge-Age1)))
            three <- 1-exp(-p[3]*(Age2-Age1))         # (1-EXP(-K*(Age2-Age1)))
            pred <- (zero + one*(two/three))^(1/p[4]) # final equation
            sum((data$len-pred)^2)
            } 

optimx代码

temp <-optimx(p,function (x) schnute_richards(x[1],x[2]))

我尝试了此代码的其他版本,但我收到了相同的错误消息。此代码用于我之前提到的另一个stackoverflow消息,即解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

研究help(optimx)

library(optimx)
temp <- optimx(p, schnute_richards, data = t.data)
#                  p1       p2        p3        p4        value fevals gevals niter convcode  kkt1 kkt2 xtimes
#Nelder-Mead 18.12639 99.99589 0.1999604 1.0005907 7.282821e-05    475     NA    NA        0 FALSE TRUE   0.03
#BFGS        18.12844 99.99493 0.2000565 0.9993415 6.034452e-05     82     20    NA        0 FALSE TRUE   0.01