es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe un equivalente logit-normal de sp.stats.norm.ppf en Python? (o en otros lenguajes…)

Si quiero hacer algo como lo siguiente:

# utilizando la CDF inversa normal estándar
param_values2[:,0] = sp.stats.norm.ppf(param_values2[:,0],0,np.pi/2.)

Para convertir muestras (param_values2) en el intervalo [0, 1] a una distribución uniforme, pero quiero convertirlas a una distribución logit normal, ¿cómo puedo hacer esto? No encuentro nada útil sobre esto hasta ahora… La sabiduría/conocimiento de los demás sería muy apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir las muestras en el intervalo [0,1] a una distribución logit-normal, se deben tomar medidas adicionales más allá de simplemente utilizar la función inversa de la CDF normal como se muestra en el código proporcionado.

    Un enfoque podría ser primero utilizar la función inversa de logit para transformar las muestras en valores en el intervalo [0,1]. Esto se puede hacer utilizando el siguiente código:

    converted_sample = sp.special.expit(param_values2)
    

    A continuación, se puede ajustar una distribución log-normal a las muestras transformadas utilizando la estimación de máxima verosimilitud. Esto se puede hacer utilizando el siguiente código:

    from scipy.stats import lognorm
    
    shape, loc, scale = lognorm.fit(converted_sample, floc=0)
    

    Finalmente, las muestras transformadas se pueden convertir a una distribución logit-normal utilizando nuevamente la función inversa de logit, pero con los parámetros de la distribución log-normal ajustada:

    logit_norm_sample = sp.special.logit(lognorm.cdf(converted_sample, s=shape, loc=loc, scale=scale))
    

    Tenga en cuenta que el argumento floc=0 en lognorm.fit() especifica que la distribución es no negativa y se fuerza a tener un límite inferior de cero.

Comments are closed.