การกระจายที่มีช่วงจาก 0 ถึง 1 และสูงสุดระหว่างพวกเขา?


13

มีการกระจายหรือฉันสามารถทำงานจากการกระจายอื่นเพื่อสร้างการกระจายเช่นนั้นในภาพด้านล่าง (ขอโทษสำหรับภาพวาดที่ไม่ดี)?

การกระจาย โดยที่ฉันให้หมายเลข (0.2, 0.5 และ 0.9 ในตัวอย่าง) สำหรับตำแหน่งที่จุดสูงสุดควรเป็นและส่วนเบี่ยงเบนมาตรฐาน (ซิกม่า) ที่ทำให้ฟังก์ชันกว้างขึ้นหรือกว้างน้อยลง

PS: เมื่อจำนวนที่กำหนดคือ 0.5 การแจกแจงเป็นการกระจายตัวแบบปกติ



19
โปรดทราบว่า 0.5 กรณีจะไม่ใช่การแจกแจงแบบปกติเนื่องจากช่วงของการแจกแจงแบบปกติคือ±

8
หากคุณถ่ายภาพของคุณอย่างแท้จริงแล้วจะไม่มีการแจกแจงที่มีลักษณะเช่นนั้นเนื่องจากพื้นที่ในทุกกรณีมีค่าน้อยกว่า 1 อย่างเคร่งครัดหากคุณกำลังจะ จำกัด การสนับสนุนไว้[0,1]คุณก็ไม่สามารถ จำกัด ช่วงของ pdf ได้[0,1]เช่นกัน (นอกเหนือจากในกรณีเครื่องแบบเล็กน้อย)
John Coleman

คำตอบ:


29

ทางเลือกที่เป็นไปได้ทางหนึ่งคือการแจกแจงแบบเบต้าแต่การคำนวณซ้ำในแง่ของค่าเฉลี่ยและความแม่นยำϕนั่นคือ "สำหรับค่าคงที่μค่าของ larger ที่ใหญ่กว่าค่าของϕ , ความแปรปรวนของy ที่เล็กกว่า" Neto, 2004) ฟังก์ชันความหนาแน่นของความน่าจะเป็นถูกสร้างขึ้นโดยแทนที่พารามิเตอร์มาตรฐานของการแจกแจงแบบเบต้าด้วยα = ϕ μและβ = ϕ ( 1 - μ )μϕμϕyα=ϕμβ=ϕ(1μ)

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

เมื่อและV a r ( Y ) = μ ( 1 - μ )E(Y)=μ φVar(Y)=μ(1μ)1+ϕ

อีกวิธีหนึ่งคือคุณสามารถคำนวณที่เหมาะสมและβพารามิเตอร์ที่จะนำไปสู่การกระจายเบต้ากับที่กำหนดไว้ล่วงหน้าแปรปรวนค่าเฉลี่ยและ อย่างไรก็ตามโปรดสังเกตว่ามีข้อ จำกัด เกี่ยวกับค่าความแปรปรวนที่เป็นไปได้ที่ถูกต้องสำหรับการแจกแจงแบบเบต้า สำหรับฉันเป็นการส่วนตัวการตั้งค่าโดยใช้ความแม่นยำนั้นง่ายกว่า (คิดถึงxαβสัดส่วนในการแจกแจงแบบ Xแบบทวินามโดยมีขนาดตัวอย่าง ϕและความน่าจะเป็นที่จะประสบความสำเร็จ μ )x/ϕ Xϕμ

การกระจาย Kumaraswamyเป็นอีกการกระจายอย่างต่อเนื่องล้อมรอบ แต่มันก็ยากที่จะ re-parametrize ดังกล่าวข้างต้น

ดังที่คนอื่นสังเกตว่ามันไม่ปกติเนื่องจากการแจกแจงแบบปกติมีการสนับสนุนดังนั้นที่ดีที่สุดคุณสามารถใช้ปกติที่ถูกตัดทอนเป็นการประมาณ(,)

Ferrari, S. , & Cribari-Neto, F. (2004) การถดถอยเบต้าสำหรับอัตราการสร้างแบบจำลองและสัดส่วน วารสารสถิติประยุกต์, 31 (7), 799-815


ฉันชอบคำตอบของคุณฉันได้สร้างกราฟจากมัน ปัญหาเดียวที่ฉันมีคือฉันไม่สามารถควบคุมความกว้างได้ (ซิกม่าในการแจกแจงแบบปกติของเส้นโค้ง) ฉันต้องการสูตรที่คำนวณค่า phi เมื่อได้รับค่า sigma ที่แน่นอน ปัญหาที่ฉันมีก็คือเส้นโค้งจะกลับหัวกลับหางหรือมีรูปร่างแปลก ๆ นั่นคือพฤติกรรมที่ฉันต้องการหลีกเลี่ยง
Stan Callewaert

ในระยะสั้น: ฉันต้องการที่จะให้ mu และ sigma กับฟังก์ชั่นแล้วได้รับการกระจายที่กว้างเมื่อ sigma มีขนาดใหญ่และผอม (แต่ไม่พลิกคว่ำหรือแสดงพฤติกรรมแปลก ๆ ) เมื่อ sigma มีขนาดเล็ก .
Stan Callewaert

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

2
อีกสิ่งที่จะกล่าวถึงคือคุณสามารถใช้ส่วนผสมของการแจกแจงแบบเบต้าถ้าการกระจายเบต้าแบบเดี่ยวนั้นไม่ยืดหยุ่นเพียงพอ
Björn

@ knrumsey ฉันใช้สูตรเดียวกันสำหรับ phi ปัญหาเดียวที่ฉันมีคือเมื่อ sigma เป็นจำนวนมาก phi จะกลายเป็นจำนวนลบซึ่งหมายความว่าอัลฟาก็จะกลายเป็นจำนวนลบ อัลฟ่าไม่สามารถลบได้ตาม Wikipedia มีวิธีแก้ปัญหาสำหรับเรื่องนี้หรือไม่?
Stan Callewaert

5

α(α+β)


1
ดูน่าสนใจมาก แต่ฉันจะแปลงตัวเลขของฉัน (ค่าสูงสุด) และซิกม่าเป็นค่าอัลฟ่าและเบต้าได้อย่างไร
Stan Callewaert

1
แค่มองมันบนวิกิพีเดีย ... มันคือการแจกแจงสองพารามิเตอร์ ระหว่างทั้งสองพวกเขาสามารถปรับค่าสูงสุดของคุณ (ที่มีอิสระในระดับพิเศษ)

5

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

exp(x)1+exp(x)

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

yxF()


0

หากใครบางคนสนใจวิธีการแก้ปัญหาที่ฉันใช้ใน Python เพื่อสร้างค่าสุ่มใกล้กับตัวเลขที่กำหนดเป็นพารามิเตอร์ โซลูชันของฉันมีอยู่สี่ขั้นตอน แต่ละขั้นตอนโอกาสที่จำนวนที่สร้างขึ้นจะใกล้เคียงกับจำนวนที่กำหนดมากขึ้น

ฉันรู้ว่าวิธีแก้ปัญหาไม่สวยงามเท่าการใช้การแจกแจงแบบเดียว แต่นี่เป็นวิธีที่ฉันสามารถแก้ไขปัญหาของฉันได้:

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

ผลเมื่อรันโค้ดนี้จะแสดงในภาพด้านล่าง: กราฟ


0

คุณอาจต้องการดู 'เส้นโค้ง Johnson' ดู NL Johnson: ระบบของเส้นโค้งความถี่ที่สร้างโดยวิธีการแปล 2492 Biometrika เล่ม 36 หน้า 149-176 R มีการสนับสนุนสำหรับการปรับให้เข้ากับเส้นโค้งโดยพลการ โดยเฉพาะเส้นโค้ง SB (ล้อมรอบ) ของเขาอาจมีประโยชน์

เป็นเวลา 40 ปีแล้วที่ฉันใช้มัน แต่มันมีประโยชน์มากสำหรับฉันในเวลานั้นและฉันคิดว่าพวกเขาจะทำงานให้คุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.