В Mathematica, как я могу определить произвольное распределение вероятностей? - PullRequest
5 голосов
/ 19 августа 2010

Я хочу произвольную функцию p [x], которая интегрируется в 1 и для всех x, 0 <= p [x] <= 1. Какое-то правило преобразования?

Ответы [ 2 ]

12 голосов
/ 15 февраля 2011

Вы можете использовать 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
    
  • CDF в бесконечности

    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]
    
  • Однако, это не значит, что PDF дистрибутива нормализован:

    In[33]:= Integrate[PDF[dist][x], {x, -Infinity, Infinity}]
    
    Out[33]= Integrate[p[x], {x, -Infinity, Infinity}]
    
  • Последнему можно научить, определив значение UpValue для p:

    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 голосов
/ 20 августа 2010

Если вы просто запрашиваете примеры функций плотности (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. Это будет иметь простой ответ, пока вы можете получить мин, макс и интеграл от данной функции. Перейдите к редактированию вопроса и задайте его, если это действительно то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...