Skip to content
Snippets Groups Projects
Commit 2f1615ff authored by Jörg Martin's avatar Jörg Martin
Browse files

t marginal fixed

parent 6b081fcf
Branches
No related tags found
No related merge requests found
...@@ -57,16 +57,33 @@ def normal_parameters(median, upper_quartile): ...@@ -57,16 +57,33 @@ def normal_parameters(median, upper_quartile):
var = (upper_quartile/ppf(0.75))**2 var = (upper_quartile/ppf(0.75))**2
return mu, var return mu, var
def t_parameters(median, upper_quartile, df):
"""
Return the loc and scale of Student's t-distribution with `df` degrees of freedom and the quantiles `median` and `upper_quartile`. The definition of loc and scale follows the convention of `scipy.stats.t.ppf`
:param median: float
:param upper_quartile: float, should be larger than `median`
:param df: degrees of freedom
"""
assert upper_quartile > median
ppf = scipy.stats.t.ppf
loc = median
scale = (upper_quartile - median)/ppf(0.75, df=df)
return loc, scale
def normal_inv_gamma_parameters(mu_median, mu_upper_quartile, var_median, var_upper_quartile): def normal_inv_gamma_parameters(mu_median, mu_upper_quartile, var_median, var_upper_quartile):
""" """
Returns the mean (mu_0), scaling (occasionally called lambda), the shape (alpha) and scale (beta) of a Normal inverse gamma distribution. Returns the mean (mu_0), scaling (occasionally called lambda), the shape (alpha) and scale (beta) of a Normal inverse gamma distribution.
Combination of `parameter_from_quantile.normal_parameters` and `parameter_from_quantile.inv_gamma_parameters`. See their documentation for further information. *It is assumed that the shape parameter alpha is larger than 2, so that the distribution has a variance*. See also `parameter_from_quantile.max_inv_gamma_upper_quartile` Combination of `parameter_from_quantile.normal_parameters` and `parameter_from_quantile.inv_gamma_parameters`. See their documentation for further information. *It is assumed that the shape parameter alpha is larger than 2, so that the distribution has a variance*. See also `parameter_from_quantile.max_inv_gamma_upper_quartile`
""" """
mu_0, mu_var = normal_parameters(mu_median, mu_upper_quartile) # Inverse Gamma marginal
alpha, beta = inv_gamma_parameters(var_median, var_upper_quartile) alpha, beta = inv_gamma_parameters(var_median, var_upper_quartile)
assert alpha > 2.0 assert alpha > 2.0
var_mean = beta/(alpha - 1) # t_{2\alpha} marginal
lamb = mu_var / var_mean loc, scale = t_parameters(mu_median, mu_upper_quartile, df=2*alpha)
mu_0 = loc
lamb = scale**2 * alpha / beta
return mu_0, lamb, alpha, beta return mu_0, lamb, alpha, beta
def max_inv_gamma_upper_quartile(median, a_min=2+1e-5): def max_inv_gamma_upper_quartile(median, a_min=2+1e-5):
...@@ -78,4 +95,4 @@ def max_inv_gamma_upper_quartile(median, a_min=2+1e-5): ...@@ -78,4 +95,4 @@ def max_inv_gamma_upper_quartile(median, a_min=2+1e-5):
""" """
ppf = lambda q: scipy.stats.invgamma.ppf(q, a_min) ppf = lambda q: scipy.stats.invgamma.ppf(q, a_min)
return ppf(0.75)/ppf(0.5) * median return ppf(0.75)/ppf(0.5) * median
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment