在R语言中,负二项式密度(dnbinom)的参数化

3

我希望这里是合适的地方而不是数学论坛。

我正在尝试在R中计算负二项式分布的密度。我的参数目前采用mu(期望的失败次数)和过度离散参数k的形式。由于我在编译的C代码中调用了dnbinom,因此我需要将这些参数转换为dnbinom的默认参数化形式,该函数期望每个试验成功的概率p和在计数停止之前的成功次数n。 我使用以下方程式来解出pnmuk的关系:

n = mu*p/(1-p)
mu + mu^2/k = n(1-p)/p^2

经过一些代数运算,我得到:

p = k/mu + 1
n = -(mu^2+k*mu)/k

使用R中不同的dnbinom参数化来检查这些方程式会发现一个问题:

> k = 1.2
> mu = 15
> p = k/mu+1
> n = -(mu*k+mu^2)/k
> dnbinom(10,size=n,prob=p)
[1] NaN
Warning message:
In dnbinom(x, size, prob, log) : NaNs produced
> dnbinom(10,mu=mu,size=k)
[1] 0.03560668

我错过了R的参数化吗?我相当确定我的代数是正确的。或者,在从C中调用dnbinom时,是否有一种方法可以坚持使用原始参数化(以muk为单位)?


我不知道你是怎么得出 n = -(mu^2+k*mu)/k 的,因为在这个公式之前你写的 n = mu*p/(1-p) 看起来是正确的。 - daroczig
抱歉。它是p = k/(k+mu)这意味着 n = k,正如应该的那样。 - Sarah
1个回答

6
作为dnbinom函数所述:大小“必须严格为正,不需要是整数”
在你的示例中
 n = -(mu*k+mu^2)/k
 n
 [1] -202.5

所以dnbinom失败了。

我认为在计算p后,n应该是mu*p/(1-p)(如你之前所述),因此可以这样计算:

k = 1.2
mu = 15
p = k/(k+mu)
n = mu*p/(1-p)
dnbinom(10,size=n,prob=p)
    [1] 0.03560668
dnbinom(10,mu=mu,size=k)
    [1] 0.03560668

看起来不错。


很抱歉 - 我试图快速记录我的代数错误和答案,但是我刚刚看到我的答案被删除了...... 因为它不是有效的解决方案(?!)。我没有意识到我需要详细说明。我的错误在于推导pp=k/(k+mu) 而且 n = k。正如你所写的那样,这些数字是一致的。 - Sarah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接