如何使用带有optim的两个向量的向量

时间:2017-10-31 11:21:59

标签: r

我有两个函数的包装函数。每个函数都有自己的参数向量。主要思想是将参数向量(向量或两个向量)传递给optim,然后,我想最大化函数的总和。

由于我的功能太复杂了,所以我尝试提供一个与原始函数类似的简单示例。这是我的代码:

set.seed(123)
x <- rnorm(10,2,0.5)

ff <- function(x, parOpt){
    out  <- -sum(log(dnorm(x, parOpt[[1]][1], parOpt[[1]][2]))+log(dnorm(x,parOpt[[2]][1],parOpt[[2]][2]))) 
    return(out)
}


# parameters in mu,sd vectors arranged in list
params <- c(set1 = c(2, 0.2), set2 = c(0.5, 0.3))

xy <- optim(par = params, fn=ff ,x=x)

返回此错误:

Error in optim(par = params, fn = ff, x = x) : 
  function cannot be evaluated at initial parameters

据我所知,我收到此错误是因为optim无法将参数传递给我的函数的每个部分。那么,我怎么能告诉optim第一个向量是我函数第一部分的参数,第二个向量是第二部分。

1 个答案:

答案 0 :(得分:0)

您应该更改方法参数以使用初始参数。 您可以使用?optim命令阅读有关优化功能的详细说明。 例如,您可以使用“L-BFGS-B”方法来使用上限和下限。