2013-04-17 13 views
7

Sto cercando di riassumere un numero arbitrario di distribuzioni probabilistiche di cose usando una simulazione di tipo montecarlo. Mi piacerebbe campionare casualmente distribuzioni continue di qualcosa e aggiungerle ad altri campioni casuali di altre distribuzioni continue, ottenendo in ultima analisi una distribuzione di probabilità per la loro combinazione. Le distribuzioni stesse sono empiriche - non sono una funzione ma nella forma di P99 = 2.4, P90 = 7.12, P50 = 24.53, P10 = 82.14 e così via (in realtà ci sono un sacco di quei punti). Le distribuzioni sono più o meno lognormali, quindi avvicinarle come lognormali probabilmente andrebbe bene, se necessario. Ma come potrei inserirlo in SciPy's lognorm function? O lo fai in un altro modo in SciPy o in Python in generale?Creare una distribuzione di probabilità personalizzata per prelevare campioni casuali da SciPy

Spero sia chiaro cosa sto cercando di fare. Grazie mille, Alex

risposta

2

Sembra che quello che hai sia essenzialmente un istogramma della densità di probabilità. Una cosa che puoi fare è usare inverse transform sampling con la tua distribuzione empirica.

In alternativa, se si prevede una determinata forma funzionale di una distribuzione (lognorm o qualche altra), è possibile provare ad adattare i dati con il modulo funzionale corrispondente.

+0

Hmm beh, mi aspetto che siano vicini a lognormal, sai come farei adattare i dati a quello? Sono rimasto confuso da come rendere la distribuzione lognormale adatta a due punti dati in [la pagina di descrizione] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.lognorm.html#scipy .stats.lognorm). Se avessi un P90 che era X e un P10 che era Y, come potrei fare una distribuzione lognormale che si adatti ai due? –

+0

Non sono sicuro di questa cosa a due punte di cui stai parlando. Quello che farei, prima controllerei se la distribuzione in realtà * è * log-normale. Per questo, vorrei usare il fatto che per una distribuzione normale i momenti dovrebbero essere collegati in un modo molto preciso (cf wikipedia o mathworld o altrove), e che se 'X' è log-normale, allora' log X' è normalmente distribuito: basta calcolare diversi primi momenti del 'log X'. –

+0

Ok, ma non è necessario caricarlo nell'oggetto scipy in modo che sia possibile ottenere campioni casuali utilizzando 'R = lognorm.rvs (s, size = 100)' come menzionato nella pagina della funzione lognorm sopra? –

Problemi correlati