帐号: 密码:
// 设为首页 // 收藏本站 // 请您留言 // 网址导航
远方教程-满足你的求知欲!
站内搜索:
HTML ASP PHP CSS DIV Dreamweaver Photoshop Word Excel PPT SEO技巧
您当前位置:网站首页 >> 统计之窗 >> R语言专区 >> 阅读文章

R技巧[23]:R语言中的最大似然估计

来源:远方教程 作者:远方教程 发布时间:2016-07-24 查看次数:4706 访问[新版]

  对于最大似然估计,都是依赖于似然函数的,因此关键在于写出似然函数,然后对该似然函数进行优化。似然函数依个人的问题而定,比如说下面的是正态分布的似然函数:

normal <- function(theta,x){
  mu <- theta[1]
  sigma2 <- theta[2]
  n <- length(x)
  logL <- -0.5*n*log(2*pi)-0.5*n*log(sigma2)-(1/(2*sigma2))*sum((x-mu)**2)
  return (-logL)
}
  上面的theta是指需要估计的正态分布的均值和方差,logL是似然值,之所以返回负数是因为后面用到的优化似然值的函数是最小化函数。
  写出来了似然函数之后,下一步就是如何优化似然函数的值。给定数据x是一个符合正态分布的数据,函数optim()可以进行后续的优化。该函数的一般形式如下:

optim(initial valurs of theta, likelihood function,data)
 

  因此,我们这里的优化结果就可以通过下面的语句给出来:

x <- rnorm(100)

result <- optim(c(0,1),normal,x=x)
 

  result中包含对于theta的估计值,以及优化之后的似然值,其他返回值可以看该函数的文档

  也可以采用其他的函数进行估计,比如maxLik包是一个专门用来进行最大似然估计的,其中的maxLik()函数也可以对于给定的似然函数进行优化,比如说上面的正态分布似然函数normal(),可以直接输入到maxLik()函数中进行估计,不过需要注意的是该函数默认是正的似然函数值,而且不是在函数中输入数据,因此normal()函数需要做一些修改如下:
normal <- function(theta){
   mu <- theta[1]
   sigma <- theta[2]
   logL <- -0.5*N*log(2*pi) - N*log(sigma) - sum(0.5*(x - mu)^2/sigma^2)
   return (logL)
}
  对于给定的数据 x <- rnorm(100,1,2),N <- length(x),然后就可以使用下面的语句进行最大似然估计了:
result <- maxLik(normal,start=c(0,1))

  得到的结果如下:

print(result)
Maximum Likelihood estimation
Newton-Raphson maximisation, 8 iterations
Return code 1: gradient close to zero
Log-Likelihood: -2117.389 (2 free parameter(s))
Estimate(s): 1.007240 2.010635

  可见,虽然在maxLik()函数中给出的初始值是错误的,但是最后得到的估计值非常接近真值。

打印 打印 | 关闭 关闭 评论
相关文章
图片新闻
站内搜索  
搜索
猜您喜欢  
最新更新  
阅读排行  
关于我们 | 联系方式 | 大事记 | 免责声明 | | 给我留言
部分广告源自金山联盟2345联盟 QQ咨询 站长之家QQ群:232617873
Copyright 2024 远方教程 © All Rights Reserved.

回顶部