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

6

我希望有一个任意函数p[x],它可以积分为1,并且对于所有的x,0 <= p[x] <= 1。有没有什么转换规则呢?


“Arbitrary” 是什么意思?是一种“随机函数”吗? - Karsten W.
任意的,就像我不给它一个定义。不透明的。 - Sasha
你怎么能使用未定义的东西呢? 请问这个函数是用来干什么的?通过整合到1,是在[0,1]还是R上? - Per Alexandersson
我希望能够告诉Mathematica,我有一个不透明的函数p,它在R上积分为1,并且它可以利用这个事实来简化涉及p的更复杂的积分。 - Sasha
2个回答

13
你可以使用ProbabilityDistribution来实现这个目标,同时结合一个未定义的函数x:
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
    
  • 负无穷处的累积分布函数

  • In[29]:= CDF[dist][-\[Infinity]]
    
    Out[29]= 0
    
  • +无穷大处的累积分布函数(CDF)

  • In[30]:= CDF[dist][\[Infinity]]
    
    Out[30]= 1
    
    PDF 文件
    In[32]:= PDF[dist][x]
    
    Out[32]= p[x]
    
    然而,它并不假设分布的概率密度函数已经被归一化:
    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,对于概率密度函数来说并不普遍成立,对吗?

    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 >= 2,后者是有效的。 我们甚至可以通过另一个参数来概括它,以获得具有任意指数的这类函数。

    p(x) = (a+1)/k^(a+1)*x^a if 0 < x < k
           0 otherwise
    

    适用于所有a>1和k>a+1。

    如果您想要更有趣的示例,我认为您需要提供更多的标准。您提到了一个转换规则,因此也许您想要取R1上的任意有界函数,并将其翻译/缩放,使其始终在0和1之间,并且积分为1。只要您可以获得给定函数的最小值、最大值和积分,这将有一个直接的答案。如果这确实是您要寻找的内容,请随意编辑问题并提出。


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