Как определить произвольное дискретное распределение вероятностей со списком масс без предупреждений - PullRequest
14 голосов
/ 10 ноября 2011

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

16 голосов
/ 10 ноября 2011

Возможно, вы захотите использовать EmpiricalDistribution при построении распределения из списка значений:

empiricalDistribution = EmpiricalDistribution[{2/3, 1/3} -> {1, 2}]

и затем вы можете использовать это в других статистических и визуализационных функциях:

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

Функция ProbabilityDistribution больше подходит, если у вас есть pdf .

13 голосов
/ 10 ноября 2011

Может преобразовать список весов в кусочные и передать их в вероятностное распределение.

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

Даниэль Лихтблау

...