Pemodelan Bayesian tentang waktu tunggu kereta: Definisi model

12

Ini adalah upaya pertama saya untuk seseorang yang datang dari kamp frequentist untuk melakukan analisis data Bayesian. Saya membaca sejumlah tutorial dan beberapa bab dari Bayesian Data Analysis oleh A. Gelman.

Sebagai contoh analisis data pertama yang kurang lebih independen saya memilih adalah kereta menunggu waktu. Saya bertanya pada diri sendiri: apa distribusi waktu tunggu?

Dataset disediakan di blog dan dianalisis sedikit berbeda dan di luar PyMC.

Tujuan saya adalah memperkirakan waktu tunggu kereta yang diharapkan diberikan 19 entri data.

Model yang saya buat adalah sebagai berikut:

μN(μ^,σ^)

σ|N(0,σ^)|

λΓ(μ,σ)

ρPoisson(λ)

di mana berarti data dan adalah standar deviasi data dikalikan dengan 1000.μ^σ^

Saya dimodelkan waktu tunggu yang diharapkan sebagai menggunakan distribusi Poisson. Parameter laju untuk distribusi ini dimodelkan menggunakan distribusi Gamma karena merupakan distribusi konjugat ke distribusi Poisson. Hyper-priors dan dimodelkan masing-masing dengan distribusi Normal dan Setengah-Normal. Standar deviasi dibuat seluas mungkin untuk menjadi non-komital mungkin ..ρμσσ

Saya punya banyak pertanyaan

  • Apakah model ini masuk akal untuk tugas tersebut (beberapa cara untuk membuat model?)?
  • Apakah saya membuat kesalahan pemula?
  • Bisakah modelnya disederhanakan (saya cenderung mempersulit hal-hal sederhana)?
  • Bagaimana saya bisa memverifikasi jika posterior untuk parameter tingkat ( ) benar-benar cocok dengan data?ρ
  • Bagaimana saya bisa menggambar beberapa sampel dari distribusi Poisson yang dipasang untuk melihat sampel?

Posisi setelah 5000 langkah Metropolis terlihat seperti ini: Lacak plot

Saya dapat memposting kode sumber juga. Pada tahap pemasangan model saya melakukan langkah-langkah untuk parameter dan menggunakan NUTS. Kemudian pada langkah kedua saya melakukan Metropolis untuk parameter rate . Akhirnya saya memplot jejak menggunakan alat inbuilt.σ ρμσρ

Saya akan sangat berterima kasih atas komentar dan komentar yang memungkinkan saya memahami pemrograman yang lebih probabilistik. Mungkin ada contoh lebih klasik yang layak untuk dicoba?


Berikut adalah kode yang saya tulis dalam Python menggunakan PyMC3. File data dapat ditemukan di sini .

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()
Vladislavs Dovgalecs
sumber
Sebuah pertanyaan yang bagus, tetapi saya sarankan Anda mengedit judul: Pertanyaan Anda agak agnostik pada perangkat lunak, dan sepertinya lebih banyak tentang mengevaluasi model. Anda bahkan mungkin ingin mengirisnya menjadi pertanyaan yang terpisah dan terkait.
Sean Easter
@SeanEaster Terima kasih! Ini sebenarnya terkait perangkat lunak, meskipun saya setuju tentang judulnya. Saya siap untuk menambahkan kode sumber atas permintaan karena itu menceritakan kisah yang lebih lengkap tetapi mungkin juga membuat pertanyaan lebih besar dan berpotensi lebih membingungkan. Jangan ragu untuk mengedit judul karena tidak ada yang lebih generik muncul di pikiran saya.
Vladislavs Dovgalecs
Saya setuju. Saya pikir ini benar-benar dua pertanyaan. Saya mencoba menjawab pertanyaan pemodelan.
jaradniemi

Jawaban:

4

Saya akan memberi tahu Anda terlebih dahulu apa yang akan saya lakukan dan kemudian saya akan menjawab pertanyaan spesifik yang Anda miliki.

Apa yang akan saya lakukan (paling tidak pada awalnya)

Inilah yang saya kumpulkan dari pos Anda, Anda memiliki waktu tunggu pelatihan untuk 19 pengamatan dan Anda tertarik untuk mengambil kesimpulan tentang waktu tunggu yang diharapkan.

Wii=1,,19iWiR+

Ada beberapa asumsi model yang mungkin yang dapat digunakan dan dengan 19 pengamatan mungkin sulit untuk menentukan model mana yang lebih masuk akal. Beberapa contoh adalah log-normal, gamma, eksponensial, Weibull.

Yi=log(Wi)

YiindN(μ,σ2).
μ|σ2N(m,σ2C)σ2sayaG(Sebuah,b)
sayaGhal(μ,σ2)1/σ2

E[Wsaya]=eμ+σ/2μσ2eμ+σ/2

Menjawab pertanyaan Anda

  • Apakah model ini masuk akal untuk tugas tersebut (beberapa cara untuk membuat model?)?

λλ

  • Apakah saya membuat kesalahan pemula?

Lihat komentar sebelumnya.

Juga, itu akan sangat membantu jika matematika dan kode Anda setuju, misalnya di mana λ

Prioritas Anda tidak harus bergantung pada data.

  • Bisakah modelnya disederhanakan (saya cenderung mempersulit hal-hal sederhana)?

Ya dan seharusnya. Lihat pendekatan pemodelan saya.

  • ρ ) benar-benar cocok dengan data?

ρλ

  • Bagaimana saya bisa menggambar beberapa sampel dari distribusi Poisson yang dipasang untuk melihat sampel?

Saya yakin Anda menginginkan distribusi prediksi posterior. Untuk setiap iterasi di MCMC Anda, Anda memasukkan nilai parameter untuk iterasi itu dan mengambil sampel.

jaradniemi
sumber
Terima kasih banyak! Saya membaca jawaban Anda agak cepat. Saya akan memerlukan waktu untuk mencernanya, menemukan referensi untuk beberapa distribusi dan konsep dan mencoba mengimplementasikannya di PyMC. Btw, saya baru saja menambahkan kode Python untuk percobaan saya.
Vladislavs Dovgalecs