R:' vmmin'中的mle初始值出错不是有限的

时间:2017-06-12 00:52:15

标签: r statistics mle

nll <- function(lambda, kappa){
  logit=function(x) {log(x/(1-x))}
  a=c(1-exp(-(15/lambda)^kappa), 1-exp(-(25/lambda)^kappa), 1-exp(-(35/lambda)^kappa))
  a=logit(a)
  mu = c(0.1, 0.2, 0.3)
  mu = logit(mu)
  cov = matrix(c(0.18830690, 0.00235681, 0.00071954, 0.00235681, 0.00736811, 0.00110457, 0.00071954, 0.00110457, 0.00423955), nrow =3)
  L1 = dmvnorm(a, mu, cov)

  a=c(1-exp(-(25/lambda)^kappa), 1-exp(-(35/lambda)^kappa), 1-exp(-(45/lambda)^kappa))
  a=logit(a)
  mu = c(0.4, 0.1, 0.9)
  mu = logit(mu)
  cov = matrix(c(2.7595442, 0.0045178, 0.0010505, 0.0045178, 0.00972309, 0.0015120, 0.0010505, 0.0015120, 0.0088425), nrow =3)
  L2 = dmvnorm(a, mu, cov)
  -sum(log(L1*L2))
}


> mle(nll, start = list(lambda = 1, kappa = 1))
Error in optim(start, f, method = method, hessian = TRUE, ...) : 
  initial value in 'vmmin' is not finite

我试图找到最大化上述功能的lambda和kappa值。

我的原始似然函数返回L1*L2,但由于mle函数需要传递负对数似然,我修改了函数以返回-sum(log(L1*L2))

然而,我遇到了上述错误。我也尝试过指定dmvnorm(... ,log = TRUE),但这并没有解决问题。

1 个答案:

答案 0 :(得分:0)

  • L1L2都是标量。假设我们要将log=TRUE传递给dmvnorm所以它们都是对数似然,你的意思是最后一行只有-(L1+L2)吗?
  • 指定debug(nll)nll(lambda=1,kappa=1),然后单步执行代码,等待我们找到无限值,然后回溯,我们看到1-exp(-(45/lambda)^kappa)正好是1({{1小于1e-16,1 + x> 1的最小值,因此exp(-45)的最后一个元素是无限的......

因此,如果我在两个地方都设置logit(a),请将最后一行更改为dmvnorm(...,log=TRUE),并将return(-(L1+L2))的初始值更改为10,我会得到{{1的有限值(4474),lambda给出:

nll(10,1)