在Mathematica 8中,我想定义一个离散分布,密度质量作为列表给出。例如,
In[1] f = ProbabilityDistribution[{2/3, 1/3}[[x]], {x, 1, 2, 1}];
这似乎有效。然而,这发出了两次重复的警告:
"Part::pspec: Part specification x is neither an integer nor a list of integers."
然而,f似乎正常工作。这条消息让我觉得可能有更好的方法来定义相同的分布。如何使用列表定义离散分布但不调用警告?
答案 0 :(得分:16)
从值列表构建分布时,您可能希望使用EmpiricalDistribution
:
empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]
然后您可以在其他统计和可视化功能中使用它:
Plot[CDF[empiricalDistribution][x], {x, 0, 4}]
当您拥有 pdf 时,函数ProbabilityDistribution
更合适。
答案 1 :(得分:13)
可以将权重列表转换为分段,并将其提供给概率分布。
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