统计基础——极大似然估计的软件求解

一、引言

极大似然估计是数理统计参数估计的重要方法,但是极大似然函数的求解有时很困难,在篇文章以一个极大似然题目为例子。来展示一元极大似然函数的求解问题,并最终附上代码及讲解。

二、题目及推导

例子:某电子元件的寿命(单位:小时)服从威布尔分布,分布的概率密度函数为:
f ( x ; a , b ) = { a b a x a 1 e ( x b ) a , if  x  >0 0 , 其他 f(x;a,b)= \begin{cases} \frac{a}{b^a}x^{a-1}e^{-(\frac{x}{b})^a}, & \text {if $x$ >0} \\ 0, & \text{其他} \end{cases}
其中 a a >0, b b >0。假设已知 a a =2.5,已有这容量为101的一个样本容量如下:
97.73,152.86,148.27,86.81,166.78,79.66,95.01,22.24,52.66,150.02
求参数 b b 的极大似然估计。

解答:写出该题目的对数似然函数
L = k = 1 10 l n ( f ( x i ; a , b ) ) = 10 a l n ( b ) k = 1 10 x i b a + C (C是与b无关的常数) \begin{aligned} L^* &\left.=\sum_{k=1}^{10}ln(f(x_i;a,b)) \right. \\ &\left.=-10aln(b) -\frac{\sum_{k=1}^{10}x_i}{b^a}+C \right.\text{(C是与b无关的常数)} \\ \end{aligned}
这个问题变成了下面这个函数的极大值点的问题。
L = 10 a l n ( b ) k = 1 10 x i b a \begin{aligned} L^* &\left.=-10aln(b) -\frac{\sum_{k=1}^{10}x_i}{b^a}\right. \\ \end{aligned} 下面用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"两种方式。

发布了7 篇原创文章 · 获赞 31 · 访问量 9704

猜你喜欢

转载自blog.csdn.net/weixin_46111814/article/details/105307362