Dystrybucja, która ma zakres od 0 do 1 i ze szczytem między nimi?


13

Czy istnieje rozkład lub czy mogę pracować z innego rozkładu, aby utworzyć taki rozkład na poniższym obrazku (przepraszam za złe rysunki)?

dystrybucja gdzie podaję liczbę (0,2, 0,5 i 0,9 w przykładach) dla tego, gdzie powinien być pik oraz odchylenie standardowe (sigma), które powoduje, że funkcja jest szersza lub mniej szeroka.

PS: Gdy podana liczba wynosi 0,5, rozkład jest rozkładem normalnym.



19
zauważ, że przypadek 0,5 nie byłby rozkładem normalnym, ponieważ zakres rozkładu normalnego to±

8
Jeśli wziąć swoje zdjęcia dosłownie potem nie istnieją dystrybucje, które wyglądają tak, ponieważ obszar we wszystkich przypadkach są ściśle mniej niż 1. Jeśli masz zamiar ograniczyć wsparcie [0,1]to nie można ograniczyć zakres do pdf [0,1], jak również (inne niż w trywialnym mundurze).
John Coleman

Odpowiedzi:


29

Jednym możliwym wyborem jest rozkład beta , ale ponownie sparametryzowany pod względem średniej i precyzji ϕ , to znaczy: „dla ustalonego μ , im większa wartość ϕ , tym mniejsza wariancja y ” (patrz Ferrari i Cribari- Neto, 2004). Funkcja gęstości prawdopodobieństwa jest konstruowana przez zastąpienie standardowych parametrów rozkładu beta przez α = ϕ μ i β = ϕ ( 1 - μ )μϕμϕyα=ϕμβ=ϕ(1μ)

f(y)=1B(ϕμ,ϕ(1μ))yϕμ1(1y)ϕ(1μ)1

gdzie i V a r ( Y ) = μ ( 1 - μ )E(Y)=μ .Var(Y)=μ(1μ)1+ϕ

Alternatywnie można obliczyć odpowiednie parametry i β , które doprowadziłyby do rozkładu beta z wcześniej zdefiniowaną średnią i wariancją. Zauważ jednak, że istnieją ograniczenia dotyczące możliwych wartości wariancji, które obowiązują dla rozkładu beta. Dla mnie osobiście parametryzacja za pomocą precyzji jest bardziej intuicyjna (pomyśl o xαβ proporcje wrozkładzie dwumianowym X , przy wielkości próby ϕ i prawdopodobieństwie sukcesu μ ).x/ϕ Xϕμ

Rozkład Kumaraswamy jest kolejnym ograniczonym rozkładem ciągłym, ale trudniej byłoby ponownie sparametryzować jak powyżej.

Jak zauważyli inni, nie jest to normalne, ponieważ rozkład normalny ma obsługę , więc w najlepszym razie można użyć obciętej wartości normalnej jako przybliżenia.(,)

Ferrari, S., i Cribari-Neto, F. (2004). Regresja beta dla stawek i proporcji modelowania. Journal of Applied Statistics, 31 (7), 799-815.


Podoba mi się twoja odpowiedź, stworzyłem z niej kilka wykresów. Jedynym problemem, jaki mam, jest to, że nie mogę kontrolować szerokości (sigma w normalnym rozkładzie krzywej). Chciałbym mieć wzór, który oblicza wartość phi, gdy podana jest pewna wartość sigma. Problem, który mam, polega na tym, że krzywa obraca się do góry nogami lub przybiera dziwny kształt, takiego zachowania chcę uniknąć.
Stan Callewaert

W skrócie: chciałbym nadać mu i sigma funkcji, a następnie uzyskać rozkład, który jest szeroki, gdy sigma jest duża i jest cienka (ale nie odwraca się do góry nogami lub wykazuje dziwne zachowanie), gdy sigma jest mała .
Stan Callewaert

1
ϕ=μ(1μ)/σ21αβμ=1/2ϕ>2σ<0.707

2
Inną rzeczą, o której należy wspomnieć, jest to, że można oczywiście użyć mieszanin dystrybucji beta, jeśli pojedyncza dystrybucja beta nie jest wystarczająco elastyczna.
Björn

@knrumsey Użyłem tej samej formuły dla phi, jedynym problemem, jaki wydaje mi się mieć, jest to, że gdy sigma jest dużą liczbą, phi staje się liczbą ujemną, co oznacza, że ​​alfa również staje się liczbą ujemną. Według Wikipedii alfa nie może być ujemne. Czy jest na to jakieś rozwiązanie?
Stan Callewaert

5

α(α+β)


1
Wygląda bardzo interesująco, ale jak mogę przekonwertować moją liczbę (wartość szczytową) i moją sigmę na wartości alfa i beta?
Stan Callewaert

1
Spójrz na wikipedię ... to rozkład dwuparametrowy. Pomiędzy nimi mogą dostosować się do Twojej wartości szczytowej (z dodatkowym stopniem swobody).

5

y=exp(x)1+exp(x)yx

exp(x)1+exp(x)

y=F(x)F()yF()xxyxy

yxF()


0

Jeśli ktoś jest zainteresowany rozwiązaniem zastosowałem w Pythonie do generowania losowej wartości zbliżonej do podanej liczby jako parametru. Moje rozwiązanie składa się z czterech etapów. Na każdym etapie szansa, że ​​wygenerowana liczba jest bliższa podanej liczbie, jest większa.

Wiem, że rozwiązanie nie jest tak piękne, jak użycie jednej dystrybucji, ale w ten sposób udało mi się rozwiązać mój problem:

number_factory.py:

import random
import numpy as np

class NumberFactory:
    def __init__(self):
        self.functions = [self.__linear, self.__exponential_point_four, self.__exponential_point_three, self.__exponential_point_twenty_five]  
        self.stage = 0

    def next_stage(self):
        self.stage += 1

    def get_mutated_number(self, number):
         # True if the generated number will be higher than the given number
         # False if the generated number will be lower than the given number
        add = bool(np.random.choice([0,1], p=[number, 1-number]))

        # Generate a number between 0 and 1 that will be used
        # to multiply the new number by which the number parameter will be substracted or added
        # The bigger the stage number (0-3) the more change that the mutated number is close to the number parameter
        multiply_number_seed = random.uniform(0, 1)
        multiply_number = self.functions[self.stage](multiply_number_seed)

        if (add):
            return number+((1-number)*multiply_number)
        else:
            return number-(number*multiply_number)

    def __linear(self, x):
        return -x+1

    def __exponential_point_four(self, x):
        return 0.4*x**2 - 1.4*x + 1

    def __exponential_point_three(self, x):
        return 0.8*x**2 - 1.8*x + 1

    def __exponential_point_twenty_five(self, x):
        return x**2 - 2*x + 1

    def get_stage(self):
        return self.stage

main.py:

import matplotlib.pyplot as plt
import numpy as np

factory = NumberFactory()
numbers = []

factory.next_stage()
factory.next_stage()
factory.next_stage()

for _ in range(100000):
    numbers.append(factory.get_mutated_number(0.3))

bins = 100

plt.hist(numbers, bins, normed=True)
plt.plot(1, np.ones_like(bins))
plt.show()

wynik podczas wykonywania tego kodu pokazano na poniższym obrazku: Wykres


0

Możesz rzucić okiem na „Krzywe Johnsona”. Zobacz NL Johnson: Systemy krzywych częstotliwości generowane metodami tłumaczenia. 1949 Biometrika Tom 36 str. 149-176. R ma wsparcie dla dopasowania ich do dowolnych krzywych. W szczególności przydatne mogą być jego krzywe SB (ograniczone).

Minęło 40 lat, odkąd ich użyłem, ale były one dla mnie bardzo przydatne i myślę, że będą dla ciebie działać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.