TransformedDistribution в Mathematica

Я разработал некоторый код для генерации случайных вариаций из продукта LogNormalDistribution и StableDistribution:

LNStableRV[{\[Alpha]_, \[Beta]_, \[Gamma]_, \[Sigma]_, \[Delta]_},

n_] := Module[{LNRV, SDRV, LNSRV},
  LNRV = RandomVariate[LogNormalDistribution[Log[\[Gamma]], \[Sigma]],
     n];
  SDRV = RandomVariate[
    StableDistribution[\[Alpha], \[Beta], \[Gamma], \[Sigma]], n];
  LNRV * SDRV + \[Delta]
  ]

(* Note the delta serves as a location parameter *)

Я думаю, что это работает нормально:

LNStableRV[{1.5, 1, 1, 0.5, 1}, 50000];
Histogram[%, Automatic, "ProbabilityDensity",
          PlotRange -> {{-4, 6}, All}, ImageSize -> 250]
ListPlot[%%, Joined -> True, PlotRange -> All]

Теперь я хочу создать TransformedDistribution в том же духе, чтобы может использовать PDF[], CDF[] и т. д. в этом пользовательском дистрибутиве и легко выполнять графики и другой анализ.

Экстраполируя пример из Центра документацииTransformedDistribution:

\[ScriptCapitalD] =
  TransformedDistribution[
   u v, {u \[Distributed] ExponentialDistribution[1/2],
    v \[Distributed] ExponentialDistribution[1/3]}];

Я пробовал это:

LogNormalStableDistribution[\[Alpha]_, \[Beta]_, \[Gamma]_, \
\[Sigma]_, \[Delta]_] := Module[{u, v},
   TransformedDistribution[
    u * v + \[Delta], {u \[Distributed]
      LogNormalDistribution[Log[\[Gamma]], \[Sigma]],
     v \[Distributed]
      StableDistribution[\[Alpha], \[Beta], \[Gamma], \[Sigma]]}]
   ];

\[ScriptCapitalD] = LogNormalStableDistribution[1.5, 1, 1, 0.5, 1]

Что дает мне это:

TransformedDistribution[
 1 + \[FormalX]1 \[FormalX]2, {\[FormalX]1 \[Distributed]
   LogNormalDistribution[0, 0.5], \[FormalX]2 \[Distributed]
   StableDistribution[1, 1.5, 1, 1, 0.5]}]

Но когда я пытаюсь построить PDF-файл дистрибутива, кажется, что он никогда не заканчивается (при условии, что я не позволял ему работать более минуты или двух):

Plot[PDF[\[ScriptCapitalD], x], {x, -4, 6}] (* This should plot over the same range as the Histogram above *)

Итак, несколько вопросов:

Имеет ли смысл моя функция LogNormalStableDistribution[] делать такие вещи?

Если да, то я:

  • Просто нужно, чтобы Plot[] работал дольше?
  • Как-то изменить?
  • Что я могу сделать, чтобы он работал быстрее?

Если не:

  • Нужно ли подходить к этому по-другому?
  • Использовать MixtureDistribution?
  • Использовать что-то другое?

person Jagra    schedule 02.03.2011    source источник
comment
Я не внимательно следил за вашим кодом, но вы можете заметить, что PDF[[ScriptCapitalD],1] не возвращает числовой результат...   -  person Dr. belisarius    schedule 03.03.2011
comment
Кстати... Позвольте мне поприветствовать вас в StackOverflow и напомнить три вещи, которые мы обычно здесь делаем: 1) Когда вы получаете помощь, старайтесь также отвечать на вопросы в своей области знаний 2) Read the FAQs 3) Когда вы увидите хорошие вопросы и ответы, проголосуйте за нихusing the gray triangles, так как доверие к системе основано на репутации, которую пользователи получают, делясь своими знаниями. Также не забудьте принять ответ, который лучше решает вашу проблему, если таковой имеется, by pressing the checkmark sign   -  person Dr. belisarius    schedule 03.03.2011


Ответы (1)


Ваш подход с использованием преобразованного распределения просто прекрасен, но поскольку PDF распределения не существует в закрытой форме, PDF[TransformedDistribution[..],x] не подходит, так как для каждого x будет применяться символический решатель. Лучше массировать ваш дистрибутив, чтобы получить pdf. Пусть X — логнормально-стабильная случайная величина. потом

CDF[LogNormalStableDistribution[params], x] == Probability[X <= x] 

Но X==U*V + delta, следовательно, X<=x переводится в V<=(x-delta)/U. Это дает

LogNormalStableCDF[{\[Alpha]_, \[Beta]_, \[Gamma]_, \[Sigma]_, \
\[Delta]_}, x_Real] := 
 Block[{u}, 
  NExpectation[
   CDF[StableDistribution[\[Alpha], \[Beta], \[Gamma], \[Sigma]], (x \
- \[Delta])/u], 
   u \[Distributed] LogNormalDistribution[Log[\[Gamma]], \[Sigma]]]]

Дифференцируя по x, получаем PDF:

LogNormalStablePDF[{\[Alpha]_, \[Beta]_, \[Gamma]_, \[Sigma]_, \
\[Delta]_}, x_Real] := 
 Block[{u}, 
  NExpectation[
   PDF[StableDistribution[\[Alpha], \[Beta], \[Gamma], \[Sigma]], (x \
- \[Delta])/u]/u, 
   u \[Distributed] LogNormalDistribution[Log[\[Gamma]], \[Sigma]]]]

Используя это, вот сюжет

введите здесь описание изображения

person Sasha    schedule 03.03.2011
comment
Саша -- Спасибо и за решение, и за объяснение. - person Jagra; 05.03.2011