home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-29 | 38.9 KB | 1,050 lines |
-
- (*:Version: Mathematica 2.0 *)
-
- (*:Name: Statistics`ContinuousDistributions *)
-
- (*:Title: Continuous Statistical Distributions *)
-
- (*:Author:
- David Withoff (Wolfram Research), February, 1990.
- Modified March, 1991.
- *)
-
- (*:Legal:
- Copyright (c) 1990, 1991, Wolfram Research, Inc.
- *)
-
- (*:Reference: Usage messages only. *)
-
- (*:Summary:
- Properties and functionals of continuous probability distributions
- used in statistical computations.
- *)
-
- (*:Keywords: continuous distribution *)
-
- (*:Requirements: No special system requirements. *)
-
- (*:Warning:
- This package extends the definition of several descriptive statistics
- functions and the definition of Random. If the original usage messages
- are reloaded, this change will not be reflected in the usage message,
- although the extended functionality will remain.
-
- Definitions for ChiSquareDistribution, FRatioDistribution,
- NormalDistribution, and StudentTDistribution are contained
- in the Statistics`NormalDistribution` package.
- *)
-
- (*:Note: Most functions provide numerical results. *)
-
- (*:Sources:
- Norman L. Johnson and Samuel Kotz, Continuous Univariate
- Distributions, 1970
- *)
-
- BeginPackage["Statistics`ContinuousDistributions`",
- "Statistics`NormalDistribution`",
- "Statistics`DescriptiveStatistics`",
- "Statistics`Common`DistributionsCommon`",
- "Statistics`InverseStatisticalFunctions`"]
-
- (* Distributions *)
-
- BetaDistribution::usage =
- "BetaDistribution[alpha, beta] represents the continuous Beta
- distribution with parameters alpha and beta."
-
- CauchyDistribution::usage =
- "CauchyDistribution[a, b] represents the Cauchy distribution with
- parameters a and b."
-
- ChiDistribution::usage =
- "ChiDistribution[n] represents the Chi distribution with n degrees
- of freedom"
-
- ChiSquareDistribution::usage =
- "ChiSquareDistribution[n] represents the Chi-Square distribution
- with n degrees of freedom"
-
- NoncentralChiSquareDistribution::usage =
- "NoncentralChiSquareDistribution[n, lambda] represents the non-central
- Chi-Square distribution with n degrees of freedom and non-centrality
- parameter lambda."
-
- ExponentialDistribution::usage =
- "ExponentialDistribution[lambda] represents the Exponential
- distribution with parameter lambda > 0."
-
- ExtremeValueDistribution::usage =
- "ExtremeValueDistribution[alpha, beta] represents the Extreme-Value
- (Fisher-Tippett) distribution with parameters alpha and beta."
-
- FRatioDistribution::usage =
- "FRatioDistribution[n1, n2] represents the F distribution with n1
- numerator degrees of freedom and n2 denominator degrees of freedom."
-
- NoncentralFRatioDistribution::usage =
- "NoncentralFRatioDistribution[n1, n2, lambda] represents the non-central
- F distribution with n1 numerator degrees of freedom, n2 denominator
- degrees of freedom, and numerator non-centrality parameter lambda."
-
- GammaDistribution::usage =
- "GammaDistribution[alpha, beta] represents the Gamma distribution
- with shape parameter alpha and scale parameter beta."
-
- NormalDistribution::usage =
- "NormalDistribution[mu, sigma] represents the Normal (Gaussian)
- distribution with mean mu and standard deviation sigma."
-
- HalfNormalDistribution::usage =
- "HalfNormalDistribution[theta] represents the Half-Normal distribution
- with variance parameter theta."
-
- LaplaceDistribution::usage =
- "LaplaceDistribution[mu, beta] represents the Laplace (double
- Exponential) distribution with mean mu and variance parameter beta."
-
- LogNormalDistribution::usage =
- "LogNormalDistribution[mu, sigma] represents the Log-Normal distribution
- with mean parameter mu and variance parameter sigma."
-
- LogisticDistribution::usage =
- "LogisticDistribution[mu, beta] represents the Logistic distribution
- with position mu and rate parameter beta."
-
- RayleighDistribution::usage =
- "RayleighDistribution[sigma] represents the Rayleigh distribution
- with parameter sigma."
-
- StudentTDistribution::usage =
- "StudentTDistribution[n] represents Student's T distribution with
- n degrees of freedom."
-
- NoncentralStudentTDistribution::usage =
- "NoncentralStudentTDistribution[n, delta] represents the non-central
- Student's t distribution with n degrees of freedom and non-centrality
- parameter delta."
-
- UniformDistribution::usage =
- "UniformDistribution[min, max] represents the Uniform distribution
- on the interval {min, max}."
-
- WeibullDistribution::usage =
- "WeibullDistribution[alpha, beta] represents the Weibull distribution
- with parameters alpha and beta."
-
- (* Functions *)
-
- (* Introduce usage messages for new functions. *)
-
- Domain::usage =
- "Domain[distribution] gives the domain of the specified distribution."
-
- PDF::usage =
- "PDF[distribution, x] gives the probability density function of
- the specified statistical distribution evaluated at x."
-
- CDF::usage =
- "CDF[distribution, x] gives cumulative distribution function of distribution
- at the point x, defined as the integral of the probability density of the
- the distribution from the lowest value in the domain to x."
-
- CharacteristicFunction::usage =
- "CharacteristicFunction[distribution, t] gives the characteristic
- function of the specified statistical distribution as a function
- of the variable t."
-
- (*
- Extend usage messages for existing functions, if this has
- not already been done.
- *)
-
- If[StringPosition[Mean::usage, "specified statistical distribution"] === {},
-
- Mean::usage = Mean::usage <> " " <>
- "Mean[distribution] gives the mean of the specified statistical distribution.";
-
- Variance::usage = Variance::usage <> " " <>
- "Variance[distribution] gives the variance of the specified
- statistical distribution.";
-
- StandardDeviation::usage = StandardDeviation::usage <> " " <>
- "StandardDeviation[distribution] gives the standard deviation of the
- specified statistical distribution.";
-
- Skewness::usage = Skewness::usage <> " " <>
- "Skewness[distribution] gives the coefficient of skewness of the
- specified statistical distribution.";
-
- Kurtosis::usage = Kurtosis::usage <> " " <>
- "Kurtosis[distribution] gives the coefficient of kurtosis of the
- specified statistical distribution.";
-
- KurtosisExcess::usage = KurtosisExcess::usage <> " " <>
- "KurtosisExcess[distribution] gives the kurtosis excess for the
- specified statistical distribution.";
-
- Quantile::usage =
- "Quantile[distribution, q] gives the q-th quantile of the specified
- statistical distribution."
- ]
-
- (* Extend the usage message of Random, if this has not already been done. *)
-
- If[StringPosition[Random::usage, "specified statistical distribution"] === {},
-
- Random::usage = Random::usage <> " " <>
- "Random[distribution] gives a random number with the specified
- statistical distribution."
- ]
-
- Begin["`Private`"]
-
- (* Continuous Beta (Binomial) Distribution *)
-
- BetaDistribution/: Domain[BetaDistribution[___]] := {0, 1}
-
- BetaDistribution/: PDF[BetaDistribution[alpha_, beta_], x_] :=
- With[{result = x^(alpha-1) (1-x)^(beta-1) / Beta[alpha, beta]},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: CDF[BetaDistribution[alpha_, beta_], x_] :=
- With[{result = BetaRegularized[x, alpha, beta]},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: Mean[BetaDistribution[alpha_, beta_]] :=
- alpha/(alpha+beta)//N
-
- BetaDistribution/: Variance[BetaDistribution[alpha_, beta_]] :=
- With[{result = alpha beta /((alpha+beta)^2 (alpha+beta+1))},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: StandardDeviation[BetaDistribution[alpha_, beta_]] :=
- With[{result =
- Sqrt[alpha] Sqrt[beta] / ((alpha + beta) Sqrt[1 + alpha + beta])},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: Skewness[BetaDistribution[alpha_, beta_]] :=
- With[{result = 2 (beta-alpha) Sqrt[alpha+beta+1] /
- (Sqrt[alpha] Sqrt[beta] (alpha+beta+2))},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: Kurtosis[BetaDistribution[alpha_, beta_]] :=
- With[{result = 3 (alpha+beta+1) (2 (alpha+beta)^2 +
- alpha beta (alpha+beta-6))/
- (alpha beta (alpha+beta+2) (alpha+beta+3))},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: KurtosisExcess[BetaDistribution[alpha_, beta_]] :=
- With[{result = 3 (alpha+beta+1) (2 (alpha+beta)^2 +
- alpha beta (alpha+beta-6))/
- (alpha beta (alpha+beta+2) (alpha+beta+3)) - 3},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/:
- CharacteristicFunction[BetaDistribution[alpha_, beta_], t_] :=
- With[{result = Hypergeometric1F1[alpha, alpha+beta, I t]},
- If[NumberQ[N[result]],N[result],result]]
-
- BetaDistribution/: Quantile[BetaDistribution[alpha_, beta_], q_] :=
- InverseBetaRegularized[0, q, alpha, beta]//N
-
- BetaDistribution/: Random[BetaDistribution[alpha_, beta_]] :=
- InverseBetaRegularized[0, Random[], alpha, beta]//N
-
- (* Cauchy Distribution *)
-
- CauchyDistribution/: Domain[CauchyDistribution[a_:0, b_:1]] =
- {-Infinity, Infinity}
-
- CauchyDistribution/: PDF[CauchyDistribution[a_:0, b_:1], x_] :=
- With[{result = 1/(b Pi (1 + ((x-a)/b)^2))},
- If[NumberQ[N[result]],N[result],result]]
-
- CauchyDistribution/: CDF[CauchyDistribution[a_:0, b_:1], x_] :=
- With[{result = (ArcTan[(x-a)/b]/Pi + 1/2)},
- If[NumberQ[N[result]],N[result],result]]
-
- CauchyDistribution/: Mean[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/: Variance[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/: StandardDeviation[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/: Skewness[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/: Kurtosis[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/: KurtosisExcess[CauchyDistribution[___]] := Indeterminate
-
- CauchyDistribution/:
- CharacteristicFunction[CauchyDistribution[a_:0, b_:1], t_] :=
- With[{result = Exp[I a t - b t Sign[t]]},
- If[NumberQ[N[result]],N[result],result]]
-
- CauchyDistribution/: Quantile[CauchyDistribution[a_:0, b_:1], q_] :=
- With[{result = a + b Tan[Pi (q-1/2)]},
- If[NumberQ[N[result]],N[result],result]]
-
- CauchyDistribution/: Random[CauchyDistribution[a_:0, b_:1]] :=
- With[{result = a + b Tan[Pi (Random[]-1/2)]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* ChiSquareDistribution *)
- (* The chi-square distribution is defined in Statistics`NormalDistribution`. *)
-
- (* Chi Distribution *)
-
- ChiDistribution/: Domain[ChiDistribution[___]] := {0, Infinity}
-
- ChiDistribution/: PDF[ChiDistribution[n_], x_] :=
- With[{result = x^(n-1) Exp[-x^2/2] / (2^(n/2-1) Gamma[n/2])},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: CDF[ChiDistribution[n_], x_] :=
- With[{result = GammaRegularized[n/2, 0, x^2/2]},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: Mean[ChiDistribution[n_]] :=
- With[{result = Sqrt[2] Gamma[(n+1)/2]/Gamma[n/2]},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: Variance[ChiDistribution[n_]] :=
- With[{result = 2 (Gamma[(n+2)/2]/Gamma[n/2] -
- (Gamma[(n+1)/2]/Gamma[n/2])^2)},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: StandardDeviation[ChiDistribution[n_]] :=
- With[{result = Sqrt[2 (Gamma[(n+2)/2]/Gamma[n/2] -
- (Gamma[(n+1)/2]/Gamma[n/2])^2)]},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: Skewness[ChiDistribution[n_]] :=
- With[{result = (2*Gamma[(1 + n)/2]^3 -
- 3*Gamma[n/2]*Gamma[(1 + n)/2]*Gamma[(2 + n)/2] +
- Gamma[n/2]^2*Gamma[(3 + n)/2])/
- (-Gamma[(1 + n)/2]^2 + Gamma[n/2]*Gamma[(2 + n)/2])^(3/2)},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: Kurtosis[ChiDistribution[n_]] :=
- With[{result = (-3*Gamma[(1 + n)/2]^4 +
- 6*Gamma[n/2]*Gamma[(1 + n)/2]^2*Gamma[(2 + n)/2] -
- 4*Gamma[n/2]^2*Gamma[(1 + n)/2]*Gamma[(3 + n)/2] +
- Gamma[n/2]^3*Gamma[(4 + n)/2])/
- (Gamma[(1 + n)/2]^2 - Gamma[n/2]*Gamma[(2 + n)/2])^2},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: KurtosisExcess[ChiDistribution[n_]] :=
- With[{result = Kurtosis[ChiDistribution[n]] - 3},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: CharacteristicFunction[ChiDistribution[n_], t_] :=
- NotImplemented /; False
-
- ChiDistribution/: Quantile[ChiDistribution[n_], q_] :=
- With[{result = Sqrt[2] Sqrt[InverseGammaRegularized[n/2, 0, q]]},
- If[NumberQ[N[result]],N[result],result]]
-
- ChiDistribution/: Random[ChiDistribution[n_]] :=
- With[{result = Sqrt[2] Sqrt[InverseGammaRegularized[n/2, 0, Random[]]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Non-central Chi-Square Distribution *)
-
- NoncentralChiSquareDistribution/:
- Domain[NoncentralChiSquareDistribution[___]] := {0, Infinity}
-
- NoncentralChiSquareDistribution/:
- PDF[NoncentralChiSquareDistribution[n_, lambda_], x_] :=
- With[{result = Exp[-(x+lambda)/2] x^(n/2-1) /(2^(n/2)) *
- Hypergeometric0F1Regularized[n/2, (lambda x)/4]},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralChiSquareDistribution/:
- CDF[NoncentralChiSquareDistribution[n_, lambda_], x_] :=
- Module[
- {t, density},
- density = PDF[NoncentralChiSquareDistribution[n, lambda], t];
- If[NumberQ[n] && NumberQ[lambda] && NumberQ[x],
- Re[NIntegrate[density, {t, 0, x}]],
- Integrate[density, {t, 0, x}]
- ]
- ]
-
- NoncentralChiSquareDistribution/:
- Mean[NoncentralChiSquareDistribution[n_, lambda_]] := n + lambda
-
- NoncentralChiSquareDistribution/:
- Variance[NoncentralChiSquareDistribution[n_, lambda_]] :=
- 2 n + 4 lambda
-
- NoncentralChiSquareDistribution/:
- StandardDeviation[NoncentralChiSquareDistribution[n_, lambda_]] :=
- With[{result = Sqrt[2 n + 4 lambda]},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralChiSquareDistribution/:
- Skewness[NoncentralChiSquareDistribution[n_, lambda_]] :=
- With[{result = Sqrt[8] (n + 3 lambda)/(n + 2 lambda)^(3/2)},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralChiSquareDistribution/:
- Kurtosis[NoncentralChiSquareDistribution[n_, lambda_]] :=
- With[{result = 3 + 12 (n + 4 lambda)/(n + 2 lambda)^2},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralChiSquareDistribution/:
- KurtosisExcess[NoncentralChiSquareDistribution[n_, lambda_]] :=
- With[{result = 12 (n + 4 lambda)/(n + 2 lambda)^2},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralChiSquareDistribution/: CharacteristicFunction[
- NoncentralChiSquareDistribution[n_, lambda_], t_] :=
- NotImplemented /; False
-
- NoncentralChiSquareDistribution/:
- Quantile[NoncentralChiSquareDistribution[n_, lambda_], q_] :=
- NotImplemented /; False
-
- NoncentralChiSquareDistribution/:
- Random[NoncentralChiSquareDistribution[n_, lambda_]] :=
- With[{result = Quantile[NoncentralChiSquareDistribution[n,lambda],
- Random[]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Exponential Distribution *)
-
- ExponentialDistribution/: Domain[ExponentialDistribution[___]] :=
- {0, Infinity}
-
- ExponentialDistribution/: PDF[ExponentialDistribution[lambda_:1], x_] :=
- With[{result = lambda Exp[-lambda x]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExponentialDistribution/: CDF[ExponentialDistribution[lambda_:1], x_] :=
- With[{result = 1 - Exp[-lambda x]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExponentialDistribution/: Mean[ExponentialDistribution[lambda_:1]] :=
- 1/lambda
-
- ExponentialDistribution/: Variance[ExponentialDistribution[lambda_:1]] :=
- 1/lambda^2
-
- ExponentialDistribution/: StandardDeviation[
- ExponentialDistribution[lambda_:1]] := 1/lambda
-
- ExponentialDistribution/: Skewness[ExponentialDistribution[___]] = 2
-
- ExponentialDistribution/: Kurtosis[ExponentialDistribution[___]] = 9
-
- ExponentialDistribution/: KurtosisExcess[ExponentialDistribution[___]] = 6
-
- ExponentialDistribution/: CharacteristicFunction[
- ExponentialDistribution[lambda_:1], t_] :=
- With[{result = lambda/(lambda - I t)},
- If[NumberQ[N[result]],N[result],result]]
-
- ExponentialDistribution/: Quantile[ExponentialDistribution[lambda_:1], q_] :=
- With[{result = -Log[1 - q] / lambda},
- If[NumberQ[N[result]],N[result],result]]
-
- ExponentialDistribution/: Random[ExponentialDistribution[lambda_:1]] :=
- - Log[Random[]]/lambda//N
-
- (* ExtremeValue (FisherTippett) Distribution *)
-
- ExtremeValueDistribution/: Domain[ExtremeValueDistribution[___]] =
- {-Infinity, Infinity}
-
- ExtremeValueDistribution/: PDF[
- ExtremeValueDistribution[alpha_, beta_], x_] :=
- With[{result=Exp[-Exp[(alpha - x)/beta] + (alpha - x)/beta]/beta},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/:
- CDF[ExtremeValueDistribution[alpha_, beta_], x_] :=
- With[{result = Exp[-Exp[-(x-alpha)/beta]]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: Mean[ExtremeValueDistribution[alpha_, beta_]] :=
- With[{result = alpha + EulerGamma beta},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: Variance[
- ExtremeValueDistribution[alpha_, beta_]] :=
- With[{result = Pi^2 beta^2 /6},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: StandardDeviation[
- ExtremeValueDistribution[alpha_, beta_]] :=
- With[{result = Pi beta /Sqrt[6]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: Skewness[ExtremeValueDistribution[___]] :=
- NotImplemented /; False
-
- ExtremeValueDistribution/: Kurtosis[ExtremeValueDistribution[___]] = 27/5
-
- ExtremeValueDistribution/: KurtosisExcess[ExtremeValueDistribution[___]] =
- 12/5
-
- ExtremeValueDistribution/: CharacteristicFunction[
- ExtremeValueDistribution[alpha_, beta_], t_] :=
- With[{result = Exp[alpha I t] Gamma[1 - beta I t]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: Quantile[
- ExtremeValueDistribution[alpha_, beta_], q_] :=
- With[{result = alpha - beta Log[Log[1/q]]},
- If[NumberQ[N[result]],N[result],result]]
-
- ExtremeValueDistribution/: Random[ExtremeValueDistribution[alpha_, beta_]] :=
- N[alpha - beta Log[Log[1/Random[]]]]
-
- (* FRatioDistribution *)
- (* F-distribution is defined in Statistics`NormalDistribution` *)
-
- (* Noncentral F-Distribution *)
-
- NoncentralFRatioDistribution/:
- Domain[NoncentralFRatioDistribution[___]] := {0, Infinity}
-
- NoncentralFRatioDistribution/:
- PDF[NoncentralFRatioDistribution[n1_, n2_, lambda_], x_] :=
- With[{result = Exp[-lambda/2] Sqrt[x]^(n1-2) n1^(n1/2) n2^(n2/2) /
- ((n2 + x n1)^((n1+n2)/2) Beta[n1/2, n2/2]) *
- Hypergeometric1F1[(n1+n2)/2, n1/2,
- lambda n1 x/(2 (n2 + n1 x))]},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralFRatioDistribution/:
- CDF[NoncentralFRatioDistribution[n1_, n2_, lambda_], x_] :=
- Module[
- {t, density},
- density = PDF[NoncentralFRatioDistribution[n1,n2,lambda], t];
- If[NumberQ[n1] && NumberQ[n2] && NumberQ[lambda] && NumberQ[x],
- Re[NIntegrate[density, {t, 0, x}]],
- (* else *)
- Integrate[density, {t, 0, x}]
- ]
- ]
-
- NoncentralFRatioDistribution/:
- Mean[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- Variance[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- StandardDeviation[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- Skewness[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- Kurtosis[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- KurtosisExcess[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/: CharacteristicFunction[
- NoncentralFRatioDistribution[n1_, n2_, lambda_], t_] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- Quantile[NoncentralFRatioDistribution[n1_, n2_, lambda_], q_] :=
- NotImplemented /; False
-
- NoncentralFRatioDistribution/:
- Random[NoncentralFRatioDistribution[n1_, n2_, lambda_]] :=
- With[{result = Quantile[NoncentralFRatioDistribution[n1,n2,lambda],
- Random[]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Gamma Distribution *)
-
- GammaDistribution/: Domain[GammaDistribution[___]] := {0, Infinity}
-
- GammaDistribution/: PDF[GammaDistribution[alpha_, beta_], x_] :=
- With[{result = x^(alpha-1) Exp[-x/beta] / (beta^alpha Gamma[alpha])},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: CDF[GammaDistribution[alpha_, beta_], x_] :=
- With[{result= GammaRegularized[alpha, 0, x/beta]},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: Mean[GammaDistribution[alpha_, beta_]] := alpha beta
-
- GammaDistribution/: Variance[GammaDistribution[alpha_, beta_]] := alpha beta^2
-
- GammaDistribution/: StandardDeviation[GammaDistribution[alpha_, beta_]] :=
- With[{result = beta Sqrt[alpha]},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: Skewness[GammaDistribution[alpha_, beta_]] :=
- With[{result = 2/Sqrt[alpha]},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: Kurtosis[GammaDistribution[alpha_, beta_]] :=
- With[{result = 6/alpha + 3},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: KurtosisExcess[
- GammaDistribution[alpha_, beta_]] :=
- With[{result = 6/alpha},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: CharacteristicFunction[
- GammaDistribution[alpha_, beta_], t_] :=
- With[{result = (1 - I beta t)^(-alpha)},
- If[NumberQ[N[result]],N[result],result]]
-
- GammaDistribution/: Quantile[GammaDistribution[alpha_, beta_], q_] :=
- beta InverseGammaRegularized[alpha, 0, q]//N
-
- GammaDistribution/: Random[GammaDistribution[alpha_, beta_]] :=
- beta InverseGammaRegularized[alpha, 0, Random[]]//N
-
- (* Half-Normal Distribution *)
-
- HalfNormalDistribution/: Domain[HalfNormalDistribution[___]] = {0, Infinity}
-
- HalfNormalDistribution/: PDF[HalfNormalDistribution[theta_], x_] :=
- With[{result = 2 theta Exp[- theta^2 x^2 / Pi] / Pi},
- If[NumberQ[N[result]],N[result],result]]
-
- HalfNormalDistribution/: CDF[HalfNormalDistribution[theta_], x_] :=
- With[{result = Erf[theta x / Sqrt[Pi]]},
- If[NumberQ[N[result]],N[result],result]]
-
- HalfNormalDistribution/: Mean[HalfNormalDistribution[theta_]] := 1/theta
-
- HalfNormalDistribution/: Variance[
- HalfNormalDistribution[theta_]] :=
- With[{result = (Pi-2) / (2 theta^2)},
- If[NumberQ[N[result]],N[result],result]]
-
- HalfNormalDistribution/: StandardDeviation[
- HalfNormalDistribution[theta_]] :=
- With[{result = Sqrt[Pi/2-1]/theta},
- If[NumberQ[N[result]],N[result],result]]
-
- HalfNormalDistribution/: Skewness[HalfNormalDistribution[___]] :=
- Sqrt[2] (4 - Pi) / Sqrt[Pi - 2]^3//N
-
- HalfNormalDistribution/: Kurtosis[HalfNormalDistribution[___]] :=
- (3 Pi^2 - 4 Pi - 12) / (Pi - 2)^2//N
-
- HalfNormalDistribution/: KurtosisExcess[HalfNormalDistribution[___]] :=
- (8 Pi - 24)/(Pi - 2)^2//N
-
- HalfNormalDistribution/: CharacteristicFunction[
- HalfNormalDistribution[theta_], t_] :=
- NotImplemented /; False
-
- HalfNormalDistribution/: Quantile[HalfNormalDistribution[theta_], q_] :=
- With[{result = Sqrt[Pi] InverseErf[q] / theta},
- If[NumberQ[N[result]],N[result],result]]
-
- HalfNormalDistribution/: Random[HalfNormalDistribution[theta_]] :=
- With[{result = Sqrt[Pi] InverseErf[Random[]] / theta},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Laplace (Double Exponential) Distribution *)
-
- LaplaceDistribution/: Domain[LaplaceDistribution[___]] :=
- {-Infinity, Infinity}
-
- LaplaceDistribution/: PDF[LaplaceDistribution[mu_, beta_], x_] :=
- With[{result = Exp[-Sign[x-mu] (x-mu)/beta] / (2 beta)},
- If[NumberQ[N[result]],N[result],result]]
-
- LaplaceDistribution/: CDF[LaplaceDistribution[mu_, beta_], x_] :=
- With[{result=(1 + Sign[x-mu] (1 - Exp[-Sign[x-mu] (x-mu)/beta])) / 2},
- If[NumberQ[N[result]],N[result],result]]
-
- LaplaceDistribution/: Mean[LaplaceDistribution[mu_, ___]] := mu
-
- LaplaceDistribution/: Variance[LaplaceDistribution[_, beta_]] := 2 beta^2
-
- LaplaceDistribution/: StandardDeviation[LaplaceDistribution[_, beta_]] :=
- With[{result = Sqrt[2] beta},
- If[NumberQ[N[result]],N[result],result]]
-
- LaplaceDistribution/: Skewness[LaplaceDistribution[___]] := 0
-
- LaplaceDistribution/: Kurtosis[LaplaceDistribution[___]] := 6
-
- LaplaceDistribution/: KurtosisExcess[LaplaceDistribution[___]] := 3
-
- LaplaceDistribution/: CharacteristicFunction[
- LaplaceDistribution[mu_, beta_], t_] :=
- With[{result = Exp[I mu t]/(1 + beta^2 t^2)},
- If[NumberQ[N[result]],N[result],result]]
-
- LaplaceDistribution/: Quantile[LaplaceDistribution[mu_, beta_], q_] :=
- With[{result = mu -
- beta Sign[2 q - 1] Log[1 - Sign[2 q - 1] (2 q - 1)]},
- If[NumberQ[N[result]],N[result],result]]
-
- LaplaceDistribution/: Random[LaplaceDistribution[mu_, beta_]] :=
- With[{result = Quantile[LaplaceDistribution[mu, beta], Random[]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Log-Normal Distribution *)
-
- LogNormalDistribution/: Domain[LogNormalDistribution[___]] = {0, Infinity}
-
- LogNormalDistribution/: PDF[LogNormalDistribution[mu_, sigma_], x_] :=
- With[{result=Exp[-(Log[x] - mu)^2 / (2 sigma^2)] / (Sqrt[2 Pi] sigma x)},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: CDF[LogNormalDistribution[mu_, sigma_], x_] :=
- With[{result = (Erf[(-mu + Log[x]) / (Sqrt[2] sigma)] + 1)/2},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: Mean[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Exp[mu + sigma^2/2]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: Variance[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Exp[2 mu + sigma^2] (Exp[sigma^2] - 1)},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: StandardDeviation[
- LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Sqrt[Exp[2 mu + sigma^2] (Exp[sigma^2] - 1)]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: Skewness[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = (Exp[sigma^2] + 2) Sqrt[Exp[sigma^2] - 1]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: Kurtosis[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Exp[4 sigma^2] + 2 Exp[3 sigma^2] + 3 Exp[2 sigma^2]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: KurtosisExcess[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Exp[4 sigma^2] + 2 Exp[3 sigma^2] + 3 Exp[2 sigma^2] - 3},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: CharacteristicFunction[
- LogNormalDistribution[mu_, sigma_], t_] :=
- NotImplemented /; False
-
- LogNormalDistribution/: Quantile[LogNormalDistribution[mu_, sigma_], q_] :=
- With[{result = Exp[InverseErf[2 q - 1] Sqrt[2] sigma + mu]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogNormalDistribution/: Random[LogNormalDistribution[mu_, sigma_]] :=
- With[{result = Exp[InverseErf[2 Random[] - 1] Sqrt[2] sigma + mu]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Logistic Distribution *)
-
- LogisticDistribution/: Domain[LogisticDistribution[___]] =
- {-Infinity, Infinity}
-
- LogisticDistribution/: PDF[LogisticDistribution[mu_:0, beta_:1], x_] :=
- With[{result = Exp[(x-mu)/beta]/(beta Sign[beta]
- (1 + Exp[(x-mu)/beta])^2)},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: CDF[LogisticDistribution[mu_:0, beta_:1], x_] :=
- With[{result = 1/(1 + Exp[(mu - x)/beta Sign[beta]])},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: Mean[LogisticDistribution[mu_:0, ___]] := mu
-
- LogisticDistribution/: Variance[LogisticDistribution[_, beta_:1]] :=
- With[{result = Pi^2 beta^2 / 3},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: StandardDeviation[LogisticDistribution[_, beta_:1]] :=
- With[{result = Pi beta / Sqrt[3]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: Skewness[LogisticDistribution[___]] := 0
-
- LogisticDistribution/: Kurtosis[LogisticDistribution[___]] := 21/5
-
- LogisticDistribution/: KurtosisExcess[LogisticDistribution[___]] := 6/5
-
- LogisticDistribution/: CharacteristicFunction[
- LogisticDistribution[mu_:0, beta_:1], t_] :=
- With[{result = I Exp[I mu t] Pi beta t / Sin[I Pi beta t]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: Quantile[LogisticDistribution[mu_:0, beta_:1], q_] :=
- With[{result = mu - beta Sign[beta] Log[1-q] + beta Sign[beta] Log[q]},
- If[NumberQ[N[result]],N[result],result]]
-
- LogisticDistribution/: Random[LogisticDistribution[mu_:0, beta_:1]] :=
- With[{result = Quantile[LogisticDistribution[mu, beta], Random[]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* NormalDistribution *)
- (* The normal distribution is defined in Statistics`NormalDistribution` *)
-
- (* Rayleigh Distribution *)
-
- RayleighDistribution/: Domain[RayleighDistribution[___]] :=
- {0, Infinity}
-
- RayleighDistribution/: PDF[RayleighDistribution[sigma_:1], x_] :=
- With[{result = x Exp[-x^2/(2 sigma^2)]/sigma^2},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: CDF[RayleighDistribution[sigma_:1], x_] :=
- With[{result = 1 - Exp[- x^2 / (2 sigma^2)]},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: Mean[RayleighDistribution[sigma_:1]] :=
- With[{result = sigma Sqrt[Pi/2]},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: Variance[RayleighDistribution[sigma_:1]] :=
- With[{result = sigma^2 (2 - Pi/2)},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: StandardDeviation[RayleighDistribution[sigma_:1]] :=
- With[{result = sigma Sqrt[2 - Pi/2]},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: Skewness[RayleighDistribution[___]] :=
- (Pi - 3) Sqrt[Pi/2] / (2 - Pi/2)^(3/2)//N
-
- RayleighDistribution/: Kurtosis[RayleighDistribution[___]] :=
- (32 - 3 Pi^2)/(4 - Pi)^2//N
-
- RayleighDistribution/: KurtosisExcess[RayleighDistribution[___]] =
- (32 - 3 Pi^2)/(4 - Pi)^2 - 3//N
-
- RayleighDistribution/: CharacteristicFunction[
- RayleighDistribution[sigma_:1], t_] :=
- With[{result = 1 + I t sigma Sqrt[Pi/2] Exp[-t^2 sigma^2/2] *
- Erf[-I t sigma/Sqrt[2],Infinity]},
- If[NumberQ[N[result]],N[result],result]]
-
-
- RayleighDistribution/: Quantile[RayleighDistribution[sigma_:1], q_] :=
- With[{result = sigma Sqrt[Log[1/(1-q)^2]]},
- If[NumberQ[N[result]],N[result],result]]
-
- RayleighDistribution/: Random[RayleighDistribution[sigma_:1]] :=
- With[{result = sigma Sqrt[Log[1/Random[]^2]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* StudentTDistribution *)
- (* Student's t-distribution is defined in Statistics`NormalDistribution`. *)
-
- (* Noncentral Student's t Distribution *)
-
- NoncentralStudentTDistribution/:
- Domain[NoncentralStudentTDistribution[___]] := {-Infinity, Infinity}
-
- NoncentralStudentTDistribution/:
- PDF[NoncentralStudentTDistribution[n_, delta_], x_] :=
- With[{result =
- Module[{com1, com2},
- com1 = n + x^2;
- com2 = delta^2 x^2 / (2 com1);
- n! n^(n/2) / (2^n Gamma[n/2] Exp[delta^2/2]) (
- Sqrt[2] delta x com1^(-1 - n/2) / Gamma[(1 + n)/2] *
- Hypergeometric1F1[1 + n/2, 3/2, com2] +
- (n + x^2)^(-1/2 - n/2) / Gamma[1 + n/2] *
- Hypergeometric1F1[(1 + n)/2, 1/2, com2]
- )
- ]},
- If[NumberQ[N[result]],N[result],result]]
-
- NoncentralStudentTDistribution/:
- CDF[NoncentralStudentTDistribution[n_, delta_], x_] :=
- Module[
- {t, density},
- density = PDF[NoncentralStudentTDistribution[n, delta], t];
- If[NumberQ[n] && NumberQ[delta] && NumberQ[x],
- Re[NIntegrate[density, {t, -Infinity, x}]],
- Integrate[density, {t, 0, x}]
- ]
- ]
-
- NoncentralStudentTDistribution/:
- Mean[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- Variance[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- StandardDeviation[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- Skewness[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- Kurtosis[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- KurtosisExcess[NoncentralStudentTDistribution[n_, delta_]] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/: CharacteristicFunction[
- NoncentralStudentTDistribution[n_, delta_], t_] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- Quantile[NoncentralStudentTDistribution[n_, delta_], q_] :=
- NotImplemented /; False
-
- NoncentralStudentTDistribution/:
- Random[NoncentralStudentTDistribution[n_, delta_]] :=
- With[{result = Quantile[NoncentralStudentTDistribution[n,delta],
- Random[]]},
- If[NumberQ[N[result]],N[result],result]]
-
- (* Uniform Distribution *)
-
- UniformDistribution/: Domain[UniformDistribution[min_:0, max_:1]] :=
- {min, max}
-
- UniformDistribution/: PDF[UniformDistribution[min_:0, max_:1], x_] :=
- With[{result = (Sign[x-min] - Sign[x-max])/(2 (max - min))},
- If[NumberQ[N[result]],N[result],result]]
-
- UniformDistribution/: CDF[UniformDistribution[min_:0, max_:1], x_] :=
- With[{result =
- (1+Sign[x-min] (x-min)/(max-min)-(max-x) Sign[max-x]/(max-min))/2},
- If[NumberQ[N[result]],N[result],result]]
-
- UniformDistribution/: Mean[UniformDistribution[min_:0, max_:1]] := (max+min)/2
-
- UniformDistribution/: Variance[UniformDistribution[min_:0, max_:1]] :=
- (max-min)^2 / 12
-
- UniformDistribution/: StandardDeviation[UniformDistribution[min_:0, max_:1]] :=
- With[{result = (max-min)/Sqrt[12]},
- If[NumberQ[N[result]],N[result],result]]
-
- UniformDistribution/: Skewness[UniformDistribution[___]] = 0
-
- UniformDistribution/: Kurtosis[UniformDistribution[___]] = 9/5
-
- UniformDistribution/: KurtosisExcess[UniformDistribution[___]] = -6/5
-
- UniformDistribution/: CharacteristicFunction[
- UniformDistribution[min_:0, max_:1], t_] :=
- With[{result = (Exp[I max t] - Exp[I min t])/((max - min) I t)},
- If[NumberQ[N[result]],N[result],result]]
-
- UniformDistribution/: Quantile[UniformDistribution[min_:0, max_:1], q_] :=
- With[{result = q Max[min, max] + (1-q) Min[min, max]},
- If[NumberQ[N[result]],N[result],result]]
-
- UniformDistribution/: Random[UniformDistribution[min_:0, max_:1]] :=
- If[NumberQ[N[min]] && NumberQ[N[max]],
- Random[Real, {N[min], N[max]}],
- Quantile[UniformDistribution[min,max],Random[]] ]
-
- (* Weibull Distribution *)
-
- WeibullDistribution/: Domain[WeibullDistribution[___]] = {0, Infinity}
-
- WeibullDistribution/: PDF[WeibullDistribution[alpha_, beta_], x_] :=
- With[{result = alpha x^(alpha-1) Exp[-(x/beta)^alpha] / beta^alpha
- }, If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: CDF[WeibullDistribution[alpha_, beta_], x_] :=
- With[{result = 1 - Exp[-(x/beta)^alpha]},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: Mean[WeibullDistribution[alpha_, beta_]] :=
- With[{result = beta Gamma[1+1/alpha]},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: Variance[WeibullDistribution[alpha_, beta_]] :=
- With[{result = beta^2 (Gamma[1+2/alpha] - Gamma[1+1/alpha]^2)},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: StandardDeviation[
- WeibullDistribution[alpha_, beta_]] :=
- With[{result = beta Sqrt[Gamma[1+2/alpha] - Gamma[1+1/alpha]^2]},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: Skewness[WeibullDistribution[alpha_, beta_]] :=
- With[{result =
- (Gamma[1+3/alpha] - 3 Gamma[1+1/alpha] Gamma[1+2/alpha] +
- 2 Gamma[1+1/alpha]^3 ) /
- (Gamma[1+2/alpha] - Gamma[1+1/alpha]^2)^(3/2)},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: Kurtosis[WeibullDistribution[alpha_, beta_]] :=
- With[{result =
- (Gamma[1+4/alpha] - 4 Gamma[1+1/alpha] Gamma[1+3/alpha] +
- 6 Gamma[1+1/alpha]^2 Gamma[1+2/alpha] -
- 3 Gamma[1+1/alpha]^4) /
- (Gamma[1+2/alpha] - Gamma[1+1/alpha]^2)^2},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: KurtosisExcess[WeibullDistribution[alpha_, beta_]] :=
- With[{result =
- (Gamma[1+4/alpha] - 4 Gamma[1+1/alpha] Gamma[1+3/alpha] +
- 6 Gamma[1+1/alpha]^2 Gamma[1+2/alpha] -
- 3 Gamma[1+1/alpha]^4) /
- (Gamma[1+2/alpha] - Gamma[1+1/alpha]^2)^2 - 3},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: CharacteristicFunction[
- WeibullDistribution[alpha_, beta_], t_] :=
- NotImplemented /; False
-
- WeibullDistribution/: Quantile[WeibullDistribution[alpha_, beta_], q_] :=
- With[{result = beta (-Log[1 - q])^(1/alpha)},
- If[NumberQ[N[result]],N[result],result]]
-
- WeibullDistribution/: Random[WeibullDistribution[alpha_, beta_]] :=
- With[{result = beta Log[1/Random[]]^(1/alpha)},
- If[NumberQ[N[result]],N[result],result]]
-
- End[]
-
- SetAttributes[ BetaDistribution,ReadProtected];
- SetAttributes[CauchyDistribution ,ReadProtected];
- SetAttributes[ChiDistribution ,ReadProtected];
- SetAttributes[ NoncentralChiSquareDistribution,ReadProtected];
- SetAttributes[ ExponentialDistribution,ReadProtected];
- SetAttributes[ ExtremeValueDistribution,ReadProtected];
- SetAttributes[NoncentralFRatioDistribution ,ReadProtected];
- SetAttributes[ GammaDistribution,ReadProtected];
- SetAttributes[HalfNormalDistribution ,ReadProtected];
- SetAttributes[LaplaceDistribution ,ReadProtected];
- SetAttributes[LogNormalDistribution ,ReadProtected];
- SetAttributes[LogisticDistribution ,ReadProtected];
- SetAttributes[RayleighDistribution ,ReadProtected];
- SetAttributes[NoncentralStudentTDistribution ,ReadProtected];
- SetAttributes[UniformDistribution ,ReadProtected];
- SetAttributes[WeibullDistribution ,ReadProtected];
-
-
- Protect[BetaDistribution,CauchyDistribution,ChiDistribution,
- NoncentralChiSquareDistribution,ExponentialDistribution,
- ExtremeValueDistribution,NoncentralFRatioDistribution,
- GammaDistribution,HalfNormalDistribution, LaplaceDistribution,
- LogNormalDistribution,LogisticDistribution,
- RayleighDistribution,NoncentralStudentTDistribution,
- UniformDistribution, WeibullDistribution];
-
- EndPackage[]
-