Tengo archivos PDF y CDF para dos distribuciones personalizadas, un medio para generar RandomVariates para cada uno y un código para ajustar los parámetros a los datos. Algunos de este código que he publicado anteriormente en:DistributionFitTest [] para distribuciones personalizadas en Mathematica
Calculating expectation for a custom distribution in Mathematica
Algunos de los que sigue:
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]];
me pueden enviar más de un código, si alguien tiene que verlo, pero creo que el arriba da una buena idea del enfoque hasta ahora.
Ahora necesito una manera de utilizar DistributionFitTest [] con estas distribuciones en algo como esto:
DistributionFitTest[data, dplDist[3.77, 1.34, -2.65, 0.40],"HypothesisTestData"]
Ah, pero esto no funciona. En su lugar aparece un mensaje de error que comienza como:
"El argumento dplDist [3.77,1.34, -2.65,0.4] debe ser una distribución válida ..."
Por lo tanto, Parece que DistributionFitTest [] no reconoce estas distribuciones como distribuciones.
No veo cómo usar TagSet ayudaría en esta instancia, a menos que uno pueda usar TagSet para dar a DistributionFitTest [] lo que necesita para identificar estas distribuciones personalizadas.
¿Alguien me puede recomendar una forma de hacer que esto funcione? Me gustaría usar DistributionFitTest [] con distribuciones personalizadas como esta o encontrar algún trabajo para evaluar la bondad del ajuste.
Thx - Jagra
Nice! Creo que podría agregar este (junto con más detalles, si lo desea) a [** nuestra pequeña publicación ToolBag **] (http://stackoverflow.com/q/4198961/353410) debajo de _Undocumented (o escasamente documentado)) Características_ sección. –
Reflexivo, informativo y revelador de lo que sucede bajo el capó. Me pregunto si quien escribe los tutoriales podría proporcionar una detallada sobre este tema en su totalidad. También podría cubrir parámetros de ajuste, momentos, etc., todo lo que uno necesita para lograr que las distribuciones personalizadas funcionen de la manera más transparente posible con Mathematica. Nuevamente, muchas gracias - Jagra – Jagra
¿Se aplica lo mismo para LogLikelihood? Básicamente, ¿tiene que usar TagSet para definir cada función posible sobre la distribución personalizada? – jfelectron