In Mathematica 8, I want to define a discrete distribution with density mass given as a list. For example,
In[1] f = ProbabilityDistribution[{2/3, 1/3}[[x]], {x, 1, 2, 1}];
This seems to work. However, this emitted a twice-repeated warning:
"Part::pspec: Part specification x is neither an integer nor a list of integers."
Nevertheless, f seems to work correctly. This message got me thinking that there may be a better way to define the same distribution. How can I define a discrete distribution using a list but without invoking the warning?
You may want to use EmpiricalDistribution
when constructing a distribution from a list of values:
empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]
and you can then use this in other statistical and visualization functions:
Plot[CDF[empiricalDistribution][x], {x, 0, 4}]
The function ProbabilityDistribution
is more appropriate when you have a pdf.
Could convert the list of weights to a Piecewise, and feed that to ProbabilityDistribution.
wts = {2/3, 1/3};
toPiecewise[wts_, x_] :=
Piecewise[MapIndexed[{#1, x == #2[[1]]} &, wts]]
In[178]:= f =
ProbabilityDistribution[toPiecewise[wts, x], {x, 1, 2, 1}]
Out[178]= ProbabilityDistribution[
Piecewise[{{2/3, \[FormalX] == 1}, {1/3, \[FormalX] == 2}}, 0],
{\[FormalX], 1, 2, 1}]
Daniel Lichtblau
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With