การสร้างแบบจำลองแบบเบส์ของเวลารอรถไฟ: การกำหนดโมเดล


12

นี่เป็นความพยายามครั้งแรกของฉันสำหรับใครบางคนที่มาจากค่ายบ่อย ๆ เพื่อทำการวิเคราะห์ข้อมูลแบบเบย์ ฉันอ่านบทช่วยสอนจำนวนหนึ่งและบทไม่กี่บทจากการวิเคราะห์ข้อมูลแบบเบย์โดย A. Gelman

เนื่องจากตัวอย่างการวิเคราะห์ข้อมูลอิสระมากขึ้นหรือน้อยลงอย่างแรกที่ฉันเลือกคือเวลาในการรอรถไฟ ฉันถามตัวเองว่าอะไรคือการกระจายเวลารอคอย

ชุดข้อมูลนั้นมีอยู่ในบล็อกและได้รับการวิเคราะห์แตกต่างกันเล็กน้อยและนอก PyMC

เป้าหมายของฉันคือการประเมินเวลารอรถไฟที่คาดว่าจะได้รับจากข้อมูล 19 รายการ

โมเดลที่ฉันสร้างขึ้นมีดังต่อไปนี้:

μN(μ^,σ^)

σ|N(0,σ^)|

λΓ(μ,σ)

ρPoisson(λ)

โดยที่คือค่าเฉลี่ยของข้อมูลและคือส่วนเบี่ยงเบนมาตรฐานของข้อมูลคูณด้วย 1,000μ^σ^

ฉันจำลองเวลารอคอยที่คาดว่าจะเป็นโดยใช้การแจกแจงปัวซอง พารามิเตอร์ rate สำหรับการแจกแจงนี้ถูกสร้างแบบจำลองโดยใช้การแจกแจงแกมม่าเนื่องจากเป็นการเชื่อมต่อแบบคอนจูเกตกับการแจกแจงแบบปัวซอง ไฮเปอร์ - ไพรเออร์และถูกสร้างแบบจำลองด้วยการแจกแจงแบบปกติและแบบครึ่งปกติ ค่าเบี่ยงเบนมาตรฐานถูกทำให้กว้างที่สุดเท่าที่จะเป็นได้ρμσσ

ฉันมีคำถามมากมาย

  • แบบจำลองนี้มีความเหมาะสมสำหรับงานหรือไม่
  • ฉันทำผิดพลาดเริ่มต้นหรือไม่?
  • แบบจำลองสามารถทำให้ง่ายขึ้นได้หรือไม่ (ฉันมักจะทำให้สิ่งต่าง ๆ ง่ายขึ้น)?
  • ฉันจะตรวจสอบได้อย่างไรว่าพารามิเตอร์ด้านหลัง ( ) เหมาะกับข้อมูลจริงหรือไม่?ρ
  • ฉันจะดึงตัวอย่างจากการกระจาย Poisson ที่ติดตั้งเพื่อดูตัวอย่างได้อย่างไร

ผู้ตกแต่งหลัง 5,000 ขั้นตอนของ Metropolis มีลักษณะดังนี้: ติดตามแปลง

ฉันสามารถโพสต์ซอร์สโค้ดได้เช่นกัน ในขั้นตอนการติดตั้งแบบจำลองฉันทำตามขั้นตอนสำหรับพารามิเตอร์และโดยใช้ NUTS จากนั้นในขั้นตอนที่สองที่ฉันทำ Metropolis อัตราพารามิเตอร์\ในที่สุดฉันลงจุดติดตามโดยใช้เครื่องมือ inbuiltμσρ

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


นี่คือรหัสที่ฉันเขียนใน Python โดยใช้ PyMC3 แฟ้มข้อมูลที่สามารถพบได้ที่นี่

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pymc3

from scipy import optimize

from pylab import figure, axes, title, show

from pymc3.distributions import Normal, HalfNormal, Poisson, Gamma, Exponential
from pymc3 import find_MAP
from pymc3 import Metropolis, NUTS, sample
from pymc3 import summary, traceplot

df = pd.read_csv( 'train_wait.csv' )

diff_mean = np.mean( df["diff"] )
diff_std = 1000*np.std( df["diff"] )

model = pymc3.Model()

with model:
    # unknown model parameters
    mu = Normal('mu',mu=diff_mean,sd=diff_std)
    sd = HalfNormal('sd',sd=diff_std)

    # unknown model parameter of interest
    rate = Gamma( 'rate', mu=mu, sd=sd )

    # observed
    diff = Poisson( 'diff', rate, observed=df["diff"] )

with model:
    step1 = NUTS([mu,sd])
    step2 = Metropolis([rate])
    trace = sample( 5000, step=[step1,step2] )

plt.figure()
traceplot(trace)
plt.savefig("rate.pdf")
plt.show()
plt.close()

เป็นคำถามที่ดี แต่ฉันขอแนะนำให้คุณแก้ไขชื่อเรื่อง: คำถามของคุณค่อนข้างไม่เชื่อในซอฟต์แวร์และดูเหมือนจะเป็นการประเมินโมเดลมากกว่า คุณอาจต้องการแบ่งมันเป็นคำถามแยกต่างหากที่เกี่ยวข้อง
ฌอนอีสเตอร์

@SeanEaster ขอบคุณ! จริงๆแล้วมันเกี่ยวข้องกับซอฟต์แวร์แม้ว่าฉันจะเห็นด้วยกับชื่อเรื่องก็ตาม ฉันพร้อมที่จะเพิ่มซอร์สโค้ดตามคำขอตามที่บอกเล่าเรื่องราวที่สมบูรณ์มากขึ้น แต่อาจทำให้คำถามมีขนาดใหญ่และสับสนมากขึ้น อย่าลังเลที่จะแก้ไขชื่อเพราะไม่มีอะไรในใจฉัน
Vladislavs Dovgalecs

ฉันเห็นด้วย. ฉันคิดว่านี่เป็นคำถามสองข้อจริงๆ ฉันพยายามตอบคำถามการสร้างแบบจำลอง
jaradniemi

คำตอบ:


4

ฉันจะบอกคุณก่อนสิ่งที่ฉันจะทำแล้วฉันจะตอบคำถามเฉพาะที่คุณมี

สิ่งที่ฉันจะทำ (อย่างน้อยตอนแรก)

นี่คือสิ่งที่ฉันรวบรวมจากโพสต์ของคุณคุณมีเวลารอการฝึกอบรมสำหรับการสังเกต 19 ครั้งและคุณสนใจที่จะอนุมานเกี่ยวกับเวลารอที่คาดหวัง

ฉันจะกำหนดสำหรับจะเป็นเวลารอรถไฟฉันฉันเห็นเหตุผลว่าสิ่งเหล่านี้ที่รอคอยเวลาที่ควรจะเป็นจำนวนเต็มดังนั้นฉันจะถือว่าพวกเขาเป็นปริมาณบวกอย่างต่อเนื่องไม่เช่น + ฉันถือว่าทุกเวลาที่รอคอยได้รับการปฏิบัติจริงWii=1,,19iWiR+

มีข้อสมมติฐานที่เป็นไปได้หลายประการที่สามารถนำมาใช้ได้และด้วยการสังเกต 19 ข้ออาจยากที่จะตัดสินว่าตัวแบบใดมีเหตุผลมากกว่า ตัวอย่างบางตัวอย่างคือล็อกแกมมาแกมมาเลขชี้กำลังวีเบล

สำหรับรุ่นแรกฉันขอแนะนำให้สร้างแบบจำลองจากนั้นให้ถือว่า ด้วยตัวเลือกนี้คุณจะสามารถเข้าถึงความมั่งคั่งของทฤษฏีปกติที่มีอยู่เช่นคอนจูเกตก่อน คอนจูเกตก่อนคือการแจกแจงแบบผกผัน - แกมม่าปกติคือ โดยที่คือ การกระจายแกมมาผกผัน อีกวิธีหนึ่งคุณสามารถใช้ค่าเริ่มต้นก่อนซึ่งในกรณีนี้ผู้หลังนั้นก็เป็นแบบกระจายผกผัน - แกมมาปกติด้วยYi=log(Wi)

YiindN(μ,σ2).
I G p ( μ , σ 2 ) 1 / σ 2
μ|σ2N(m,σ2C)σ2IG(a,b)
IGp(μ,σ2)1/σ2

เนื่องจากเราสามารถตอบคำถามเกี่ยวกับเวลารอคอยที่คาดไว้โดยการดึงตัวอย่างร่วมของและจากการแจกแจงแบบหลังซึ่งเป็นสิ่งที่ตรงกันข้าม -gamma distribution แล้วคำนวณสำหรับตัวอย่างแต่ละตัวอย่างเหล่านี้ ตัวอย่างนี้จากหลังสำหรับระยะเวลารอที่คาดหวัง μ σ 2 อีμ + σ / 2E[Wi]=eμ+σ/2μσ2eμ+σ/2

ตอบคำถามของคุณ

  • แบบจำลองนี้มีความเหมาะสมสำหรับงานหรือไม่

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

  • ฉันทำผิดพลาดเริ่มต้นหรือไม่?

ดูความคิดเห็นก่อนหน้า

นอกจากนี้ยังจะช่วยได้จริงหากคณิตศาสตร์และรหัสของคุณเห็นด้วยเช่นในผลลัพธ์ MCMC ของคุณอยู่ที่ไหน sd และอัตราในรหัสของคุณคืออะไร?λ

ก่อนหน้าของคุณไม่ควรขึ้นอยู่กับข้อมูล

  • แบบจำลองสามารถทำให้ง่ายขึ้นได้หรือไม่ (ฉันมักจะทำให้สิ่งต่าง ๆ ง่ายขึ้น)?

ใช่และควร ดูวิธีการสร้างแบบจำลองของฉัน

  • ฉันจะตรวจสอบได้อย่างไรว่าพารามิเตอร์ด้านหลัง ( ) เหมาะกับข้อมูลจริงหรือไม่?ρ

ไม่ควรเป็นข้อมูลของคุณใช่ไหม คุณหมายถึงหรือเปล่า สิ่งหนึ่งที่ต้องตรวจสอบคือการตรวจสอบให้แน่ใจว่าเวลารอเฉลี่ยตัวอย่างสมเหตุสมผลเมื่อเทียบกับการกระจายหลังของคุณในเวลารอเฉลี่ย ยกเว้นว่าคุณมีก่อนหน้านี้ที่แปลกประหลาดค่าเฉลี่ยตัวอย่างควรอยู่ใกล้กับจุดสูงสุดของการกระจายหลัง hteλρλ

  • ฉันจะดึงตัวอย่างจากการกระจาย Poisson ที่ติดตั้งเพื่อดูตัวอย่างได้อย่างไร

ฉันเชื่อว่าคุณต้องการการกระจายแบบทำนายล่วงหน้า สำหรับการวนซ้ำแต่ละครั้งใน MCMC ของคุณคุณเสียบค่าพารามิเตอร์สำหรับการทำซ้ำนั้นและนำตัวอย่าง


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