기차 대기 시간의 베이지안 모델링 : 모델 정의


12

이것은 잦은 야영지에서 누군가 베이지안 데이터 분석을하기위한 첫 시도입니다. A. Gelman의 Bayesian Data Analysis에서 여러 자습서와 몇 개의 장을 읽었습니다.

내가 선택한 첫 번째 다소 독립적 인 데이터 분석 예제는 기차 대기 시간입니다. 나는 나 자신에게 물었다 : 대기 시간의 분포는 무엇인가?

데이터 세트는 블로그 에서 제공되었으며 PyMC 외부와 약간 다르게 분석되었습니다.

저의 목표는 19 개의 데이터 항목이 제공된 예상 열차 대기 시간을 추정하는 것입니다.

내가 만든 모델은 다음과 같습니다.

μN(μ^,σ^)

σ|N(0,σ^)|

λΓ(μ,σ)

ρPoisson(λ)

여기서 는 데이터 평균이고 는 데이터 표준 편차에 1000을 곱한 값입니다.μ^σ^

Poisson 분포를 사용하여 예상 대기 시간을 로 모델링했습니다 . 이 분포에 대한 비율 모수는 포아송 분포에 대한 공액 분포이므로 감마 분포를 사용하여 모델링됩니다. 하이퍼-프라이어 및 는 각각 정규 및 반 정규 분포로 모델링되었습니다. 표준 편차 는 최대한 커밋되지 않도록 최대한 넓게 만들어졌습니다.ρμσσ

나는 많은 질문이있다

  • 이 모델이 작업에 합리적입니까 (여러 가지 가능한 모델링 방법)?
  • 초보자 실수를 했습니까?
  • 모델을 단순화 할 수 있습니까 (단순한 것을 복잡하게 만드는 경향이 있습니까)?
  • rate 매개 변수의 사후 ( )가 실제로 데이터에 적합한 지 어떻게 확인할 수 있습니까?ρ
  • 적합 Poisson 분포에서 일부 표본을 추출하여 표본을 보려면 어떻게해야합니까?

5000 Metropolis 단계 이후의 후부는 다음과 같습니다. 트레이스 플롯

소스 코드도 게시 할 수 있습니다. 모델 피팅 단계에서는 NUTS를 사용하여 매개 변수 및 대한 단계를 수행합니다 . 그런 다음 두 번째 단계에서 속도 매개 변수 대해 Metropolis를 수행합니다 . 마지막으로 내장 도구를 사용하여 추적을 플로팅합니다.μσρ

좀 더 확률적인 프로그래밍을 파악할 수있는 발언과 의견에 매우 감사하겠습니다. 실험 할 가치가있는 더 고전적인 예가있을 수 있습니까?


다음은 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()

좋은 질문이지만 제목을 편집하는 것이 좋습니다. 질문은 소프트웨어에 다소 영향을받지 않으며 모델 평가에 대한 것 같습니다. 별도의 관련 질문으로 분리 할 수도 있습니다.
Sean Easter

@SeanEaster 감사합니다! 제목에 동의하지만 실제로는 소프트웨어와 관련이 있습니다. 좀 더 완전한 이야기를 들려 주므로 요청에 따라 소스 코드를 추가 할 준비가되었지만 질문이 더 부피가 커지고 혼동 될 수 있습니다. 더 일반적인 것이 내 마음에 들지 않으므로 제목을 자유롭게 편집하십시오.
Vladislavs Dovgalecs

동의한다. 나는 이것이 실제로 두 가지 질문이라고 생각합니다. 모델링 질문에 답하려고했습니다.
jaradniemi

답변:


4

먼저 제가 무엇을할지 말씀 드린 다음 구체적 질문에 답변 해 드리겠습니다.

내가해야 할 일 (적어도 초기에는)

다음은 게시물에서 수집 한 내용입니다. 19 개의 관찰을위한 훈련 대기 시간이 있으며 예상 대기 시간에 대한 추론에 관심이 있습니다.

나는 정의합니다 위해 열차 대기 시간으로 . 이러한 대기 시간이 정수 여야하는 이유가 없으므로 같이 양의 연속적인 양이라고 가정 . 모든 대기 시간이 실제로 관찰되었다고 가정합니다.Wii=1,,19iWiR+

사용할 수있는 몇 가지 가능한 모형 가정이 있으며, 19 개의 관측치로 어떤 모형이 더 합리적인지 결정하기 어려울 수 있습니다. 일부 예는 로그 정규, 감마, 지수, Weibull입니다.

첫 번째 모델로 모델링을 제안한 다음 이 선택을 통해, 당신은 예를 들어 켤레 이전과 같은 기존의 풍부한 이론에 접근 할 수 있습니다. 선행 컨쥬 게이트는 정규 역 감마 분포, 즉 여기서 는 역 감마 분포. 또는 기본 이전 를 사용할 수 있습니다.이 경우 후방은 정규 역 감마 분포입니다.Yi=log(Wi)

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

이후 , 우리는 공동의 샘플 드로잉하여 예상 대기 시간에 대한 질문에 대답 할 수 와 일반 역행렬이 그 후방 분포로부터 -감마 분포를 구한 다음 각 샘플에 대해 를 계산 합니다. 예상 대기 시간 동안 후부에서 샘플링합니다.E[Wi]=eμ+σ/2μσ2eμ+σ/2

질문에 답변

  • 이 모델이 작업에 합리적입니까 (여러 가지 가능한 모델링 방법)?

포아송은 정수가 아닌 데이터에 적합하지 않은 것 같습니다. 단일 만 있으므로 할당 한 감마 분포의 매개 변수를 배울 수 없습니다 . 이것을 말하는 또 다른 방법은 계층 적 모델을 구축했지만 데이터에 계층 적 구조가 없다는 것입니다.λλ

  • 초보자 실수를 했습니까?

이전 의견을 참조하십시오.

또한 MCMC 결과에서 는 어디에 있습니까? 코드에서 SD와 속도는 무엇입니까?λ

당신의 이전은 데이터에 의존해서는 안됩니다.

  • 모델을 단순화 할 수 있습니까 (단순한 것을 복잡하게 만드는 경향이 있습니까)?

그렇습니다. 내 모델링 접근법을 참조하십시오.

  • rate 매개 변수의 사후 ( )가 실제로 데이터에 적합한 지 어떻게 확인할 수 있습니까?ρ

가 귀하의 데이터 가 아니 합니까? 당신은 의미합니까 ? 한 가지 확인해야 할 것은 샘플 평균 대기 시간이 평균 대기 시간에 대한 사후 분포와 관련이 있는지 확인하는 것입니다. 기괴한 사전이 없다면, 표본 평균은 사후 분포의 피크에 가까워 야합니다.ρλ

  • 적합 Poisson 분포에서 일부 표본을 추출하여 표본을 보려면 어떻게해야합니까?

나는 당신이 사후 예측 분포를 원한다고 믿습니다. MCMC의 각 반복에 대해 해당 반복에 대한 매개 변수 값을 연결하고 샘플을 가져옵니다.


정말 감사합니다! 나는 당신의 대답을 오히려 빨리 읽습니다. 이를 요약하고 일부 배포 및 개념에 대한 참조를 찾은 다음 PyMC에서 구현할 때까지 시간이 필요합니다. Btw, 방금 실험을 위해 Python 코드를 추가했습니다.
Vladislavs Dovgalecs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.