0 ile 1 arasında değişen ve aralarında tepe noktası olan dağılım?


13

Bir dağıtım var mı veya aşağıdaki resimde olduğu gibi başka bir dağıtımdan çalışabilir miyim (kötü çizimler için özür dilerim)?

dağıtım burada zirvenin olması gereken yer için bir sayı (örneklerde 0.2, 0.5 ve 0.9) ve işlevi daha geniş veya daha az geniş yapan standart bir sapma (sigma) veriyorum.

Not: Verilen sayı 0,5 olduğunda dağılım normal dağılımdır.



19
normal dağılım aralığı olduğundan 0,5 vakasının normal dağılım olmayacağını unutmayın±

8
Eğer fotoğraf çekmek ise tam anlamıyla o zaman hiçbir dağılımları vardır size destek kısıtlamak yapacaksanız her durumda bölge kesinlikle daha az 1'den beri böyle bakmak [0,1]o zaman için pdf aralığını kısıtlamak olamaz [0,1]yanı (önemsiz tek tip dava dışında).
John Coleman

Yanıtlar:


29

Olası bir seçenek beta dağılımıdır , ancak ortalama ve kesinlik açısından yeniden parametrelendirilir , yani "sabit için değeri ne kadar büyük olursa , sapması o kadar küçüktür " (Ferrari'ye bakın) ve Cribari-Neto, 2004). Olasılık yoğunluğu fonksiyonu, beta dağıtımının standart parametreleri veϕ μ ϕ y α = ϕ μ β = ϕ ( 1 - μ )μϕμϕyα=ϕμβ=ϕ(1μ)

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

burada ve .V a r ( Y ) = μ ( 1 - μ )E(Y)=μVar(Y)=μ(1μ)1+ϕ

Alternatif olarak, önceden tanımlanmış ortalama ve varyansla beta dağılımına yol açacak uygun ve parametrelerini hesaplayabilirsiniz . Ancak, beta dağıtımı için geçerli olan olası varyans değerleri üzerinde kısıtlamalar olduğuna dikkat edin. Şahsen benim için, kesinlik kullanarak parametreleştirme daha sezgiseldir ( boyutta dağıtılmış oranlarını , örnek büyüklüğü ve başarı olasılığı ).β xαβX ϕ μx/ϕ Xϕμ

Kumaraswamy dağılımı bir başka sınırlı sürekli dağılımdır, ancak yukarıdaki gibi yeniden parametreleştirmek daha zor olacaktır.

Diğerlerinin fark ettiği gibi, normal dağılım desteğine sahip olduğundan normal değildir , bu yüzden en iyi şekilde kesilmiş normali yaklaşık olarak kullanabilirsiniz .(,)

Ferrari, S. ve Cribari-Neto, F. (2004). Modelleme oranları ve oranları için beta regresyonu. Uygulamalı İstatistik Dergisi, 31 (7), 799-815.


Cevabınızı seviyorum, ondan bazı grafikler yaptım. Sahip olduğum tek sorun genişliği kontrol edemiyorum (eğrinin normal dağılımında sigma). Belirli bir sigma değeri verildiğinde phi değerini hesaplayan bir formül istiyorum. Sahip olduğum sorun, eğrinin baş aşağı dönmesi veya garip bir şekil alması, kaçınmak istediğim davranış.
Stan Callewaert

Kısacası: işleve bir mu ve bir sigma vermek ve sonra sigma büyük olduğunda ve ince olduğunda (ancak baş aşağı dönmeyen veya garip davranışlar gösteren) geniş bir dağıtım elde etmek istiyorum. .
Stan Callewaert

1
Kesinlik ve standart sapma ilişkilidir: . Ayrıca, Beta Dağıtım zaman (will garip davranış göstermez) tek-modlu ve 1'den büyük Bu araçlar olduğu zaman aralığıdır , sen seçmeliyim veya eşdeğer . a p μ = 1 / 2 φ > 2 σ < 0.707ϕ=μ(1μ)/σ21αβμ=1/2ϕ>2σ<0.707
knrumsey

2
Bahsedilmesi gereken başka bir şey, tek bir beta dağılımı yeterince esnek değilse, elbette beta dağılımlarının karışımlarını kullanabileceğinizdir.
Björn

@knrumsey Phi için aynı formülü kullandım, sahip olduğum tek sorun, sigma büyük bir sayı olduğunda, phi'nin negatif bir sayı olması, alfa'nın da negatif bir sayı olması anlamına geliyor. Wikipedia'ya göre alfa negatif olamaz. Bunun için bir çözüm var mı?
Stan Callewaert

5

Beta dağıtımını deneyin, aralığı 0 ile 1 arasındadır. Bunu henüz denediniz mi? Ortalama değerα(α+β)


1
Çok ilginç görünüyor, ancak numaramı (tepe değeri) ve sigmamı alfa ve beta değerlerine nasıl dönüştürebilirim?
Stan Callewaert

1
Sadece wikipedia'da ara ... iki parametreli bir dağıtım. İkisi arasında en yüksek değerinize ayarlayabilirler (ekstra bir özgürlük derecesi ile).

5

Bu tür bir değişken yaratmak için dönüştüm. Tüm gerçek satırda (normal gibi) desteği olan rastgele bir değişken olan x ile başlayın ve sonra yeni bir rastgele değişken . Presto, birim aralığında dağıtılmış rastgele bir değişkeniniz var. Bu özel dönüşüm arttığından, ortalama / medyan / x modunu hareket ettirerek ortalama / medyan / y modunu hareket ettirebilirsiniz. daha dağınık hale getirmek mi istiyorsunuz (çeyrekler arası aralık açısından)? Sadece daha dağınık hale getirin . yxy=exp(x)1+exp(x)yx

işlevi hakkında özel bir şey yok . Herhangi bir toplu dağıtım işlevi, birim aralığında tanımlanan yeni bir rastgele değişken üretmek için çalışır.exp(x)1+exp(x)

Böylece, herhangi bir cdf'ye ( ) takarak dönüştürülen herhangi bir rastgele değişken, istediğiniz şeyi yapar --- dönüştürülmemiş rastgele değişkenin parametrelerini ayarlayarak özelliklerini ayarlayabileceğiniz birim aralığında dağıtılmış bir rv yapar sezgisel bir şekilde. kesinlikle monotonik olduğu sürece , dönüştürülmüş değişken, çeşitli şekillerde dönüştürülmemiş olana benzeyecektir. Örneğin, birim aralığında bir tek değişkenli rastgele değişken olmasını istiyorsunuz . kesinlikle arttığı ve unimodal olduğu sürece , bunu elde edersiniz. Medyan / ortalama / modunu artırılması medyan / ortalama / modunu artırır . Çeyrekler arası aralığın arttırılmasıF ( ) y F ( ) x x y x yy=F(x)F()yF()xxyx (25. yüzdelik dilimi aşağı ve 75. yüzdelik dilimi yukarı hareket ettirerek) çeyrekler arası aralığını artırır . Sıkı monotonluk güzel bir şeydir.y

Ortalama ve sd hesaplama formülü belki de kolay bulmak için, ama en neyi Monte Carlo simülasyonları için olduğunu. Çizdikleriniz gibi nispeten güzel dağılımlar elde etmek için, ve 'nin gerçek hatta destekle sürekli rasgele değişkenler (sürekli rasgele değişkenlerin cdf'si olmasını istersiniz .x F ( )yxF()


0

Birisi çözümle ilgileniyorsa, parametre olarak verilen sayıya yakın rastgele bir değer üretmek için Python'da kullandım. Benim çözümüm dört aşamadan oluşuyor. Her aşamada, üretilen sayının verilen sayıya daha yakın olma şansı daha fazladır.

Çözümün tek bir dağıtım kullanmak kadar güzel olmadığını biliyorum, ancak sorunumu çözebildim:

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()

kodun yürütülmesi sonucu aşağıdaki resimde gösterilmektedir: grafik


0

'Johnson eğrileri'ne bir göz atmak isteyebilirsiniz. Çeviri yöntemleri ile üretilen NL Johnson: Frekans Eğrileri Sistemleri bölümüne bakınız. 1949 Biometrika Cilt 36 s. 149-176. R, bunları keyfi eğrilere uydurma desteğine sahiptir. Özellikle SB (sınırlı) eğrileri yararlı olabilir.

Onları kullandığımdan bu yana 40 yıl geçti, ama o zaman benim için çok yararlıydılar ve bence sizin için çalışacaklar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.