Próbuję uzyskać wynik dystrybucji lognormal przy użyciu Scipy. Mam już Mu i Sigmę, więc nie muszę wykonywać żadnych innych prac przygotowawczych. Jeśli potrzebuję być bardziej konkretny (i staram się być z moją ograniczoną wiedzą o statystykach), powiedziałbym, że szukam funkcji skumulowanej (cdf pod Scipy). Problem polega na tym, że nie mogę wymyślić, jak to zrobić, stosując tylko średnią i odchylenie standardowe w skali 0-1 (tzn. Zwrócona odpowiedź powinna wynosić od 0-1). Nie jestem również pewien, która metoda z dist, powinienem używać, aby uzyskać odpowiedź. Próbowałem czytać dokumentację i przeglądać SO, ale odpowiednie pytania (takie jak this i this) nie zawierały odpowiedzi, których szukałem.Jak uzyskać dystrybucję logarytmiczną w Pythonie za pomocą Mu i Sigmy?
Oto przykład kodu, z którym pracuję. Dzięki.
from scipy.stats import lognorm
stddev = 0.859455801705594
mean = 0.418749176686875
total = 37
dist = lognorm.cdf(total,mean,stddev)
UPDATE:
Więc po trochę pracy i trochę badań, mam trochę dalej. Ale wciąż dostaję złą odpowiedź. Nowy kod znajduje się poniżej. Według R i Excela wynik powinien wynosić .7434, ale to wyraźnie nie dzieje się. Czy brakuje mi luki logicznej?
dist = lognorm([1.744],loc=2.0785)
dist.cdf(25) # yields=0.96374596, expected=0.7434
UPDATE 2: Praca realizacja lognorm który daje poprawny 0,7434 wynik.
def lognorm(self,x,mu=0,sigma=1):
a = (math.log(x) - mu)/math.sqrt(2*sigma**2)
p = 0.5 + 0.5*math.erf(a)
return p
lognorm(25,1.744,2.0785)
> 0.7434
mógłby pan wyjaśnić, co rozumiesz przez „w wyniku dystrybucji”? – joaquin
@joaquin Dodałem próbkę kodu, która pokazuje, co mam i czego oczekuję. –
@EricLubow: Myślę, że możesz być nieporozumieniem, co oznacza średnia i stddev w tym przypadku.Dla rozkładu lognormalnego są to średnie i stddev * logarytmu zmiennej *. Jeśli zmienna jest rozkładana lognormalnie, oznacza to, że logarytm zmiennej jest normalnie dystrybuowany. – talonmies