DEoptim返回错误:目标函数结果的长度与参数矩阵的长度不同

时间:2019-05-14 17:08:19

标签: r optimization

由于我遇到DEoptim的收敛性问题,因此我尝试使用optimx来最小化多元正态分布的负对数似然性。

此处的相关代码:

NLLmvnorm <- function(data, mu, sigma) {
  a <- qr(sigma)
  logdet <- sum(log(abs(diag(a$qr))))
  sigma.inv <- fast.ginv(sigma)
  d <- -0.5 * (logdet + t(data-mu) %*% sigma.inv %*% (data-mu))
  #sum(dnorm(data, mean = mu, sd = sigma, log = TRUE))
  #d <- -0.5 * logdet - 0.5 * (t(data - mu) %*% sigma.inv %*% (data - mu) - (length(data) / 2) * log(2 * pi)) #MVN log likelihood
  d[1,1]
}

fit.abcml <- function(params, data, config1 = hadza_LHbones, config2 = hadza_LKbones, sensitivity = 1 - density) {
  if((params[1] < 0 | params[1] > 1) | params[2] < 0 | (params[3] < 0 | params[3] > 1)) {
    -1e5
  }
  else {
    p <- params[1]
    k <- params[2]
    b <- params[3]
    mu <- k * exp(-b * sensitivity) * (p * colSums(config1) + (1 - p) * colSums(config2))
    sigma <- k * diag(exp(-b * sensitivity)) %*% (p* crossprod(as.matrix(config1)) + (1 - p) *crossprod(as.matrix(config2))) %*% diag(exp(-b * sensitivity))
    NLLmvnorm(data, mu, sigma)
  }
}

每当我运行DEoptim(par = c(0.5, 50, 1), fn=fit.abcml, lower = c(0,0,0), upper = c(1,1000,1), control = list(itermax = 2500))时,都会显示错误消息:

Error in DEoptim(par = c(0.5, 50, 1), fn = fit.abcml, lower = c(0, 0, : objective function result has different length than parameter matrix

DEoptim相比,我可能会混淆要用于optimx的参数,但是我想初始化参数时会一样吗?我不确定为什么会有不同,如果有人有任何解决方案,将不胜感激。

0 个答案:

没有答案