我想在数据上使用负二项式函数 病原体计数(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无关,我认为不正确。