列車待ち時間のベイズモデリング:モデル定義


12

これは、常連のキャンプから来た誰かがベイジアンデータ分析を行うための私の最初の試みです。A. GelmanによるBayesian Data Analysisからいくつかのチュートリアルといくつかの章を読みました。

最初に多かれ少なかれ独立したデータ分析の例として選択したのは、列車の待ち時間です。私は自分自身に尋ねました:待ち時間の分布は何ですか?

データセットはブログで提供され、PyMCの外部とは少し異なって分析されました。

私の目標は、これらの19のデータエントリから、予想される列車の待ち時間を見積もることです。

私が作成したモデルは次のとおりです。

μN(μ^,σ^)

σ|N(0,σ^)|

λΓ(μ,σ)

ρPoisson(λ)

どこμは、データが意味され、σは 1000年を掛けたデータの標準偏差です。μ^σ^

ρμσσ

たくさん質問があります

  • このモデルはタスクに適していますか(モデルを作成する方法はいくつかありますか?)?
  • 私は初心者の間違いをしましたか?
  • モデルを簡略化できますか(私は単純なものを複雑にする傾向があります)?
  • ρ
  • フィッティングされたポアソン分布からいくつかのサンプルを描画して、サンプルを表示するにはどうすればよいですか?

5000メトロポリスのステップの後の事後は、次のようになります。 トレースプロット

μσρ

より確率的なプログラミングを理解するのに役立つコメントやコメントに感謝します。試してみる価値のあるもっと古典的な例があるかもしれませんか?


これが、PyMC3を使用してPythonで記述したコードです。データファイルはここにあります

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

同意する。これらは本当に2つの質問だと思います。モデリングの質問に答えようとしました。
jaradniemi

回答:


4

最初に私が何をするかをお話しし、それからあなたの具体的な質問に答えます。

私が何をするか(少なくとも最初は)

これが私があなたの投稿から集めたものです、あなたは19回の観察のためのトレーニング待ち時間があり、予想される待ち時間についての推論に興味があります。

Wii=1,,19iWiR+

使用できるモデルの想定はいくつかありますが、19の観察結果では、どちらのモデルがより合理的かを判断するのが難しい場合があります。いくつかの例は、対数正規、ガンマ、指数、ワイブルです。

Yi=log(Wi)

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

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

あなたの質問に答える

  • このモデルはタスクに適していますか(モデルを作成する方法はいくつかありますか?)?

λλ

  • 私は初心者の間違いをしましたか?

前のコメントを参照してください。

λ

あなたの事前はデータに依存するべきではありません。

  • モデルを簡略化できますか(私は単純なものを複雑にする傾向があります)?

はい、そうです。私のモデリングアプローチを参照してください。

  • ρ

ρλ

  • フィッティングされたポアソン分布からいくつかのサンプルを描画して、サンプルを表示するにはどうすればよいですか?

事後予測分布が必要だと思います。MCMCの各反復について、その反復のパラメーター値を接続し、サンプルを取得します。


トンありがとう!私はあなたの答えをかなり早く読みました。私はそれを消化し、いくつかのディストリビューションとコンセプトのリファレンスを見つけて、それをPyMCに実装しようとする時間が必要です。ところで、私は実験用のPythonコードを追加しました。
Vladislavs Dovgalecs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.