R 中的威布尔 MLE

Weibull MLE in R

对数似然函数 looks like this。我在 R 中写了一个函数,这个 return 的负数是对数似然的一倍。我用参数 shape=1.5,scale=0.5 的 rWeibull 生成了一个向量。但是当我用我的对数似然函数调用 nlm 函数时,参数的估计值为:2.124180 和 4.003675。我的 R 代码有什么问题? 代码:

vec<-rWeibull(n=1000, params=list(shape=1.5, scale=0.5))
weibull_loglik<-function(parm){
n<-length(vec)
gamma<-parm[1]
lambda<-parm[2]
loglik<-n*log(gamma/lambda)+(gamma-1)*sum(vec-log((lambda^(gamma-1))))-sum((vec/lambda)^gamma)
return(-loglik)}
weibull<-nlm(weibull_loglik,parm<-c(1,1), hessian=TRUE)
weibull$estimate

您的对数似然不正确。当我使用 dweibull(..., log=TRUE):

时我得到了正确的估计
vec <- rweibull(n=1000, shape=1.5, scale=0.5)
weibull_loglik <- function(parm){
  n <- length(vec)
  gamma <- parm[1]
  lambda <- parm[2]
  loglik <- sum(dweibull(vec, shape=gamma, scale=lambda, log=TRUE))
  return(-loglik)
}
weibull <- nlm(weibull_loglik, p = c(1,1), hessian=TRUE)

> weibull$estimate
[1] 1.5547181 0.5116119

我觉得应该是:

loglik<-n*log(gamma/lambda)+(gamma-1)*sum(vec)-log((lambda^(gamma-1)))-
sum((vec/lambda)^gamma)

因为您没有对 LogLik 函数的第三部分求和。