log(n)中的错误:数学函数的非数字参数

时间:2014-06-29 18:55:00

标签: r distribution

我正在尝试估算Burr分布的参数。这个程序应该很简单。我导出并编码了对数似然函数,我使用“maxLik”函数进行估计。

从错误消息我明白log(n)可能获得char或NaN值,这就是为什么返回错误,但它并没有真正帮助。我多次检查代码。它应该工作。如果我改变loglik函数(比如,我使用带有一个参数的Laplace分布中的loglik),那么代码就可以了。所以,我认为我定义loglik函数的方式有问题。

以下是我正在使用的代码:

y = c(rep(Mean.Income,Number))
N=length(y)
logLik = function(m,n,k)
{
    ll = N*(log(m)+log(n)+log(k)) - (k+1)*sum(log(1+m*y^n)) + (n-1)*sum(y)
    return (ll)
} 


estimate = maxLik(logLik,start=c(0.1, 0.1, 0.1), print.level=2, method="NR", grad=NULL, hess=NULL)

y - 收入数据。它包括收入和获得这种收入的家庭数量。这可能是大数字的问题吗?我有大约3000个观察值,收入变化5,000-400,000,发生次数(数量变量)从4到8530不等。 此外,我觉得此部分log(1+m*y^n)可能存在问题,因为y是向量而m, n是数字。

当我自己检查功能时,它可以工作。例如:

> logLik(1,5,0.1)
[1] 2560797466

我将非常感谢任何关于我做错事的提示。

1 个答案:

答案 0 :(得分:1)

这样的函数不会为您估计的每个值传递函数参数,而是传递一个包含所有值的向量,您必须选择所需的元素。如果您将命名向量作为起始值传递,则可以更轻松地跟踪估算值。例如

y <- c(rep(rpois(20,500),sample(2:7, 20, replace=T)))
N <- length(y)

logLik = function(x) {
    m <- x["m"]; n <- x["n"]; k <- x["k"]
    ll = N*(log(m)+log(n)+log(k)) - (k+1)*sum(log(1+m*y^n)) + (n-1)*sum(y)
    return (ll)
} 

library(maxLik)
estimate = maxLik(logLik,start=c(m=0.1, n=0.1, k=0.1), print.level=2, 
    method="NR", grad=NULL, hess=NULL)

这至少可以解决您遇到的错误。这是因为参数nk从未设置且缺失