2013-04-17 29 views
7

Chciałbym podsumować dowolną liczbę probabilistycznych rozkładów rzeczy za pomocą symulacji typu montecarlo. Chciałbym losowo próbować ciągłe rozkłady czegoś i dodawać je do innych losowych próbek innych ciągłych rozkładów, ostatecznie uzyskując rozkład prawdopodobieństwa dla ich kombinacji. Same rozkłady są empiryczne - nie są funkcją, ale w postaci P99 = 2,4, P90 = 7,12, P50 = 24,53, P10 = 82,14 itd. (W rzeczywistości jest ich kilka). Dystrybucje są mniej więcej logormormalne, więc przybliżenie ich jako logormalnego byłoby prawdopodobnie w porządku, jeśli to konieczne. Ale w jaki sposób mogę wprowadzić to w urządzeniu SciPy pod numerem lognorm function? Czy może to zrobić w inny sposób w SciPy lub python w ogóle?Tworzenie niestandardowego rozkładu prawdopodobieństwa w celu losowego pobierania próbek z SciPy

Mam nadzieję, że to jasne, co próbuję zrobić. Wielkie dzięki, Alex

Odpowiedz

2

Wygląda na to, że to, co masz, jest w istocie histogramem gęstości prawdopodobieństwa. Jedną rzeczą, którą możesz zrobić, to użyć empirycznego rozkładu inverse transform sampling.

Alternatywnie, jeśli oczekujesz określonej funkcjonalnej formy dystrybucji (lognorm lub innej), możesz spróbować dopasować dane do odpowiedniego formularza funkcjonalnego.

+0

Hmm dobrze, spodziewam się, że są blisko lognormalu, czy wiesz, w jaki sposób chciałbym dopasować dane do tego? Pomyliłem się, jak dopasować dystrybucję lognorm przez dwa dane punkty na [stronie opisu] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.lognorm.html#scipy .stats.lognorm). Gdybym miał P90, który był X i P10, który był Y, w jaki sposób zrobiłbym rozkład lognormalny, który pasowałby do dwóch? –

+0

Nie jestem pewien co do tej dwupunktowej rzeczy, o której mówisz. Co bym zrobił, najpierw sprawdziłbym czy dystrybucja faktycznie * jest * log-normalna. W tym celu użyłbym tego, że dla normalnej dystrybucji momenty powinny być powiązane w bardzo precyzyjny sposób (por. Wikipedia lub mathworld lub gdzie indziej), a jeśli 'X' jest logarytmem normalnym, to' log X' jest normalnie dystrybuowane: po prostu oblicz kilka pierwszych momentów "log X". –

+0

OK, ale czy nie muszę ładować go do obiektu scipy, aby móc pobrać z niego losowe próbki za pomocą 'R = lognorm.rvs (s, size = 100)' jak wspomniano powyżej na stronie funkcji lognorm? –