#ifndef DMULTI_H_
#define DMULTI_H_
#include <distributions/Distribution.h>
/**
* <pre>
* X[] ~ dmulti(p[], N)
* f(x | p, N) = prod (p^x) ; sum(x) = N
* </pre>
* @short Multinomial distribution
*/
class DMulti : public Distribution {
public:
DMulti();
~DMulti();
double logLikelihood(SArray const &x,
std::vector<SArray const *> const ¶meters) const;
void randomSample(SArray &x,
std::vector<SArray const *> const ¶meters) const;
/**
* Checks that elements of p lie in range (0,1) and
* and sum to 1. Checks that N >= 1
*/
bool checkParameterValue(std::vector<SArray const *> const ¶meters) const;
/**
* Checks that p is a vector and N is a discrete-valued scalar
*/
bool checkParameterDim(std::vector<SArray const *> const ¶meters) const;
Index const &dim(std::vector<SArray const *> const ¶meters) const;
unsigned long df(std::vector<SArray const *> const ¶meters) const;
double lowerSupport(unsigned long i,
std::vector<SArray const *> const ¶meters) const;
double upperSupport(unsigned long i,
std::vector<SArray const *> const ¶meters) const;
};
#endif /* DMULTI_H_ */
syntax highlighted by Code2HTML, v. 0.9.1