在Mathematica中,我如何定义任意概率分布?

时间:2010-08-19 19:11:29

标签: wolfram-mathematica

我想要一个任意函数p [x],它集成到1并且对于所有x,0 <= p [x]&lt; = 1.某种转换规则?

2 个答案:

答案 0 :(得分:12)

你可以使用ProbabilityDistributionx的未定义函数:

dist = ProbabilityDistribution[p[x], {x, -Infinity, Infinity}];

现在知道要应用的一些规则:

  • 连续概率密度:单个值的概率为零

    In[26]:= Probability[x == 0, x \[Distributed] dist]
    
    Out[26]= 0
    
  • 完全拥有价值的可能性

    In[28]:= Probability[x > 0 || x <= 0, x \[Distributed] dist]
    
    Out[28]= 1
    
  • CDF at - infinity

    In[29]:= CDF[dist][-\[Infinity]]
    
    Out[29]= 0
    
  • CDF at + infinity

    In[30]:= CDF[dist][\[Infinity]]
    
    Out[30]= 1
    
  • PDF

    In[32]:= PDF[dist][x]
    
    Out[32]= p[x]
    
  • 但是,它不会假设分发的PDF已标准化:

    In[33]:= Integrate[PDF[dist][x], {x, -Infinity, Infinity}]
    
    Out[33]= Integrate[p[x], {x, -Infinity, Infinity}]
    
  • 可以教授后者,为p:

    定义UpValue
    p /: Integrate[p[x], {x, -Infinity, Infinity}] = 1;
    
  • 现在它可以整合PDF:

    In[4]:= Integrate[PDF[dist][x], {x, -Infinity, Infinity}]
    
    Out[4]= 1
    

你知道你的第二个要求,即0 <= p[x] <= 1,对于概率密度函数一般都不正确,对吗?

答案 1 :(得分:0)

如果你只是要求提供符合你标准的密度函数(PDF)的例子,这里有两个(不计其数很多):

p(x) = 1 if 0 < x < 1
       0 otherwise

p(x) = x/2 if 0 < x < 2
       0 otherwise

我们甚至可以稍微概括一下:

p(x) = 1/k if 0 < x < k
       0 otherwise

p(x) = 2x/k^2 if 0 < x < k
       0 otherwise

后者适用于k&gt; = 2。 我们甚至可以用另一个参数推广它,以获得具有任意指数

的一类此类函数
p(x) = (a+1)/k^(a+1)*x^a if 0 < x < k
       0 otherwise

适用于所有&gt; 1和k>一个+ 1。

对于更有趣的例子,我认为你需要提供更多标准。 你提到了一个转换规则,所以也许你想在R1上采用一个任意的有界函数并对它进行平移/缩放,使它总是在0和1之间并且积分为1。 只要你能得到给定函数的最小值,最大值和积分,这将有一个简单的答案。 继续编辑问题,询问是否确实如此。