0.摘要
生成服从对数正态的样本,写出关于参数的极大似然函数,对极大似然函数求最值,求得参数估计值。比较R的不同优化函数、不同样本量、不同估计次数的MSE和Bias。
1.产生100个随机样本
set.seed(100)
lnormdata1 <- rlnorm(100, 2, 3)
2.利用不同方法计算参数的极大似然估计
Step1: Set the initial value
theta0 <- c(1, 2)
data0 <- log(lnormdata1)
Step2: Give the likelihood function
NormHood <- function(data, params){
like <- sum(log(dnorm(data, params[1], params[2])))
return(-like)
}
Step3: MLE by 4 kinds of R functions
fit1 <- constrOptim(theta =theta0, data = data0, f = NormHood, grad = NULL, ui = diag(2), ci = c(0,1), outer.iterations = 1000)
fit2 <- nlminb(start = theta0, objective = NormHood, data = data0)
fit3 <- optim(par = theta0, fn = NormHood, data = data0)
fit4 <- nlm(NormHood, p = theta0, data = data0)
Step4: Report the results
result1 <- data.frame(constrOptim_result = fit1$par, nlminb_result = fit2$par, optim_result = fit3$par, nlm_result = fit4$estimate, row.names = c("μ", "σ"))
kable(result1)
constrOptim_result | nlminb_result | optim_result | nlm_result | |
---|---|---|---|---|
μ | 2.008688 | 2.008739 | 2.008813 | 2.008739 |
σ | 3.047036 | 3.046783 | 3.046608 | 3.046780 |
由上面的表格可以看出,constrOptim方法估计出的μ最接近真实值,optim方法估计出的σ最接近真实值.
3.不同方法、样本量、估计次数下比较Bias和MSE,并画出盒图。
1) 初始化结果输出
snum <- c(500, 1000, 2000)
etimes <- c(800, 1500, 3000)
result2 <- vector(mode = "list", length = length(etimes))
for (i in 1 : lengt