16 极大似然估计

16.1 自定义极大似然函数

16.1.1 正态分布

正态分布的概率密度函数

f(x)=12πσe(xμ)22σ2 最大似然函数

L(μ,σ)=i=1nf(xi,μ,σ)=i=1n12πσe(xμ)22σ2=(12πσ)ni=1n(xiμ)22σ2

对数最大似然函数

lnL(μ,σ)=nln12πσi=1n(xiμ)22σ2

得到对数最大似然函数后,再利用R中的optim函数求解对数最大似然函数取极值时对应的参数值 μσ

norm.fun<- function(theta,x) # 创建似然函数
{  
  mu<- theta[1]
  sigma<- theta[2]   
  n<- length(x)
  # 似然函数,再求其对数
  logL<- n*log( 1/( sqrt(2*pi)*sigma))  - sum((x-mu)^2)/(2*sigma^2)
  return(-logL)  # 因为R中只有最小化函数optim(),我们只需要参数的值,最大化 logL 和最小化 -logL 一致的
}  

theta0=c(0,1) #初始化两个参数作为迭代初始值
X=1:50 #抽出的样本(这里我以1至50作为数据样本)

result=optim(theta0,norm.fun,x=X)
# 用R中内置的optim()最小化函数对 似然函数优化,求出最优值的两个参数u、sigma
# 参数的值保存在result$'par' 中,有两个值,第一个是u 第二个是sigma
result
## $par
## [1] 25.48969 14.43959
## 
## $value
## [1] 204.4154
## 
## $counts
## function gradient 
##       81       NA 
## 
## $convergence
## [1] 0
## 
## $message
## NULL

lnL取得最大值时(即lnL取得最小值时),解出的μ的参数值为25.48969,σ的参数估计值为14.43959,lnL为204.4154。

16.1.2 指数分布

指数分布的概率密度函数

f(x)={λeλx,x>00,x0

最大似然函数

L(λ)=i=1nf(xi,λ)=i=1nλeλx=λneλi=1nxi

对数最大似然函数

lnL(λ)=nlnλλi=1nxi

得到对数最大似然函数后,再利用R中的optim函数求解对数最大似然函数取极值时对应的参数值 λ

exp.fun <- function(theta,x){
  n <- length(x)
  logL <- n*log(theta)-theta*sum(x)
  return(-logL)
}
x=1:50
lamda=1e-2
result=optim(par = lamda,fn = exp.fun,x=X) #运行会有一些警告,说optim()优化的结果不一定正确,但这里是正确的,不影响
## Warning in optim(par = lamda, fn = exp.fun, x = X): one-dimensional optimization by Nelder-Mead is unreliable:
## use "Brent" or optimize() directly
result 
## $par
## [1] 0.03921875
## 
## $value
## [1] 211.9339
## 
## $counts
## function gradient 
##       30       NA 
## 
## $convergence
## [1] 0
## 
## $message
## NULL

lnL取得最大值时(即lnL取得最小值时),解出的λ的参数值为 0.03921875,lnL为211.9339。