25package umontreal.ssj.probdist;
27import umontreal.ssj.util.Num;
57 private static double calcR(
double a,
double b,
double x) {
63 double z = (x - a) / b;
65 double s = Math.abs(z);
67 s = Math.sqrt(z * z + 1.0);
84 this(gamma, delta, 0, 1);
93 public JohnsonSUDist(
double gamma,
double delta,
double xi,
double lambda) {
94 super(gamma, delta, xi, lambda);
98 return density(gamma, delta, xi, lambda, x);
101 public double cdf(
double x) {
102 return cdf(gamma, delta, xi, lambda, x);
106 return barF(gamma, delta, xi, lambda, x);
110 return inverseF(gamma, delta, xi, lambda, u);
122 return JohnsonSUDist.getStandardDeviation(gamma, delta, xi, lambda);
128 public static double density(
double gamma,
double delta,
double xi,
double lambda,
double x) {
130 throw new IllegalArgumentException(
"lambda <= 0");
132 throw new IllegalArgumentException(
"delta <= 0");
133 double r = calcR(xi, lambda, x);
136 double z = gamma + delta * Math.log(r);
137 double y = (x - xi) / lambda;
140 return delta / (lambda * Math.sqrt(2.0 * Math.PI) * Math.sqrt(y * y + 1.0)) * Math.exp(-z * z / 2.0);
146 public static double cdf(
double gamma,
double delta,
double xi,
double lambda,
double x) {
148 throw new IllegalArgumentException(
"lambda <= 0");
150 throw new IllegalArgumentException(
"delta <= 0");
151 double r = calcR(xi, lambda, x);
161 public static double barF(
double gamma,
double delta,
double xi,
double lambda,
double x) {
163 throw new IllegalArgumentException(
"lambda <= 0");
165 throw new IllegalArgumentException(
"delta <= 0");
167 double r = calcR(xi, lambda, x);
177 public static double inverseF(
double gamma,
double delta,
double xi,
double lambda,
double u) {
179 throw new IllegalArgumentException(
"lambda <= 0");
181 throw new IllegalArgumentException(
"delta <= 0");
182 if (u > 1.0 || u < 0.0)
183 throw new IllegalArgumentException(
"u not in [0,1]");
186 return Double.POSITIVE_INFINITY;
188 return Double.NEGATIVE_INFINITY;
191 double v = (z - gamma) / delta;
193 return Double.POSITIVE_INFINITY;
195 return Double.NEGATIVE_INFINITY;
197 return xi + lambda * Math.sinh(v);
209 public static double getMean(
double gamma,
double delta,
double xi,
double lambda) {
211 throw new IllegalArgumentException(
"lambda <= 0");
213 throw new IllegalArgumentException(
"delta <= 0");
215 return (xi - (lambda * Math.exp(1.0 / (2.0 * delta * delta)) * Math.sinh(gamma / delta)));
229 public static double getVariance(
double gamma,
double delta,
double xi,
double lambda) {
231 throw new IllegalArgumentException(
"lambda <= 0");
233 throw new IllegalArgumentException(
"delta <= 0");
235 double omega2 = Math.exp(1 / (delta * delta));
236 return ((omega2 - 1) * (omega2 * Math.cosh(2 * gamma / delta) + 1) / 2 * lambda * lambda);
247 return Math.sqrt(
JohnsonSUDist.getVariance(gamma, delta, xi, lambda));
255 public void setParams(
double gamma,
double delta,
double xi,
double lambda) {
double getVariance()
Returns the variance.
void setParams(double gamma, double delta, double xi, double lambda)
Sets the value of the parameters , ,.
double cdf(double x)
Returns the distribution function .
static double getStandardDeviation(double gamma, double delta, double xi, double lambda)
Returns the standard deviation of the Johnson distribution with parameters , , ,.
double density(double x)
Returns , the density evaluated at .
static double getVariance(double gamma, double delta, double xi, double lambda)
Returns the variance.
static double cdf(double gamma, double delta, double xi, double lambda, double x)
Returns the distribution function .
double inverseF(double u)
Returns the inverse distribution function .
double getMean()
Returns the mean.
static double inverseF(double gamma, double delta, double xi, double lambda, double u)
Returns the inverse distribution function .
static double getMean(double gamma, double delta, double xi, double lambda)
Returns the mean.
static double barF(double gamma, double delta, double xi, double lambda, double x)
Returns the complementary distribution function .
double getStandardDeviation()
Returns the standard deviation.
JohnsonSUDist(double gamma, double delta)
Same as JohnsonSUDist(gamma, delta, 0, 1).
static double density(double gamma, double delta, double xi, double lambda, double x)
Returns the density function .
double barF(double x)
Returns the complementary distribution function.
JohnsonSUDist(double gamma, double delta, double xi, double lambda)
Constructs a JohnsonSUDist object with shape parameters.
void setParams0(double gamma, double delta, double xi, double lambda)
Sets the value of the parameters , ,.
JohnsonSystem(double gamma, double delta, double xi, double lambda)
Constructs a JohnsonSystem object with shape parameters.
Extends the class ContinuousDistribution for the normal distribution (e.g., tjoh95a (page 80)).
static double inverseF01(double u)
Same as inverseF(0, 1, u).
static double cdf01(double x)
Same as cdf(0, 1, x).
static double barF01(double x)
Same as barF(0, 1, x).
This class provides various constants and methods to compute numerical quantities such as factorials,...
static final int DBL_MIN_EXP
Smallest int such that is representable (approximately) as a normalised double.
static final int DBL_MAX_EXP
Largest int such that is representable (approximately) as a double.
static final double LN2
The values of .