楼主: vickey_chang
22049 15

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

  • 0关注
  • 0粉丝

本科生

95%

还不是VIP/贵宾

-

威望
0
论坛币
429 个
通用积分
0.1500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
125 点
帖子
52
精华
0
在线时间
131 小时
注册时间
2008-4-25
最后登录
2024-7-20

楼主
vickey_chang 发表于 2014-10-11 17:22:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

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

扫码加我 拉你入群

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

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

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

沙发
下一片蓝天 发表于 2014-10-11 17:45:18
写得真好                                                                        
                                       
                                                     
                                                     
                                             
                                                                 
                                                                                 

藤椅
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类型的功能吗?

7
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 ...
把程序发来看看

8
qoiqpwqr 发表于 2014-10-13 13:00:20
nuomin 发表于 2014-10-11 21:36
sum函数有处理NaN类型的功能吗?
sum(x, na.rm=T)

9
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)

10
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
拉您进交流群
GMT+8, 2026-1-4 07:38