我写了这些用于模拟和估算的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)错误:对象&#39; mle.result&#39;没找到。
(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。返回&#39; NA&#39;这些条目。
如何解决这些问题?
答案 0 :(得分:0)
您的问题是由于
中的结果 (((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) 库(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)
}