/******************************************************************************* * Copyright (c) 2010 Haifeng Li * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package smile.stat.distribution; /** * Probability distribution of univariate random variable. A probability * distribution identifies either the probability of each value * of a random variable (when the variable is discrete), or * the probability of the value falling within a particular interval (when * the variable is continuous). When the random variable takes values in the * set of real numbers, the probability distribution is completely described * by the cumulative distribution function, whose value at each real x is the * probability that the random variable is smaller than or equal to x. * * @see MultivariateDistribution * * @author Haifeng Li */ public interface Distribution { /** * The number of parameters of the distribution. */ public int npara(); /** * The mean of distribution. */ public double mean(); /** * The variance of distribution. */ public double var(); /** * The standard deviation of distribution. */ public double sd(); /** * Shannon entropy of the distribution. */ public double entropy(); /** * Generates a random number following this distribution. */ public double rand(); /** * The probability density function for continuous distribution * or probability mass function for discrete distribution at x. */ public double p(double x); /** * The density at x in log scale, which may prevents the underflow problem. */ public double logp(double x); /** * Cumulative distribution function. That is the probability to the left of x. */ public double cdf(double x); /** * The quantile, the probability to the left of quantile is p. It is * actually the inverse of cdf. */ public double quantile(double p); /** * The likelihood of the sample set following this distribution. */ public double likelihood(double[] x); /** * The log likelihood of the sample set following this distribution. */ public double logLikelihood(double[] x); }