我正在尝试在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消息,即解决方案。
感谢您的帮助。
答案 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