【问题标题】:R: error in mle initial value in 'vmmin' is not finiteR:“vmmin”中的 mle 初始值错误不是有限的
【发布时间】:2017-06-12 00:52:15
【问题描述】:
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),但这并没有解决问题。

【问题讨论】:

  • 您的方差-协方差矩阵看起来很可疑。如果它们都是常数,那么它们将是非正定的(即不是合法的方差-协方差矩阵),dmvnorm 将返回一个非有限值 ...
  • @BenBolker 我更改了协方差矩阵。但是错误仍然存​​在?

标签: r statistics mle


【解决方案1】:
  • L1L2 都是标量。假设我们要将log=TRUE 传递给dmvnorm,所以它们都是对数似然,你是说最后一行中的-(L1+L2) 吗?
  • 通过指定debug(nll)nll(lambda=1,kappa=1),然后单步执行代码,等到找到一个无穷大的值,然后回溯,我们看到1-exp(-(45/lambda)^kappa)正好是1(exp(-45)小于1e-16 , 1+x > 1 的最小值,所以logit(a) 的最后一个元素是无限的...

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

Coefficients:
   lambda     kappa 
40.622673  4.883857 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2020-01-29
    • 2015-09-03
    相关资源
    最近更新 更多