¿Cómo se usa scipy.stats.rv_continuous?

He estado buscando un buen tutorial o ejemplos de cómo usar rv_continuous y no he podido encontrar uno.

Yo leo:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuous

pero en realidad no fue tan útil (y careció de ejemplos de cómo usarlo).

Un ejemplo de algo que quería poder hacer es especificar las distribuciones de probabilidad y poder fit y luego simplemente tener el pdf que quería y poder expect y obtener el valor esperado deseado.

Lo que entiendo hasta ahora es que para crear cualquier distribución, necesitamos crear nuestra propia clase para ella y luego subclase rv_continuous . Luego, al especificar un _pdf o _cdf , deberíamos poder utilizar simplemente todos los métodos que rv_continuous nos proporcionaría. Como expect y en fit debería estar disponible ahora.

Sin embargo, lo que es realmente misterioso para mí es que si no le decimos a rv_continuous explícitamente qué parámetros son los que especifican la distribución de probabilidad, ¿es realmente capaz de hacer todos esos métodos correctamente? ¿Cómo lo hace incluso con _pdf o _cdf?

¿O acaso malentendí cómo funciona?

Además, si puede proporcionar un ejemplo simple de cómo funciona y cómo usar expect y / o fit , ¡sería increíble! O tal vez un mejor tutorial o enlace sería genial.

Gracias por adelantado.

Aquí hay un tutorial: http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

Básicamente, rv_continuous está hecho para subclasificar. Úselo si necesita una distribución que no esté definida en scipy.stats (hay más de 70 de ellos).

Re cómo funciona. En pocas palabras, utiliza rutas de código genéricas: si su subclase define _pdf y no define _logpdf , entonces hereda

 def _logpdf(self, x, *args): return log(self._pdf(x, *args)) 

y un montón de métodos similares (consulte https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py para obtener detalles precisos).

Re parámetros. Probablemente te refieres a los parámetros de forma, ¿verdad? Se deducen automáticamente al inspect la firma de _pdf o _cdf , consulte https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py#L617 . Si desea omitir la inspección, proporcione un parámetro de shapes al constructor de su instancia:

 class Mydist(stats.rv_continuous): def _pdf(self, x, a, b, c, d): return 42 mydist = Mydist(shapes='a, b, c, d') 

[Estrictamente hablando, esto solo se aplica a scipy 0.13 y superior. Las versiones anteriores utilizaban un mecanismo diferente y requerían el atributo de shapes .]