首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表传递给R中的函数,以便在优化中使用

将列表传递给R中的函数,以便在优化中使用
EN

Stack Overflow用户
提问于 2015-02-22 22:08:41
回答 2查看 358关注 0票数 1

我想要对R中的伽马分布的最大似然进行编程;到目前为止,我已经完成了以下工作:

代码语言:javascript
复制
library(stats4)
x<-scan("http://www.cmc.edu/pages/faculty/MONeill/Math152/Handouts/gamma-arrivals.txt")
loglike2<-function(LL){
alpha<-LL$a
beta<-LL$b
(alpha-1)*sum(log(x))-n*alpha*log(beta)-n*lgamma(alpha)}

mle(loglike2,start=list(a=0.5,b=0.5))

但当我想要运行它时,会出现以下消息:

代码语言:javascript
复制
Error in mle(loglike2, start = list(a = 0.5, b = 0.5)) : 
  some named arguments in 'start' are not arguments to the supplied log-likelihood

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-02-22 22:16:41

从错误消息中可以看出,mle需要能够在函数调用本身中看到start=中列出的变量名。

代码语言:javascript
复制
loglike2<-function(a, b){
    alpha<-a
    beta<-b
    (alpha-1)*sum(log(x))-n*alpha*log(beta)-n*lgamma(alpha)
}

mle(loglike2,start=list(a=0.5,b=0.5))

如果这不起作用,您应该发布一个定义了所有变量的reproducible example,并显式地指出mle函数来自哪个包。

票数 0
EN

Stack Overflow用户

发布于 2015-02-23 03:18:32

不幸的是,错误消息是残缺的,因为它指示由于alpha和gamma必须为正并且mle在实数上进行优化而导致的错误值。因此,您需要对函数进行优化的向量进行变换,如下所示:

代码语言:javascript
复制
library(stats4)
x<-scan("http://www.cmc.edu/pages/faculty/MONeill/Math152/Handouts/gamma-arrivals.txt")

loglike<-function(alpha,beta){
    (alpha-1)*sum(log(x))-n*alpha*log(beta)-n*lgamma(alpha)
}

fit  <-  mle(function(alpha,beta)
                 # transfrom the parameters so they are positive
                 loglike(exp(alpha),exp(beta)),
             start=list(alpha=log(.5),beta=log(.5)))

# of course you would have to exponentiate the estimates too.
exp(coef(fit1))

请注意,现在的错误是您在loglike()中使用了尚未定义的n。如果您定义了n,那么您会得到一个错误,声明为Lapack routine dgesv: system is exactly singular: U[1,1] = 0。这要么是因为对alpha和beta的起始值的猜测不是很好,要么(更有可能)是loglike()没有最小值(我认为你昨晚删除的帖子有一个略微不同的公式,我可以工作,但不能回应b/c帖子被删除了……)

仅供参考,如果您想检查导致错误的alpha和beta参数,您可以使用作用域赋值将最近调用的参数发布到定义loglike()的环境中,如下所示:

代码语言:javascript
复制
loglike<-function(alpha,beta){
    g <<- c(alpha,beta)
    (alpha-1)*sum(log(x))-n*alpha*log(beta)-n*lgamma(alpha)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28658730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档