R中的极大似然估计
张金龙
jinlongzhang01@gmail.com
人们经常用样本(sample)来估计总体(population)的参数, 假定一个概率密度函数,如正态分布,并给出所有可能的参数组合,那么每一种参数组合所生成当前样本的可能性分别有多大?将最可能产生当前样本的参数,作为总体参数的估计,这就是极大似然(Maximum Likelihood)思想的体现。
在实际的计算中, 人们往往需要先假定某一概率密度, 如正态分布,
$p.d.f. (y) = \frac{1} {\sqrt{2 \pi} \sigma} e^{-1/2 \frac{(y- \mu)^2} {\sigma^2}}$
pdfi <- 1/(sqrt(2*pi)*sigma) * exp(-1/2 * (obs - mu)^2/(sigma^2))
其中, obs为某一次观测值
mu 为 总体平均值的任意估计值
sigma 为 总体标准差的任意估计值,
则可以求得观测到该次观测值的概率 pdfi
对所有的样本数据的概率密度相成, 即获得联合概率密度, 即似然函数。
似然函数 L = pdf1 * pdf2 * pdf3 * ... * pdfn
$L = \prod_{i=1}^n \frac{1} {\sqrt{2 \pi} \sigma} e^{-1/2 \frac{(y- \mu)^2} {\sigma^2}}$
那么,什么样的参数, 才能保证Likelihood函数取最大值?
由于联合概率密度的值往往非常小,在计算机中难以处理,一般情况下, 将似然函数取对数, 便于数值操作。
此时,做一系列的变换。
:
如:
$LogL = \sum_{i=1}^n \log\left ( \frac{1} {\sqrt{2 \pi} \sigma} e^{-1/2 \frac{(y- \mu)^2} {\sigma^2}} \right )$
$LogL= \sum_{i=1}^n \left [ \log\left ( \frac{1} {\sqrt{2 \pi} \sigma} \right ) + \log\left ( e^{-1/2 \frac{(y- \mu)^2} {\sigma^2}} \right ) \right ]$
$LogL= \sum_{i=1}^n \log(2 \pi)^{-1/2} + \sum_{i=1}^n \log\left (\frac{1} {\sigma}\right ) + \sum_{i=1}^n \left ( -1/2 \frac{(y- \mu)^2} {\sigma^2} \right )$
$LogL= -\frac{n} {2} \log(2 \pi) - n \log(\sigma) - \frac{1} {2 \sigma^2} \sum_{i=1}^n ( y - \mu)^2$
若认为LogL为$\mu$的函数, 若保证LogL最大值,令 $\sum_{i=1}^n ( y - \mu)^2$ 取最大值,则
$\mu = \frac{\sum_{i=1}^n y_i}{n}$
另外一方面, 若认为LogL为$\sigma$的函数, 将LogL函数对$\sigma$求导, 令导数为0, 可求得极值。
$\frac{\delta LogL}{\delta \sigma} = -\frac{n}{\sigma} - (-2) \frac{1}{2} \sum_{i=1}^n (y - \mu)^2 \sigma^{-3}$
$\frac{\delta LogL}{\delta \sigma} = -\frac{n}{\sigma} + \frac{1}{\sigma^2} \sum_{i=1}^n (y - \mu)^2$
令导数为0, 得
$\frac{n}{\sigma} = \frac{1}{\sigma^3} \sum_{i=1}^n (y - \mu)^2$
$\sigma^2 = \frac{\sum_{i=1}^n (y - \mu)^2}{n}$
此时, 带入之前$\mu$,求得$\sigma$的估计
$\hat{\sigma}^2 = \frac{\sum_{i=1}^n (y - \bar{y})^2}{n}$
用极大似然估计求得的$\sigma$值为有偏估计, 即样本的最可能取值。
以上是解析解。 在实际情况下, 人们常用多种优化方法, 求得极大似然估计的数值解。 这些方法包括
"Nelder-Mead" (Nelder and Mead ,1965), "BFGS" (Broyden, Fletcher, Goldfarb and Shanno, 1970), "CG" (Fletcher and Reeves,1964), "L-BFGS-B" (Byrd et. al. ,1995) , "SANN" (Belisle 1992), 等。
由此看来, 极大似然估计, 首先是按照假定的概率密度, 求得联合概率密度, 即似然函数,进一步写成对数似然函数, 再用数值优化的方法, 求得对数似然函数所对应的点(各参数)。即获得参数的极大然估计。
下面提供一个实例:
问题:
假设一批树木中抽取若干个体,胸径分别为 150, 124, 100, 107, 170, 144, 113, 108, 92, 129, 123, 118,试求这批树木胸径的平均值和标准差。
分析:
如果用这批样本数据直接计算平均值和方差, 可以得到总体平均值和标准差的估计。
dat <- c(150, 124, 100, 107, 170, 144, 113, 108, 92, 129, 123, 118)
> mean(dat)
[1] 123.1667
### 求样本平均值
mean.sample <- sum(dat)/length(dat)
### 设置空向量
var.sample <- c()
for(i in 1:length(dat)){
var.sample[i] <- (dat[i] - mean.sample)^2
}
dd <- sum(var.sample)
## 求样本标准差
sqrt(dd/(length(dat)))
## 求总体标准差
sqrt(dd/(length(dat) - 1))
以上是普通的估计方法
下面用极大似然方法估计
###########################################################################
### 联合概率密度
like = function(data, mu, sigma) {
like = 1
for(i in 1:length(data)){
# like = like *( 1/(sqrt(2*pi)*sigma) * exp(-1/2 * (data[i] - mu)^2/(sigma^2)))
like = like * dnorm(x = dat[i], mean = mu, sd = sigma)
}
return(like)
}
like(dat, 120, 20)
### 对数似然函数
loglike = function(data, mu, sigma) {
loglike = 0
for(i in 1:length(data)){
loglike = loglike + log(dnorm(x = dat[i], mean = mu, sd = sigma))
}
return(loglike)
}
loglike(dat, 122, 20)
### 扩展参数组合
params = expand.grid(mu = seq(50, 200, 1),
sigma = seq(10, 40, 1))
LogLik.surf
= with(params, loglike(dat, mu, sigma))
dim(LogLik.surf) <- c(length(seq(50, 200, 1)), length(seq(10, 40, 1)))
library(lattice)
contourplot(LogLik.surf ~ mu*sigma, data = params, cuts = 20)
# Zooming in
params = expand.grid(mu = seq(120, 126, 0.01), sigma = seq(18, 25, 0.1))
LogLik.surf.zoom = with(params, loglike(dat, mu, sigma))
dim(LogLik.surf.zoom) <- c(length(seq(120, 126, 0.01)), length(seq(18, 25, 0.1)))
library(lattice)
contourplot(LogLik.surf.zoom ~ mu*sigma, data = params, cuts = 20, region = TRUE)
### nlm进行极大似然优化, 需要提供初始值
### 对数似然函数
loglike000 = function(p) {
loglike = 0
for(i in 1:length(dat)){
loglike = loglike + log(dnorm(x = dat[i], mean = p[1], sd = p[2]))
}
return(-loglike)
}
(MLEst <- nlm(f = loglike000, p = c(100, 10)))
参考
http://www.quantumforest.com/2011/10/maximum-likelihood/
转载本文请联系原作者获取授权,同时请注明本文来自张金龙科学网博客。 链接地址: https://blog.sciencenet.cn/blog-255662-585586.html
上一篇:
花粉传播有关的几个公式 下一篇:
论文投稿用什么软件修改图片?(生态学)