一、引言
极大似然估计是数理统计参数估计的重要方法,但是极大似然函数的求解有时很困难,在篇文章以一个极大似然题目为例子。来展示一元极大似然函数的求解问题,并最终附上代码及讲解。
二、题目及推导
例子:某电子元件的寿命(单位:小时)服从威布尔分布,分布的概率密度函数为:
其中
>0,
>0。假设已知
=2.5,已有这容量为101的一个样本容量如下:
97.73,152.86,148.27,86.81,166.78,79.66,95.01,22.24,52.66,150.02
求参数
的极大似然估计。
解答:写出该题目的对数似然函数
这个问题变成了下面这个函数的极大值点的问题。
下面用R语言自编函数来解决这个问题。
三、R语言求解
结果运算
# 读入数据
data = c(96.73, 152.86, 148.27, 86.81, 166.78, 79.66,
95.01, 22.24, 52.66, 150.02)
# 自编函数
MLE <- function(a = 2.5, data){
fun <- function(b){
-10*a*log(b)-sum(data)/(b^a)
}
optim(50, fun, method = "CG")$par
}
# 函数调用
> MLE(a = 2.5, data = data)
[1] 86.30949
最终结果是 86.309
optim函数介绍
这个函数题太长,只贴出参数部分。详细用法参照optim函数帮助文档。
function (par, fn, gr = NULL, ..., method = c("Nelder-Mead",
"BFGS", "CG", "L-BFGS-B", "SANN",
"Brent"), lower = -Inf, upper = Inf, control = list(),
hessian = FALSE)
这里只说一个参数,method
,一般选择 “BFGS”, "CG"两种方式。