Изчисляване на очакване за персонализирано разпределение в Mathematica

Този въпрос се основава на страхотните отговори, които получих на по-ранен въпрос:

Може ли човек да разшири функционалността на PDF, CDF, FindDistributionParameters и т.н. в Mathematica?

Като начало имам PDF и CDF файлове за две персонализирани дистрибуции: nlDist и dplDist, както можете да видите от кода, dplDist се основава на nlDist.

    nlDist /: PDF[nlDist[alpha_, beta_, mu_, sigma_], 
   x_] := (1/(2*(alpha + beta)))*alpha* 
   beta*(E^(alpha*(mu + (alpha*sigma^2)/2 - x))* 
      Erfc[(mu + alpha*sigma^2 - x)/(Sqrt[2]*sigma)] + 
     E^(beta*(-mu + (beta*sigma^2)/2 + x))* 
      Erfc[(-mu + beta*sigma^2 + x)/(Sqrt[2]*sigma)]); 

nlDist /: 
  CDF[nlDist[alpha_, beta_, mu_, sigma_], 
   x_] := ((1/(2*(alpha + beta)))*((alpha + beta)*E^(alpha*x)* 
        Erfc[(mu - x)/(Sqrt[2]*sigma)] - 
       beta*E^(alpha*mu + (alpha^2*sigma^2)/2)*
        Erfc[(mu + alpha*sigma^2 - x)/(Sqrt[2]*sigma)] + 
       alpha*E^((-beta)*mu + (beta^2*sigma^2)/2 + alpha*x + beta*x)*
        Erfc[(-mu + beta*sigma^2 + x)/(Sqrt[2]*sigma)]))/ 
   E^(alpha*x);         

dplDist /: PDF[dplDist[alpha_, beta_, mu_, sigma_], x_] := 
  PDF[nlDist[alpha, beta, mu, sigma], Log[x]]/x;
dplDist /: CDF[dplDist[alpha_, beta_, mu_, sigma_], x_] := 
  CDF[nlDist[alpha, beta, mu, sigma], Log[x]];

Plot[PDF[dplDist[3.77, 1.34, -2.65, 0.40], x], {x, 0, .3}, 
 PlotRange -> All]
Plot[CDF[dplDist[3.77, 1.34, -2.65, 0.40], x], {x, 0, .3}, 
 PlotRange -> All]

В предишния ми въпрос отговорите на joebolte и sasha и препоръката за използване на TagSet ми помогнаха да стигна дотук. Сега въпросите ми се отнасят до dplDist.

Сега трябва да изчисля очакването от някаква точка на оста x на PDF файла. В анализа на оцеляването те наричат ​​това среден остатъчен живот. Нещо като следното:

Expectation[X \[Conditioned] X > 0.1, 
  X \[Distributed] dplDist[3.77, 1.34, -2.65, 0.40]] - 0.1

Това не работи, по същество просто връща входовете като текст.

Разбирам как мога да използвам TagSet, за да дефинирам PDF и CDF файлове за персонализирани дистрибуции, как да направя нещо подобно за Expectation[]?


Ще публикувам повече за това проследяване в отделен въпрос, но също така имам нужда от стратегия за изчисляване на съответствието на dplDist спрямо някои данни, към които съм напаснал разпределението.


Много благодаря на всички.


person Jagra    schedule 09.06.2011    source източник


Отговори (3)


Въпреки че сте предоставили както PDF, така и CDF за вашата персонализирана дистрибуция на Mathematica, вие не сте дали домейна, така че той не познава границите на интегриране и всъщност дали да интегрира или сумира. Добавяне, което кара нещата да работят:

In[8]:= nlDist /: 
 DistributionDomain[nlDist[alpha_, beta_, mu_, sigma_]] := 
 Interval[{-Infinity, Infinity}]

In[9]:= NExpectation[Log@X \[Conditioned] Log@X > 0.1, 
  X \[Distributed] nlDist[3.77, 1.34, -2.65, 0.40]] - 0.1

Out[9]= 0.199329

Сравнете това с ProbabilityDistribution, който има формат ProbabilityDistribution[ pdf, {x, min, max}], където изрично посочвате домейна.

За да могат символни решаващи програми като Probability, Expectation и техните цифрови двойници да работят върху тях, също така се препоръчва да зададете DistributionParameterQ и DistributionParameterAssumptions.

DistributionParameterQ трябва да даде False ако параметрите изрично нарушават предположенията, а DistributionParameterAssumptions трябва да върне булевия израз, представящ предположенията за параметрите на вашето разпределение.

person Sasha    schedule 09.06.2011
comment
@Sasha: Това не е свързано с въпроса или отговора, но можете ли да коментирате дали v9 се очаква тази година? Питам, защото си мислех да взема v8, но ако v9 е зад ъгъла, предпочитам да го изчакам... - person abcd; 10.06.2011
comment
@Sasha Много благодаря за отговора и допълнителната представа и насочването към по-широките проблеми. Дж - person Jagra; 10.06.2011
comment
@yoda Не съм в състояние да правя подобни изявления, но бих искал да отбележа, че покупката на v8 ще ви даде Премиер услуга за 1 година, която включва безплатно надграждане до най-новата издадена версия. Историческите данни за разстоянията между изданията на предишната версия на Mathematica може да ви помогнат да решите. - person Sasha; 10.06.2011
comment
@Sasha: Няма проблем, разбирам. Благодаря за допълнителната информация относно: първокласно обслужване! - person abcd; 10.06.2011
comment
@Sasha: Изглежда, че нещо не работи както трябва. Копирах вашия код и използването на DistributionDomain заедно с моя оригинален код в нов бележник и рестартирах компютъра само за да имам чиста среда, но когато стартирам NExpectation[Log@X [Conditioned] Log@X › 0.1, X [Distributed] nlDist[3.77, 1.34, -2.65, 0.40]] - 0.1 Получавам следния изход: -0.1 + NEExpectation[Log[X] [Conditioned] Log[X] › 0.1, X [Distributed] nlDist[3.77, 1.34, - 2.65, 0.4]] вместо това, което сте получили: Out[9]= 0.199329 Трябваше да хвана това по-рано. Ще се радвам на всякакви мисли. благодаря Дж - person Jagra; 10.06.2011
comment
@Jarga Да, прав си. Оказва се, че както DistributionParameterQ, така и DistributionParameterAssumptions са от съществено значение. - person Sasha; 11.06.2011

Не съм сигурен, че наистина разбирам въпроса ви... Очакваната стойност или средната е първият момент от разпределението и може да се изчисли като

expectation := Integrate[x #, {x,-Infinity,Infinity}]&;

и го използвайте като expectation[f[x]], където f[x] е вашият pdf.

Последният ви кодов фрагмент не работи за мен. Не знам дали това е v8 код или е персонализиран, или ако се опитвате да кажете, че това е, което искате да бъде вашата функция...

Можете също да опитате да разгледате функцията ExpectedValue на Mathematica.

ExpectedValue[x, NormalDistribution[m, s], x]
Out[1] = m
person abcd    schedule 09.06.2011
comment
Функцията Expectation[] във версия 8 замества ExpectedValue[] Надявах се на начин за използване на TagSet в нещо като следното: - person Jagra; 09.06.2011
comment
Исках да коментирам: @yoda Функцията Expectation[] във версия 8 замества ExpectedValue[] Надявах се на начин за използване на TagSet или нещо подобно в нещо като следното: dplDist /: Expectation[X, X [Distributed] dplDist[alpha_ , beta_, mu_, sigma_]] := ?; - person Jagra; 09.06.2011

Следващата страница съдържа някои съвети за активиране на персонализирани дистрибуции (т.е. написани от нулата без TransformedDisribution или ProbabilityDistribution) за използване в CopulaDistribution, RandomVariate и т.н.: https://mathematica.stackexchange.com/questions/20067/efficient-генериране-на-случайни-вариати-от-копула-разпределение/26169#26169

person doug fromoz    schedule 30.05.2013
comment
Моля, обобщете връзката в отговора си; по този начин, ако връзката остарее, отговорът няма да е напълно безполезен. - person michaelb958--GoFundMonica; 31.05.2013