|
|
|
@ -2188,44 +2188,44 @@ class rv_continuous(rv_generic):
|
|
|
|
|
return inf
|
|
|
|
|
x = arr((x - loc) / scale)
|
|
|
|
|
cond0 = (x <= self.a) | (x >= self.b)
|
|
|
|
|
if (any(cond0)):
|
|
|
|
|
return inf
|
|
|
|
|
Nbad = sum(cond0)
|
|
|
|
|
if Nbad>0:
|
|
|
|
|
x = argsreduce(1 - cond0, *((x,)))[0]
|
|
|
|
|
#return inf
|
|
|
|
|
#else:
|
|
|
|
|
|
|
|
|
|
lowertail = True
|
|
|
|
|
if lowertail:
|
|
|
|
|
prb = numpy.hstack((0.0, self.cdf(x, *args), 1.0))
|
|
|
|
|
dprb = numpy.diff(prb)
|
|
|
|
|
else:
|
|
|
|
|
#linfo = numpy.finfo(float)
|
|
|
|
|
prb = numpy.hstack((1.0, self.sf(x, *args), 0.0))
|
|
|
|
|
dprb = -numpy.diff(prb)
|
|
|
|
|
|
|
|
|
|
logD = log(dprb)
|
|
|
|
|
dx = numpy.diff(x, axis=0)
|
|
|
|
|
tie = (dx == 0)
|
|
|
|
|
if any(tie):
|
|
|
|
|
# TODO : implement this method for treating ties in data:
|
|
|
|
|
# Assume measuring error is delta. Then compute
|
|
|
|
|
# yL = F(xi-delta,theta)
|
|
|
|
|
# yU = F(xi+delta,theta)
|
|
|
|
|
# and replace
|
|
|
|
|
# logDj = log((yU-yL)/(r-1)) for j = i+1,i+2,...i+r-1
|
|
|
|
|
|
|
|
|
|
# The following is OK when only minimization of T is wanted
|
|
|
|
|
i_tie = nonzero(tie)
|
|
|
|
|
tiedata = x[i_tie]
|
|
|
|
|
logD[i_tie + 1] = log(self._pdf(tiedata, *args)) - log(scale)
|
|
|
|
|
|
|
|
|
|
finiteD = numpy.isfinite(logD)
|
|
|
|
|
nonfiniteD = 1 - finiteD
|
|
|
|
|
Nbad += sum(nonfiniteD, axis=0)
|
|
|
|
|
if Nbad>0:
|
|
|
|
|
realmax = floatinfo.machar.xmax
|
|
|
|
|
|
|
|
|
|
lowertail = True
|
|
|
|
|
if lowertail:
|
|
|
|
|
prb = numpy.hstack((0.0, self.cdf(x, *args), 1.0))
|
|
|
|
|
dprb = numpy.diff(prb)
|
|
|
|
|
else:
|
|
|
|
|
prb = numpy.hstack((1.0, self.sf(x, *args), 0.0))
|
|
|
|
|
dprb = -numpy.diff(prb)
|
|
|
|
|
|
|
|
|
|
logD = log(dprb)
|
|
|
|
|
dx = numpy.diff(x, axis=0)
|
|
|
|
|
tie = (dx == 0)
|
|
|
|
|
if any(tie):
|
|
|
|
|
# TODO : implement this method for treating ties in data:
|
|
|
|
|
# Assume measuring error is delta. Then compute
|
|
|
|
|
# yL = F(xi-delta,theta)
|
|
|
|
|
# yU = F(xi+delta,theta)
|
|
|
|
|
# and replace
|
|
|
|
|
# logDj = log((yU-yL)/(r-1)) for j = i+1,i+2,...i+r-1
|
|
|
|
|
|
|
|
|
|
# The following is OK when only minimization of T is wanted
|
|
|
|
|
|
|
|
|
|
i_tie = nonzero(tie)
|
|
|
|
|
tiedata = x[i_tie]
|
|
|
|
|
|
|
|
|
|
logD[i_tie + 1] = log(self._pdf(tiedata, *args)) - log(scale)
|
|
|
|
|
|
|
|
|
|
finiteD = numpy.isfinite(logD)
|
|
|
|
|
nonfiniteD = 1 - finiteD
|
|
|
|
|
if any(nonfiniteD):
|
|
|
|
|
T = -sum(logD[finiteD], axis=0) + 100.0 * log(realmax) * sum(nonfiniteD, axis=0);
|
|
|
|
|
else:
|
|
|
|
|
T = -sum(logD, axis=0) #%Moran's negative log product spacing statistic
|
|
|
|
|
T = -sum(logD[finiteD], axis=0) + 100.0 * log(realmax) * Nbad;
|
|
|
|
|
else:
|
|
|
|
|
T = -sum(logD, axis=0) #%Moran's negative log product spacing statistic
|
|
|
|
|
return T
|
|
|
|
|
|
|
|
|
|
def link(self, x, logSF, theta, i):
|
|
|
|
@ -2236,9 +2236,8 @@ class rv_continuous(rv_generic):
|
|
|
|
|
raise ValueError('Link function not implemented for the %s distribution' % self.name)
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def _nnlf(self, x, *args):
|
|
|
|
|
xmin = floatinfo.machar.xmin
|
|
|
|
|
return -sum(np.maximum(self._logpdf(x, *args),100*log(xmin)),axis=0)
|
|
|
|
|
def _nnlf(self, x, *args):
|
|
|
|
|
return -sum(self._logpdf(x, *args),axis=0)
|
|
|
|
|
|
|
|
|
|
def nnlf(self, theta, x):
|
|
|
|
|
''' Return negative loglikelihood function, i.e., - sum (log pdf(x, theta),axis=0)
|
|
|
|
@ -2254,16 +2253,14 @@ class rv_continuous(rv_generic):
|
|
|
|
|
return inf
|
|
|
|
|
x = arr((x-loc) / scale)
|
|
|
|
|
cond0 = (x <= self.a) | (self.b <= x)
|
|
|
|
|
newCall = True
|
|
|
|
|
if newCall:
|
|
|
|
|
if (any(cond0)):
|
|
|
|
|
# old call: return inf
|
|
|
|
|
goodargs = argsreduce(1 - cond0, *((x,)))
|
|
|
|
|
goodargs = tuple(goodargs + list(args))
|
|
|
|
|
N = len(x)
|
|
|
|
|
Nbad = sum(cond0)
|
|
|
|
|
xmin = floatinfo.machar.xmin
|
|
|
|
|
return self._nnlf(*goodargs) + N * log(scale) + Nbad * 100.0 * log(xmin)
|
|
|
|
|
elif (any(cond0)):
|
|
|
|
|
return inf
|
|
|
|
|
xmax = floatinfo.machar.xmax
|
|
|
|
|
return self._nnlf(*goodargs) + N * (log(scale) + Nbad * 100.0 * log(xmax))
|
|
|
|
|
else:
|
|
|
|
|
N = len(x)
|
|
|
|
|
return self._nnlf(x, *args) + N*log(scale)
|
|
|
|
@ -2399,7 +2396,7 @@ class rv_continuous(rv_generic):
|
|
|
|
|
index = range(Nargs)
|
|
|
|
|
names = ['f%d' % n for n in range(Nargs - 2)] + ['floc', 'fscale']
|
|
|
|
|
x0 = args[:]
|
|
|
|
|
for n, key in zip(index, names):
|
|
|
|
|
for n, key in zip(index[::-1], names[::-1]):
|
|
|
|
|
if kwds.has_key(key):
|
|
|
|
|
fixedn.append(n)
|
|
|
|
|
args[n] = kwds[key]
|
|
|
|
@ -8092,10 +8089,18 @@ def main():
|
|
|
|
|
lp = pht.profile()
|
|
|
|
|
|
|
|
|
|
def test_genpareto():
|
|
|
|
|
genextreme.pdf(np.inf,0)
|
|
|
|
|
|
|
|
|
|
numargs = genpareto.numargs
|
|
|
|
|
[ c ] = [0.9,] * numargs
|
|
|
|
|
rv = genpareto(c)
|
|
|
|
|
R = genpareto.rvs(c, size=100)
|
|
|
|
|
|
|
|
|
|
phat = genpareto.fit2(R, floc=0, fscale=1,method='mps')
|
|
|
|
|
print(phat.par)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
#main()
|
|
|
|
|
test_genpareto()
|
|
|
|
|
#test_truncrayleigh()
|
|
|
|
|
#test_lognorm()
|
|
|
|
|
|
|
|
|
|