He ajustado un modelo lognormal usando R con un conjunto de datos. Los parámetros resultantes fueron:
meanlog = 4.2991610
sdlog = 0.5511349
Me gustaría transferir este modelo a Scipy, que nunca he utilizado antes. Usando Scipy, pude obtener una forma y escala de 1 y 3.1626716539637488e+90 -- números muy diferentes. También he tratado de usar la exp de la meanlog y sdlog pero sigo obteniendo una gráfica bizarra.
He leído toda la documentación que he podido sobre scipy y sigo confundido sobre el significado de los parámetros shape y scale en este caso. ¿Tendría sentido codificar la función yo mismo? Eso parece propenso a errores, sin embargo, como soy nuevo en scipy.
SCIPY Lognormal (AZUL) frente a R Lognormal (ROJO):
¿Alguna idea sobre qué dirección tomar? Los datos se ajustan muy bien con el modelo de R, por cierto, así que si se parece a otra cosa en Python, siéntase libre de compartir.
Gracias.
Actualización:
Estoy ejecutando Scipy 0.11
Aquí está un subconjunto de los datos. La muestra real es de 38k+, con una media de 81,53627:
Subconjunto:
x
[60, 170, 137, 138, 81, 140, 78, 46, 1, 168, 138, 148, 145, 35, 82, 126, 66, 147, 88, 106, 80, 54, 83, 13, 102, 54, 134, 34]
numpy.mean(x)
99.071428571428569
Alternativamente:
Estoy trabajando en una función para capturar el pdf:
def lognoral(x, mu, sigma):
a = 1 / (x * sigma * numpy.sqrt(2 * numpy.pi) )
b = - (numpy.log(x) - mu) ^ 2 / (2 * sigma ^ 2)
p = a * numpy.exp(b)
return p
Sin embargo, esto me da los siguientes números (he probado varios por si me confundía el significado de sdlog y meanlog):
>>> lognormal(54,4.2991610, 0.5511349)
0.6994656085799437
>>> lognormal(54,numpy.exp(4.2991610), 0.5511349)
0.9846125119455129
>>> lognormal(54,numpy.exp(4.2991610), numpy.exp(0.5511349))
0.9302407837304372
¿Alguna idea?
Actualización:
volver a correr con la sugerencia de "UPQuark":
forma, loc, escala (1.0, 50.03445923295007, 19.074457156766517)
Sin embargo, la forma del gráfico es muy similar, ya que el pico se produce en torno a los 21 años.