【问题标题】:Error: object 'mle.result' not found错误:找不到对象“mle.result”
【发布时间】:2017-07-25 12:45:24
【问题描述】:

我编写了这些 R 代码用于模拟和估计,如下所示。

library(numDeriv)
library(Matrix)
library(LambertW)

alpha=3.5
beta=2.0
theta=0.5
lambda=4.0

n=50
#Generate a random variable from uniform distribution
u<-0
u=seq(0,0.99,0.01)

for (q in 1:n)
{
   x[q]<- (lambda/beta)*
    W((((beta/lambda^2)*log(1-theta*u[q]/(1-u[q]))*
          exp(beta/lambda)))^(1/alpha),branch = 0)
}

BXIIWG_LL <- function(par){
  -sum(log(par[1]*par[2]*x^(par[2]-1)*(1+x)+
   par[3]*par[2]*x^(par[2]-1))*(1-par[4])*(1+x^par[2])^(-par[3]-1)*
        exp(-par[1]*x^par[2])/(1-par[4]
         (1+x^par[2])^(-par[3])*exp(-par[1]*x^par[2]))^(2))

#Maximum likelihood estimation
mle.result <- nlminb(c(alpha,beta,theta,lambda),
    BXIIWG_LL,lower=0,upper=Inf)

我得到的结果如下:

(1) 错误:找不到对象“mle.result”。
(2) 警告:在 W((((beta/lambda^2) * log(1 - theta * u[q]/(1 - u[q])) 中:(((beta/lambda^2 ) * log(1 - theta * u[q]/(1 - u[q])) * exp(beta/lambda)))^(1/alpha) 是 NA 或 NaN。为这些条目返回“NA”。

我该如何解决这些问题?

【问题讨论】:

  • 当我运行你的代码时,我在得到Error: object 'x' not found之前到达for循环。请编辑您的代码以包含x 的定义...

标签: r


【解决方案1】:

你的问题是由于

  (((beta/lambda^2)*log(1-theta*u[q]/(1-u[q]))*
              exp(beta/lambda)))^(1/alpha)

对于q=2,您获得(-0.001043497)^ 0.2857143 =NaN.. 我想这对于q&gt;2 也是一样的 这是你真正想要的吗?

另外..您的函数BXIIWG_LL 使用x,但它没有接收x 作为输入.. 是这样吗?

试试这个: 库(numDeriv) 库(矩阵) 图书馆(LambertW) 库(pracma)

alphaDen=7
alphaNum=2
beta=2.0
theta=0.5
lambda=4.0

n=50
#Generate a random variable from uniform distribution
u<-0
u=seq(0,0.99,0.01)
x= c()

for (q in 1:n)
{
  numb =((beta/lambda^2)*log(1-theta*u[q]/(1-u[q]))*exp(beta/lambda))
  numbPow = numb^alphaNum
  sqrtNumb= nthroot(numbPow,alphaDen)
  x[q]<- (lambda/beta)*numb
    W(,branch = 0)
}

【讨论】: