Вот

я есть PDF-файлы и CDF-файлы для двух пользовательских дистрибутивов, средства генерации RandomVariates для каждого и код для подгонки параметров к данным. Часть этого кода, который я выложил ранее на:

Расчет ожидания для пользовательского распределения в Mathematica

Вот некоторые из них:

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

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

nlDist /: 
    Random`DistributionVector[
    nlDist [alpha_, beta_, mu_, sigma_], n_, prec_] :=
    RandomVariate[ExponentialDistribution[alpha], n, 
        WorkingPrecision -> prec] - 
      RandomVariate[ExponentialDistribution[beta], n, 
        WorkingPrecision -> prec] + 
      RandomVariate[NormalDistribution[mu, sigma], n, 
        WorkingPrecision -> prec];

dplDist /: 
    Random`DistributionVector[
    dplDist[alpha_, beta_, mu_, sigma_], n_, prec_] :=
    Exp[RandomVariate[ExponentialDistribution[alpha], n, 
         WorkingPrecision -> prec] - 
       RandomVariate[ExponentialDistribution[beta], n, 
         WorkingPrecision -> prec] + 
       RandomVariate[NormalDistribution[mu, sigma], n, 
         WorkingPrecision -> prec]];

Я могу опубликовать больше кода, если кому-то нужно его увидеть, но я думаю, что вышеизложенное дает хороший смысл подхода.

Теперь мне нужен способ использовать DistributionFitTest [] с этими дистрибутивами примерно так:

DistributionFitTest[data, dplDist[3.77, 1.34, -2.65, 0.40],"HypothesisTestData"]  

Ах, но это не работает. Вместо этого я получаю сообщение об ошибке, которое начинается как:

«Аргумент dplDist [3.77,1.34, -2.65,0.4] должен быть допустимым распределением ...»

Похоже, что DistributionFitTest [] не распознает эти дистрибутивы как дистрибутивы.

Я не вижу, как использование TagSet поможет в этом случае, если только вы не можете использовать TagSet, чтобы дать DistributionFitTest [] то, что нужно для идентификации этих пользовательских дистрибутивов.

Кто-нибудь может посоветовать мне способ заставить это работать? Я хотел бы использовать DistributionFitTest [] с такими пользовательскими дистрибутивами или найти способ обойтись без проблем.

Спасибо - Ягра