楼主: superzhang90
8208 12

[问答] 用R做极大似然估计时出现下面错误,求大神指导! [推广有奖]

  • 1关注
  • 1粉丝

大专生

55%

还不是VIP/贵宾

-

威望
0
论坛币
405 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
226 点
帖子
20
精华
0
在线时间
74 小时
注册时间
2014-9-24
最后登录
2020-1-17

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
在做极大似然估计时,遇到下面错误,是参数初始值的原因吗,还是我的似然函数问题,求帮助,万分感谢!! 微信截图_20170215100213.png
二维码

扫码加我 拉你入群

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

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

关键词:极大似然估计 似然估计 极大似然 似然函数 万分感谢

回帖推荐

统计初学 发表于5楼  查看完整内容

首先你定义的LL函数里面没有用到dataDF里的数据,但是函数的变量里却加上了。 其次,那个错误是说在用梯度下降求极大似然的时候不收敛,也就是用你定义的函数,再加上给定的start参数是得不到估计值的。 我把你的函数改成LL
沙发
统计初学 发表于 2017-2-17 14:30:19 |只看作者 |坛友微信交流群
把代码贴出来让大家跑一跑,节约大家时间。
或者自己看看警告的内容是什么

使用道具

藤椅
superzhang90 发表于 2017-2-20 10:38:46 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-17 14:30
把代码贴出来让大家跑一跑,节约大家时间。
或者自己看看警告的内容是什么
你好,这个是代码,依旧报错,好像是超出了gamma函数的范围,不知道咋回事

>head(dataDF)
  counts timelength totallength
1     39          2          17
2     18          1          17
3     90         15          17
4     26          2          17
5     34          7          17
6    148         15          17

library(maxLik)
LL <- function(para,dataDF)
{r <- para[1]
s <- para[2]
a <- para[3]
b <- para[4]
logL <- log(gamma(r+x))-log(gamma(r))+r*log(s)+log(gamma(a+b))+log(gamma(b+x))-log(gamma(b))-log(gamma(a+b+x))+log((s+T)^(-r-x)+(a/(b+x-1))*(s+t)^(-r-x))
return(logL)       
}

x <- as.numeric(dataDF$x)
t <- as.numeric(dataDF$t)
T <- as.numeric(dataDF$T)

result <- maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,10,1))
summary(result)

使用道具

板凳
superzhang90 发表于 2017-2-20 10:40:02 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-17 14:30
把代码贴出来让大家跑一跑,节约大家时间。
或者自己看看警告的内容是什么
> head(dataDF)
    x  t  T
1  39  2 17
2  18  1 17
3  90 15 17
4  26  2 17
5  34  7 17
6 148 15 17
> library(maxLik)
> LL <- function(para,dataDF)
+ {r <- para[1]
+ s <- para[2]
+ a <- para[3]
+ b <- para[4]
+ logL <- log(gamma(r+x))-log(gamma(r))+r*log(s)+log(gamma(a+b))+log(gamma(b+x))-log(gamma(b))-log(gamma(a+b+x))+log((s+T)^(-r-x)+(a/(b+x-1))*(s+t)^(-r-x))
+ return(logL)       
+ }
> x <- as.numeric(dataDF$x)
> t <- as.numeric(dataDF$t)
> T <- as.numeric(dataDF$T)
> result <- maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,10,1))
Error in maxNRCompute(fn = function (theta, fnOrig, gradOrig = NULL, hessOrig = NULL,  :
  NA in the initial gradient
In addition: Warning messages:
1: In fnOrig(theta, ...) : value out of range in 'gammafn'
2: In f(t0, ...) : value out of range in 'gammafn'
3: In f(t1, ...) : value out of range in 'gammafn'
4: In f(t2, ...) : value out of range in 'gammafn'
5: In f(t1, ...) : value out of range in 'gammafn'
6: In f(t2, ...) : value out of range in 'gammafn'
7: In f(t1, ...) : value out of range in 'gammafn'
8: In f(t2, ...) : value out of range in 'gammafn'
9: In f(t1, ...) : value out of range in 'gammafn'
10: In f(t2, ...) : value out of range in 'gammafn'

使用道具

报纸
统计初学 发表于 2017-2-20 16:36:04 |只看作者 |坛友微信交流群
superzhang90 发表于 2017-2-20 10:38
你好,这个是代码,依旧报错,好像是超出了gamma函数的范围,不知道咋回事

>head(dataDF)
首先你定义的LL函数里面没有用到dataDF里的数据,但是函数的变量里却加上了。
其次,那个错误是说在用梯度下降求极大似然的时候不收敛,也就是用你定义的函数,再加上给定的start参数是得不到估计值的。
我把你的函数改成LL <- function(para)
然后参数start修改
result=maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,0.8,1))
是可以得出结果的。

使用道具

地板
superzhang90 发表于 2017-2-21 10:47:41 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-20 16:36
首先你定义的LL函数里面没有用到dataDF里的数据,但是函数的变量里却加上了。
其次,那个错误是说在用梯 ...
您好,我根据您说的修改了下程序但是为什么还是报错,您可以粘贴下您的程序我看下吗,方便留个联系方式么qq或微信,谢谢了

> curwd = setwd("D:/R/work")
> df <- read.csv('activedata.csv',header = TRUE)
> dataDF <- df[,2:4]
> head(dataDF)
    x  t  T
1  39  2 17
2  18  1 17
3  90 15 17
4  26  2 17
5  34  7 17
6 148 15 17
> library(maxLik)
载入需要的程辑包:miscTools

Please cite the 'maxLik' package as:
Henningsen, Arne and Toomet, Ott (2011). maxLik: A package for maximum likelihood estimation in R. Computational Statistics 26(3), 443-458. DOI 10.1007/s00180-010-0217-1.

If you have questions, suggestions, or comments regarding the 'maxLik' package, please use a forum or 'tracker' at maxLik's R-Forge site:
https://r-forge.r-project.org/projects/maxlik/
> LL <- function(para)
+ {r <- para[1]
+ s <- para[2]
+ a <- para[3]
+ b <- para[4]
+ logL <- log(gamma(r+x))-log(gamma(r))+r*log(s)+log(gamma(a+b))+log(gamma(b+x))-log(gamma(b))-log(gamma(a+b+x))+log((s+T)^(-r-x)+(a/(b+x-1))*(s+t)^(-r-x))
+ return(logL)       
+ }
> x <- as.numeric(dataDF$x)
> t <- as.numeric(dataDF$t)
> T <- as.numeric(dataDF$T)
> result <- maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,0.8,1))
There were 50 or more warnings (use warnings() to see the first 50)
> summary(result)
--------------------------------------------
Maximum Likelihood estimation
Newton-Raphson maximisation, 0 iterations
Return code 100: Initial value out of range.
--------------------------------------------
> result=maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,0.8,1))
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
警告信息:
1: In fnOrig(theta, ...) : value out of range in 'gammafn'
2: In fnOrig(theta, ...) : value out of range in 'gammafn'
3: In fnOrig(theta, ...) : value out of range in 'gammafn'
4: In fnOrig(theta, ...) : value out of range in 'gammafn'
5: In fnOrig(theta, ...) : value out of range in 'gammafn'
6: In fnOrig(theta, ...) : value out of range in 'gammafn'
7: In fnOrig(theta, ...) : value out of range in 'gammafn'
8: In fnOrig(theta, ...) : value out of range in 'gammafn'
9: In fnOrig(theta, ...) : value out of range in 'gammafn'
10: In fnOrig(theta, ...) : value out of range in 'gammafn'


再粘贴几个数据:
mac        x        t        T
00003a16723a        39        2        17
000271d5e0c2        18        1        17
0002723ec760        90        15        17
0002723ec771        26        2        17
0002723ec781        34        7        17
000272c243c4        148        15        17
000272c2cee2        84        15        17
000272c2cee7        114        15        17
000272c2cf07        115        15        17
000272c2cf65        91        15        17
000272c2cf6b        64        8        17
00037f05c0ca        13        11        17
00049454b178        35        2        17
000668334b87        10        12        17
00066838b933        11        3        17
000668d281e2        33        6        17
0006e21f8773        11        14        17
0007a6391eee        11        8        17
0007a838fdc5        61        7        17
0007a83d91d1        163        8        17
0007a83eb29c        15        14        17
0007a8605eb6        36        16        17
0007ab34b831        13        12        17
00082200befb        5        16        17
000822010e2d        12        2        17
00082202bcfb        4        7        17
00082202c1fb        5        14        17
00082204bafb        7        11        17
00082204cefb        5        11        17
00082204d8fb        4        3        17
00082206434f        7        4        17
00082206b8fb        5        12        17
00082206bdfb        5        17        17
00082208b6fb        8        5        17
00082208e8fb        5        11        17
0008220cbcfb        11        15        17
0008220cd0fb        7        12        17
0008220eb0fb        6        17        17
0008220f3526        16        1        17
000822103f25        24        15        17
00082210b8fb        6        15        17
00082210c2fb        6        7        17
00082212553b        4        5        17
00082214b4fb        5        15        17
00082214befb        10        17        17
00082214c8fb        4        6        17
000822150a09        279        16        17
00082216dffb        4        16        17
00082218703e        6        1        17

使用道具

7
superzhang90 发表于 2017-2-21 10:52:55 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-20 16:36
首先你定义的LL函数里面没有用到dataDF里的数据,但是函数的变量里却加上了。
其次,那个错误是说在用梯 ...
您好,我按照您说的修改程序又做了一下,还是出错,你可以粘贴下你的程序吗,方便留个联系方式qq或微信吗!!谢谢啦

> curwd = setwd("D:/R/work")
> df <- read.csv('activedata.csv',header = TRUE)
> dataDF <- df[,2:4]
> head(dataDF)
    x  t  T
1  39  2 17
2  18  1 17
3  90 15 17
4  26  2 17
5  34  7 17
6 148 15 17
> library(maxLik)
载入需要的程辑包:miscTools

Please cite the 'maxLik' package as:
Henningsen, Arne and Toomet, Ott (2011). maxLik: A package for maximum likelihood estimation in R. Computational Statistics 26(3), 443-458. DOI 10.1007/s00180-010-0217-1.

If you have questions, suggestions, or comments regarding the 'maxLik' package, please use a forum or 'tracker' at maxLik's R-Forge site:
https://r-forge.r-project.org/projects/maxlik/
> LL <- function(para)
+ {r <- para[1]
+ s <- para[2]
+ a <- para[3]
+ b <- para[4]
+ logL <- log(gamma(r+x))-log(gamma(r))+r*log(s)+log(gamma(a+b))+log(gamma(b+x))-log(gamma(b))-log(gamma(a+b+x))+log((s+T)^(-r-x)+(a/(b+x-1))*(s+t)^(-r-x))
+ return(logL)       
+ }
> x <- as.numeric(dataDF$x)
> t <- as.numeric(dataDF$t)
> T <- as.numeric(dataDF$T)
> result <- maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,0.8,1))
There were 50 or more warnings (use warnings() to see the first 50)
> summary(result)
--------------------------------------------
Maximum Likelihood estimation
Newton-Raphson maximisation, 0 iterations
Return code 100: Initial value out of range.
--------------------------------------------
> result=maxLik(LL,grad = NULL,hess = NULL,start=c(0.58,0.64,0.8,1))
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
警告信息:
1: In fnOrig(theta, ...) : value out of range in 'gammafn'
2: In fnOrig(theta, ...) : value out of range in 'gammafn'
3: In fnOrig(theta, ...) : value out of range in 'gammafn'
4: In fnOrig(theta, ...) : value out of range in 'gammafn'
5: In fnOrig(theta, ...) : value out of range in 'gammafn'
6: In fnOrig(theta, ...) : value out of range in 'gammafn'
7: In fnOrig(theta, ...) : value out of range in 'gammafn'
8: In fnOrig(theta, ...) : value out of range in 'gammafn'
9: In fnOrig(theta, ...) : value out of range in 'gammafn'
10: In fnOrig(theta, ...) : value out of range in 'gammafn'


在增加几个数据:
mac        x        t        T
00003a16723a        39        2        17
000271d5e0c2        18        1        17
0002723ec760        90        15        17
0002723ec771        26        2        17
0002723ec781        34        7        17
000272c243c4        148        15        17
000272c2cee2        84        15        17
000272c2cee7        114        15        17
000272c2cf07        115        15        17
000272c2cf65        91        15        17
000272c2cf6b        64        8        17
00037f05c0ca        13        11        17
00049454b178        35        2        17
000668334b87        10        12        17
00066838b933        11        3        17
000668d281e2        33        6        17
0006e21f8773        11        14        17
0007a6391eee        11        8        17
0007a838fdc5        61        7        17
0007a83d91d1        163        8        17
0007a83eb29c        15        14        17
0007a8605eb6        36        16        17
0007ab34b831        13        12        17
00082200befb        5        16        17
000822010e2d        12        2        17
00082202bcfb        4        7        17
00082202c1fb        5        14        17
00082204bafb        7        11        17
00082204cefb        5        11        17
00082204d8fb        4        3        17
00082206434f        7        4        17
00082206b8fb        5        12        17
00082206bdfb        5        17        17
00082208b6fb        8        5        17
00082208e8fb        5        11        17
0008220cbcfb        11        15        17
0008220cd0fb        7        12        17
0008220eb0fb        6        17        17
0008220f3526        16        1        17
000822103f25        24        15        17
00082210b8fb        6        15        17
00082210c2fb        6        7        17
00082212553b        4        5        17
00082214b4fb        5        15        17
00082214befb        10        17        17
00082214c8fb        4        6        17
000822150a09        279        16        17
00082216dffb        4        16        17
00082218703e        6        1        17

使用道具

8
superzhang90 发表于 2017-2-21 11:00:23 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-20 16:36
首先你定义的LL函数里面没有用到dataDF里的数据,但是函数的变量里却加上了。
其次,那个错误是说在用梯 ...
你好,可以粘贴下你的程序我看下吗,我修改之后还是报错

使用道具

9
统计初学 发表于 2017-2-22 09:41:46 |只看作者 |坛友微信交流群
superzhang90 发表于 2017-2-21 11:00
你好,可以粘贴下你的程序我看下吗,我修改之后还是报错
你的这个不是报错,结果已经出来了。
因为极大似然的结果是通过迭代得到的,而电脑是不可能无限迭代下去的,会设置一个迭代最大次数。
在你定义的LL函数下,迭代到最大次数时,函数还没有收敛,所以输出了当前值,出现了警告。

使用道具

10
superzhang90 发表于 2017-2-22 10:40:10 |只看作者 |坛友微信交流群
统计初学 发表于 2017-2-22 09:41
你的这个不是报错,结果已经出来了。
因为极大似然的结果是通过迭代得到的,而电脑是不可能无限迭代下去 ...
好的谢谢,我计算过程中 x 的值小于100时可以得到参数值,但是当公式中 x 的值大于100的时候,参数估计得不到结果,考虑是不是gamma函数定义域的原因?

使用道具

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

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

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

GMT+8, 2024-4-28 22:13