我目前正在完成关于Sarhan和Apaloo(2013)引入的指数修正威布尔扩展(EMWE)分布参数估计的本科论文,其中包括以下pdf:
f(x,theta)=theta[1]*theta[2]*theta[3]*((x/theta[4])^(theta[2]-1))*(exp(((x/theta[4])^theta[2])+(theta[1]*theta[4]*(1-(exp(x/theta[4])^theta[2])))))*(1-(exp(theta[1]*theta[4]*(1-(exp(x/theta[4])^theta[2])))))^(theta[3]-1)
该分布具有使用最大似然估计估计的四个参数。由于隐式估计参数,我尝试继续使用Newton-Raphson迭代方法。对于我的计算过程,我使用的是统计软件R语言。我使用的包是“maxLik”,Newton-Raphson方法的初始值是(theta [1] = 0.00007181, theta [2] = 3,148, theta [3] = 0.145, theta [4] = 49.05)
。
这是对数似然函数:
l(theta)=n*(log(theta[1])+log(theta[2])+log(theta[3])+(1-theta[2])*log(theta[4])+theta[1]*theta[4])+(theta[2]-1)*sum(log(xi))+(1/(theta[4]^theta[2]))*sum(xi^theta[2])-(theta[1]*theta[4])*sum(exp((xi/theta[4])^theta[2]))+(theta[3]-1)*sum(1-(exp((theta[1]*theta[4])*(1-(exp((xi/theta[4])^theta[2]))))))
但是在R语言帮助的参数估计过程中,由于我得到的结果与我使用的参考文献中的估算结果不相似,我陷入僵局。这是我使用的以下R语言语法:
xi<-c(0.1,0.2,1,1,1,1,1,2,3,6,7,11,12,18,18,18,18,18,21,32,36,40,45,46,47,50,55,60,63,63,67,67,67,67,72,75,79,82,82,83,84,84,84,85,85,85,85,85,86,86);
n <-length (xi);
parameter <-function (theta, xi) {
logL<-(n*(log(theta[1])+log(theta[2])+log(theta[3])+(1-theta[2])*log(theta[4])+theta[1]*theta[4])+(theta[2]-1)*sum(log(xi))+(1/(theta[4]^theta[2]))*sum(xi^theta[2])-(theta[1]*theta[4])*sum(exp((xi/theta[4])^theta[2]))+(theta[3]-1)*sum(1-(exp((theta[1]*theta[4])*(1-(exp((xi/theta[4])^theta[2])))))))
return (-logL)
};
library(maxLik);
output <-maxLik (parameter, start = c (0.00007181,3.148,0.145,49.05), xi = xi);
根据语法,我得到的参数估计结果是:
theta [1] = 4.785855e-03
theta [2] = 1.759048e-04
theta [3] = 2.983679e + 04
theta [4] = 9.139192e + 02
虽然纸上属于Sarhan和Apaloo(2013),但结果应如下:
theta [1] = 2.506924e-06
theta [2] = 3.148000e + 00
theta [3] = 1.450000e-01
theta [4] = 4.905000e + 01
我对上述程序中的错误感到困惑。以前,如果我打扰你们,我道歉。我非常感谢你帮助我完成本科毕业论文。很快我会提出这个论点,我发现了很多僵局。我真的期待你的任何帮助,无论多么小的帮助,我都会非常感激。非常感谢你
答案 0 :(得分:1)
你的似然函数有问题。我无法阅读它,但请注意maxLik
最大化目标函数,因此您必须返回loglik,而不是-loglik。我以更易阅读的形式重新编写了它(请参阅Sarhan&amp; Apaloo 2013)(对不起,但请为参数命名,添加空格,将长方程分成多行...),我也不想使用名称& #34;参数&#34;对于对数似然函数...
loglik <-function(theta, xi) {
lambda <- theta[1]
beta <- theta[2]
gamma <- theta[3]
alpha <- theta[4]
xi.a <- xi/alpha
A <- log(lambda) + log(beta) + log(gamma) + (beta - 1)*log(xi.a)
LA1 <- lambda*alpha*(1 - exp(xi.a^beta))
B <- xi.a^beta + LA1
C <- log(1 - exp(LA1))
logL <- A + B + (gamma - 1)*C
return(logL)
}
library(maxLik);
start <- c(2.506924e-6, 3.148,0.145,49.05)
m <- maxLik(loglik, start=start, xi = xi);
它有点奏效。主要问题似乎是数字不稳定。玩不同的优化方法,特别是BFGS似乎让你相当接近:
summary(maxLik(loglik, start = start, method="bfgs", xi = xi))
--------------------------------------------
Maximum Likelihood estimation
BFGS maximization, 337 iterations
Return code 0: successful convergence
Log-Likelihood: -213.3168
4 free parameters
Estimates:
Estimate Std. error t value Pr(> t)
[1,] 1.213e-05 5.976e-06 2.030 0.0423 *
[2,] 3.133e+00 3.709e-02 84.456 < 2e-16 ***
[3,] 1.255e-01 1.897e-02 6.615 3.72e-11 ***
[4,] 4.496e+01 NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
另外,如果您修复了第一个参数,那么您将获得BHHH的确切值:
summary(maxLik(loglik, start = start, method="bhhh", xi = xi, fixed=1))
--------------------------------------------
Maximum Likelihood estimation
BHHH maximisation, 13 iterations
Return code 2: successive function values within tolerance limit
Log-Likelihood: -213.5116
3 free parameters
Estimates:
Estimate Std. error t value Pr(> t)
[1,] 2.507e-06 0.000e+00 NA NA
[2,] 3.091e+00 9.577e-03 322.74 < 2e-16 ***
[3,] 1.153e-01 2.234e-02 5.16 2.46e-07 ***
[4,] 4.189e+01 1.592e+00 26.32 < 2e-16 ***
它暗示剩下的问题与源自第一个组件(lambda)的数值不稳定性有关。我可以建议两种补救措施:
lambda
提供它就足够了。lambda <- theta[1]/1e6
,并相应地调整起始值,似乎也可以提高收敛性。另请注意,我从似然函数中删除了求和:现在您也可以使用BHHH方法,这种方法通常比NR更强大。