请选择 进入手机版 | 继续访问电脑版
楼主: vickey_chang
20725 15

[问答] 怎么用R求gamma分布的两个参数的极大似然估计? [推广有奖]

  • 0关注
  • 0粉丝

本科生

95%

还不是VIP/贵宾

-

威望
0
论坛币
429 个
通用积分
0.3000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
131 点
帖子
54
精华
0
在线时间
130 小时
注册时间
2008-4-25
最后登录
2023-10-28

vickey_chang 发表于 2014-10-11 17:22:13 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
试着用optim求,但是总是提示“log(gamma(alpha))”错误,恳请各位大侠赐教!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:极大似然估计 gamma 似然估计 极大似然 GAM

写得真好                                                                        
                                       
                                                     
                                                     
                                             
                                                                 
                                                                                 

使用道具

qoiqpwqr 发表于 2014-10-11 18:30:45 |显示全部楼层 |坛友微信交流群
  1. dat <- rgamma(100, 3, 2)
  2. f <- function(x, dat) {
  3.     a <- x[1]
  4.     b <- x[2]
  5.     return(-sum(a*log(b)-log(gamma(a))+(a-1)*log(dat)-b*dat))
  6. }

  7. optim(c(2, 1), f, dat=dat)
复制代码

使用道具

vickey_chang 发表于 2014-10-11 18:47:06 |显示全部楼层 |坛友微信交流群
qoiqpwqr 发表于 2014-10-11 18:30
非常感谢,这几天一直纠结这件事情,还想着用EM呢,多谢多谢!

使用道具

vickey_chang 发表于 2014-10-11 19:00:56 |显示全部楼层 |坛友微信交流群
vickey_chang 发表于 2014-10-11 18:47
非常感谢,这几天一直纠结这件事情,还想着用EM呢,多谢多谢!
似然函数不应该是这个吗?
n*alpha*log(beta)-n*log(gamma(alpha))+(alpha-1)*sum(log(dat))-beta*sum(dat)
我变成这个就会出现错误 :In log(beta) : 产生了NaNs
用你的就不会,为什么啊?

使用道具

nuomin 发表于 2014-10-11 21:36:25 |显示全部楼层 |坛友微信交流群
qoiqpwqr 发表于 2014-10-11 18:30
sum函数有处理NaN类型的功能吗?

使用道具

qoiqpwqr 发表于 2014-10-13 12:58:22 |显示全部楼层 |坛友微信交流群
vickey_chang 发表于 2014-10-11 19:00
似然函数不应该是这个吗?
n*alpha*log(beta)-n*log(gamma(alpha))+(alpha-1)*sum(log(dat))-beta*sum(d ...
把程序发来看看

使用道具

qoiqpwqr 发表于 2014-10-13 13:00:20 |显示全部楼层 |坛友微信交流群
nuomin 发表于 2014-10-11 21:36
sum函数有处理NaN类型的功能吗?
sum(x, na.rm=T)

使用道具

vickey_chang 发表于 2014-10-14 10:34:44 |显示全部楼层 |坛友微信交流群
qoiqpwqr 发表于 2014-10-13 13:00
sum(x, na.rm=T)
dat <- scan()
18 23 29 409 24
74 13 62 46 4
57 19 47 13 19
208 119 209 10 188

logL<-function(theta,dat){
alpha<-theta[1]
beta<-theta[2]
logL<-n*alpha*log(beta)-n*log(gamma(alpha))+(alpha-1)*sum(log(dat))-beta*sum(dat)
return(-logL)
}
n<-length(dat)
optim(c(1,2),logL,dat=dat)

使用道具

qoiqpwqr 发表于 2014-10-14 18:56:53 |显示全部楼层 |坛友微信交流群
vickey_chang 发表于 2014-10-14 10:34
dat
我们的程序师一样的,用我的程序也会出现警告信息。不过这应该是数值方面的问题,原因可能是去搜索负值的区域了。如果你想可以用constrained optimization,
  1. constrOptim(theta=c(0.06, 0.01), f=logL, ui=Amat, ci=bvec, dat=dat, method="Nelder-Mead")
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 00:39