|
|
@ -342,19 +342,19 @@ def _penalized_nnlf(self, theta, x):
|
|
|
|
if not self._argcheck(*args) or scale <= 0:
|
|
|
|
if not self._argcheck(*args) or scale <= 0:
|
|
|
|
return inf
|
|
|
|
return inf
|
|
|
|
x = asarray((x-loc) / scale)
|
|
|
|
x = asarray((x-loc) / scale)
|
|
|
|
|
|
|
|
N = len(x)
|
|
|
|
loginf = log(_XMAX)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if np.isneginf(self.a).all() and np.isinf(self.b).all():
|
|
|
|
|
|
|
|
Nbad = 0
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
cond0 = (x < self.a) | (self.b < x)
|
|
|
|
cond0 = (x < self.a) | (self.b < x)
|
|
|
|
Nbad = sum(cond0)
|
|
|
|
Nbad = sum(cond0)
|
|
|
|
if Nbad > 0:
|
|
|
|
if Nbad > 0:
|
|
|
|
x = argsreduce(~cond0, x)[0]
|
|
|
|
x = argsreduce(~cond0, x)[0]
|
|
|
|
|
|
|
|
logpdf = self._logpdf(x, *args)
|
|
|
|
N = len(x)
|
|
|
|
finite_logpdf = np.isfinite(logpdf)
|
|
|
|
return self._nnlf(x, *args) + N*log(scale) + Nbad * 100.0 * loginf
|
|
|
|
Nbad += np.sum(~finite_logpdf, axis=0)
|
|
|
|
|
|
|
|
logscale = N * log(scale)
|
|
|
|
|
|
|
|
if Nbad > 0:
|
|
|
|
|
|
|
|
penalty = Nbad * log(_XMAX) * 100
|
|
|
|
|
|
|
|
return -np.sum(logpdf[finite_logpdf], axis=0) + penalty + logscale
|
|
|
|
|
|
|
|
return -np.sum(logpdf, axis=0) + logscale
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _reduce_func(self, args, options):
|
|
|
|
def _reduce_func(self, args, options):
|
|
|
|