我为仿真和估计编写了这些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(β/lambda^2)*log(1-theta*uq/(1-Uq))中):((β/lambda^2)*log(1-theta*uq/(1-Uq))*exp(β/lambda))^(1/alpha)的一些值是NA或NaN。返回这些条目的'NA‘。
我如何解决这些问题?
发布于 2017-07-25 13:18:16
你的问题是由于
(((beta/lambda^2)*log(1-theta*u[q]/(1-u[q]))*
exp(beta/lambda)))^(1/alpha)对于q=2,您可以获得(-0.001043497)^ 0.2857143 =NaN..。我想这对q>2来说也是一样的,这是你真正想要的吗?
还有..。您的函数BXIIWG_LL使用x,但它不接收x作为输入。是这样的吗?
试一试:库(NumDeriv)库(矩阵)库(LambertW)库(实践)
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)
}https://stackoverflow.com/questions/45303735
复制相似问题