我想要对R中的伽马分布的最大似然进行编程;到目前为止,我已经完成了以下工作:
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))但当我想要运行它时,会出现以下消息:
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我做错了什么?
发布于 2015-02-22 22:16:41
从错误消息中可以看出,mle需要能够在函数调用本身中看到start=中列出的变量名。
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函数来自哪个包。
发布于 2015-02-23 03:18:32
不幸的是,错误消息是残缺的,因为它指示由于alpha和gamma必须为正并且mle在实数上进行优化而导致的错误值。因此,您需要对函数进行优化的向量进行变换,如下所示:
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()的环境中,如下所示:
loglike<-function(alpha,beta){
g <<- c(alpha,beta)
(alpha-1)*sum(log(x))-n*alpha*log(beta)-n*lgamma(alpha)
}https://stackoverflow.com/questions/28658730
复制相似问题