Как определить произвольное дискретное распределение вероятности со списком массы без предупреждений

В 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 работает правильно. Это сообщение заставило меня подумать, что может быть лучший способ определить один и тот же дистрибутив. Как я могу определить дискретное распределение, используя список, но не вызывая предупреждения?

Ответы

Ответ 1

Может преобразовать список весов в кусок, и передать это в 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}]

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

Ответ 2

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

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

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

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

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