У меня есть 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 [] с такими пользовательскими дистрибутивами или найти способ обойтись без оценки.
Спасибо - Ягра