Implement transformed_dist
This commit is contained in:
parent
b8250054a2
commit
582cfa5893
@ -243,7 +243,43 @@ class betaoddsrat_gen(stats.rv_continuous):
|
|||||||
# See beta_oddsratio.cdf
|
# See beta_oddsratio.cdf
|
||||||
BETA_ODDSRATIO_CDF_TERMS = [100]
|
BETA_ODDSRATIO_CDF_TERMS = [100]
|
||||||
|
|
||||||
beta_oddsratio = betaoddsrat_gen(name='beta_oddsratio', a=0, shapes='a1,b1,a2,b2') # a = lower bound of support
|
beta_oddsratio = betaoddsrat_gen(name='beta_oddsratio', a=0) # a = lower bound of support
|
||||||
|
|
||||||
|
class transformed_gen(stats.rv_continuous):
|
||||||
|
"""
|
||||||
|
Represents a transformation, Y, of a "base" random variable, X, where f(Y) = X
|
||||||
|
Hence Y.pdf(x) = X.pdf(f(x)) * f'(x)
|
||||||
|
|
||||||
|
e.g. if X is a model parameter, then transformed_dist(X, f=np.exp, fprime=np.exp, finv=np.log) is distribution of the log-parameter
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _pdf(self, x, base, f, fprime, finv):
|
||||||
|
return base.pdf(np.vectorize(f)(x)) * np.vectorize(fprime)(x)
|
||||||
|
|
||||||
|
def _cdf(self, x, base, f, fprime, finv):
|
||||||
|
return base.cdf(np.vectorize(f)(x))
|
||||||
|
|
||||||
|
def _ppf(self, p, base, f, fprime, finv):
|
||||||
|
return np.vectorize(finv)(base.ppf(p))
|
||||||
|
|
||||||
|
# Call implementations directly to bypass SciPy args checking, which chokes on "base" parameter
|
||||||
|
|
||||||
|
def pdf(self, x, base, f, fprime, finv):
|
||||||
|
if np.isscalar(x):
|
||||||
|
return np.atleast_1d(self._pdf(x, base, f, fprime, finv))[0]
|
||||||
|
return self._pdf(x, base, f, fprime, finv)
|
||||||
|
|
||||||
|
def cdf(self, x, base, f, fprime, finv):
|
||||||
|
if np.isscalar(x):
|
||||||
|
return np.atleast_1d(self._cdf(x, base, f, fprime, finv))[0]
|
||||||
|
return self._cdf(x, base, f, fprime, finv)
|
||||||
|
|
||||||
|
def ppf(self, x, base, f, fprime, finv):
|
||||||
|
if np.isscalar(x):
|
||||||
|
return np.atleast_1d(self._ppf(x, base, f, fprime, finv))[0]
|
||||||
|
return self._ppf(x, base, f, fprime, finv)
|
||||||
|
|
||||||
|
transformed_dist = transformed_gen(name='transformed')
|
||||||
|
|
||||||
ConfidenceInterval = collections.namedtuple('ConfidenceInterval', ['lower', 'upper'])
|
ConfidenceInterval = collections.namedtuple('ConfidenceInterval', ['lower', 'upper'])
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user