如何使用一组离散概率质量列表定义任意的离散概率分布,且不出现警告信息。

14

在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 的运行似乎是正确的。这个消息让我想到可能有一种更好的方法来定义相同的分布。如何使用列表定义离散分布,但又不会触发警告?

2个回答

17
你可能需要使用EmpiricalDistribution来从值列表构建分布:
empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]

你可以将这个结果应用于其他的统计和可视化函数:

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

ProbabilityDistribution函数在你拥有一个概率密度函数(pdf)时更加合适。


1
谢谢您的回答。我尝试了这个,它确实有效!但愿我能够接受Daniel和您的回答。 - Seiji Kumagai
是的,两个答案都提供了有关构建离散分布的很好的信息。 - Ludovic Kuty

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}]

Daniel Lichtblau


谢谢你的回答。它有效了,而且我学到了一个新的函数MapIndexed! - Seiji Kumagai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接