如何使用没有警告的质量列表定义任意离散概率分布

Sei*_*gai 14 wolfram-mathematica mathematica-8

在Mathematica 8中,我想定义一个离散分布,其密度质量作为列表给出.例如,

In[1] f = ProbabilityDistribution[{2/3, 1/3}[[x]], {x, 1, 2, 1}];
Run Code Online (Sandbox Code Playgroud)

这似乎有效.然而,这发出了两次重复的警告:

"Part::pspec: Part specification x is neither an integer nor a list of integers." 
Run Code Online (Sandbox Code Playgroud)

然而,f似乎正常工作.这条消息让我觉得可能有更好的方法来定义相同的分布.如何使用列表定义离散分布但不调用警告?

Arn*_*ing 16

您可能希望在EmpiricalDistribution从值列表构造分布时使用:

empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]
Run Code Online (Sandbox Code Playgroud)

然后您可以在其他统计和可视化功能中使用它:

Plot[CDF[empiricalDistribution][x], {x, 0, 4}]
Run Code Online (Sandbox Code Playgroud)

ProbabilityDistribution当你有一个pdf时,该功能更合适.


Dan*_*lau 13

可以将权重列表转换为Piecewise,并将其提供给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}]
Run Code Online (Sandbox Code Playgroud)

Daniel Lichtblau