def max_likelihood(self,data,weights=None,stats=None):
if stats is not None:
n, tot = stats
elif weights is None:
n, tot = super(NegativeBinomialIntegerR,self)._get_statistics(data)
else:
n, tot = super(NegativeBinomialIntegerR,self)._get_weighted_statistics(data,weights)
if n > 1:
rs = self.r_support
ps = self._max_likelihood_ps(n,tot,rs)
# TODO TODO this isn't right for weighted data: do weighted sums
if isinstance(data,np.ndarray):
likelihoods = np.array([self.log_likelihood(data,r=r,p=p).sum()
for r,p in zip(rs,ps)])
else:
likelihoods = np.array([sum(self.log_likelihood(d,r=r,p=p).sum()
for d in data) for r,p in zip(rs,ps)])
argmax = likelihoods.argmax()
self.r = self.r_support[argmax]
self.p = ps[argmax]
return self
评论列表
文章目录