Wolfram mathematica 如何在没有警告的情况下定义具有质量列表的任意离散概率分布

Wolfram mathematica 如何在没有警告的情况下定义具有质量列表的任意离散概率分布,wolfram-mathematica,mathematica-8,Wolfram Mathematica,Mathematica 8,在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似乎工作正常。这个消息让我想到,可能有更好的方法来定义相同

在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似乎工作正常。这个消息让我想到,可能有更好的方法来定义相同的发行版。如何在不调用警告的情况下使用列表定义离散分布?

可以将权重列表转换为分段分布,并将其输入概率分布

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

当从值列表构建分布时,您可能希望使用
经验分布

empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]
然后,您可以将其用于其他统计和可视化功能:

Plot[CDF[empiricalDistribution][x], {x, 0, 4}]

当您有pdf时,
ProbabilityDistribution
函数更合适。

谢谢您的回答。它工作了,我学习了一个新函数mapindex!谢谢你的回答。我试过这个,它确实有效!我希望我能接受Daniel和你的答案。是的,这两个答案都提供了构建离散分布的重要信息