我希望这属于这里,而不是数学论坛.
我试图在R中计算负二项式的密度.我的参数目前是mu(预期的平均失败次数)和过度离散参数的形式k.因为我正在调用已dnbinom编译的C代码,所以我需要将这些参数转换为默认参数化dnbinom,这需要每次试验成功的概率p和n计数停止前的成功次数.我用下面的公式来求解p,并n在以下方面mu和k:
n = mu*p/(1-p)
mu + mu^2/k = n(1-p)/p^2
Run Code Online (Sandbox Code Playgroud)
经过一些代数,我得到了
p = k/mu + 1
n = -(mu^2+k*mu)/k
Run Code Online (Sandbox Code Playgroud)
使用dnbinomR中的不同参数化检查这些方程式会发现一个问题:
> 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 调用时坚持原始参数化(就mu和而言k)dnbinom?
如上所述?dnbinom:大小" 必须严格正面,不必是整数"
在你的例子中
n = -(mu*k+mu^2)/k
n
[1] -202.5
Run Code Online (Sandbox Code Playgroud)
所以dnbinom失败了.
我认为n应该mu*p/(1-p)在计算之后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
Run Code Online (Sandbox Code Playgroud)
什么看起来很好.