Re: User-defined Probability Mass Function
- To: mathgroup at smc.vnet.net
- Subject: [mg131447] Re: User-defined Probability Mass Function
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Sun, 7 Jul 2013 23:22:07 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
Clear[pointDistribution];
pointDistribution /: PDF[
pointDistribution[spt_, prob_], x_] :=
Piecewise[{#[[1]], Equal[x, #[[2]]]} & /@
Thread[{prob, spt}]];
pointDistribution /: CDF[
pointDistribution[spt_, prob_], x_] :=
Module[{s, p},
{s, p} = Thread[SortBy[
Thread[{spt, prob}], N[#[[1]]] &]];
Piecewise[Reverse[
{#[[1]], GreaterEqual[x, #[[2]]]} & /@
Thread[{Accumulate[p], s}]]]];
pointDistribution /: Mean[
pointDistribution[spt_, prob_]] :=
spt.prob;
pointDistribution /: Variance[
pointDistribution[spt_, prob_]] :=
Module[
{m = Mean[pointDistribution[spt, prob]]},
((spt - m)^2).prob];
pointDistribution /: StandardDeviation[
pointDistribution[spt_, prob_]] :=
Sqrt[Variance[pointDistribution[spt, prob]]];
pointDistribution /: expectation[
expr_, x_,
pointDistribution[spt_, prob_]] :=
(expr /. ({(x -> #)} & /@ spt)).prob;
The standfard structure for Expectation was not used because the target
(pointDistribution) of the upvalue cannot be buried too deeply in the
definition.
pointDistribution /: Mode[
pointDistribution[spt_, prob_]] :=
Module[
{m = Pick[support, Thread[prob == Max[prob]]]},
If[Length[m] == 1, m[[1]], m]];
support = {-2.1, 3.45, 7};
prob = {0.5, 0.3, 0.2};
dist = pointDistribution[support, prob];
PDF[dist, x]
Piecewise[{{0.5, x == -2.1}, {0.3, x == 3.45},
{0.2, x == 7}}, 0]
Mode[dist]
-2.1
Mean[dist]
1.385
Mean[dist] == expectation[x, x, dist]
True
Variance[dist]
13.6575
Variance[dist] ==
expectation[(x - Mean[dist])^2, x, dist]
True
StandardDeviation[dist]
3.69561
CDF[dist, x]
Piecewise[{{1., x >= 7}, {0.8, x >= 3.45},
{0.5, x >= -2.1}}, 0]
DiscretePlot[
PDF[dist, x], {x, support},
Frame -> True, Axes -> False,
AxesOrigin -> {0, 0}]
Plot[CDF[dist, x],
{x, Min[support] - 1, Max[support] + 1},
Frame -> True, Axes -> False,
AxesOrigin -> {0, 0},
Exclusions -> support,
ExclusionsStyle -> AbsoluteDashing[{2, 5}]]
support2 = {-2.1, 3.45, Pi};
prob2 = {.5, .3, .2};
dist2 = pointDistribution[support2, prob2];
PDF[dist2, x]
Piecewise[{{0.5, x == -2.1}, {0.3, x == 3.45},
{0.2, x == Pi}}, 0]
CDF[dist2, x]
Piecewise[{{1., x >= 3.45}, {0.7, x >= Pi},
{0.5, x >= -2.1}}, 0]
Bob Hanlon
On Sat, Jul 6, 2013 at 5:04 AM, <bruce.colletti at gmail.com> wrote:
> The questions below can presumably be answered in terms of
> ProbabilityDistribution, so here goes...
>
> How do I create a distribution for the discrete random variable whose
> support is {-2.1, 3.45, 7} having corresponding probabilities {0.5, 0.3,
> 0.2}?
>
> What if the support is {-2.1, 3.45, pi}?
>
> If ProbabilityDistribution cannot support these, then what?
>
> Thanks.
>
> Bruce
>
>