如何在R中的计数数据上拟合负二项式

时间:2016-01-04 13:20:25

标签: r optimization

我想在数据上使用负二项式函数 病原体计数(x),以不同的体积(v)测量 水样。我写了一些代码,但它们无法正常工作。 感谢您的帮助。

x<-c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 3L, 3L, 3L)

v<-c(48, 51, 52, 54.9, 55, 55, 55, 57, 59, 59, 85.2, 100, 100, 100, 
100, 100, 100, 100, 100.4, 100.4, 100.6, 100.7, 101.7, 102, 102, 
102.2, 102.2, 103.3, 185.4, 189.3, 189.3, 190, 191.4, 18.4, 74.1, 
99.9, 100, 100, 100, 100, 100, 101.1, 101.3, 183.5, 193, 95.8, 
223.7, 223.7, 227.1, 89.9, 98.4, 100)

#This is Negative binomial function:  
#PNB(x)= (gamma(x+k)/(gamma(k)*factorial(x)))*
#        ((mu*V/(k+mu*V))^x)*
#        ((k+mu*V)/k)^(-k)

#k and mu are the parameters to be optimized.

data<-data.frame(x,v)

NB<-function(par,data){
A<-gamma(x+par[1])/(gamma(par[1])*factorial(x))
B<-(par[2]*v/(par[1]+par[2]*v))^par[1]
C<-((par[1]+par[2]*v)/par[1])^(-par[1])
return(A*B*C)
}

best<-optim(par=c(1,1),data=data,NB,gr=NULL,method='BFGS',control=list(trace=12,REPORT=1))

它返回以下错误:

Error in optim(par = c(1, 1), data = data, NB, gr = NULL, method = "BFGS",  : 
  objective function in optim evaluates to length 52 not 1

我还使用了 fitdistr ,但它只适用于x而不考虑样本量(v)。

> fitdistr (x,"negative binomial")
     size         mu    
  1.3078442   0.5577050 
 (1.1107484) (0.1236888)

这个mu与v无关,我认为不正确。

0 个答案:

没有答案