Đây là nỗ lực đầu tiên của tôi cho ai đó đến từ trại thường xuyên thực hiện phân tích dữ liệu Bayes. Tôi đã đọc một số hướng dẫn và một vài chương từ Phân tích dữ liệu Bayes của A. Gelman.
Như ví dụ phân tích dữ liệu độc lập ít nhiều đầu tiên tôi chọn là thời gian chờ tàu. Tôi tự hỏi: phân phối thời gian chờ đợi là gì?
Bộ dữ liệu được cung cấp trên một blog và được phân tích hơi khác và ngoài PyMC.
Mục tiêu của tôi là ước tính thời gian chờ tàu dự kiến với 19 mục nhập dữ liệu đó.
Mô hình tôi xây dựng như sau:
nơi μ là dữ liệu có nghĩa và σ là dữ liệu chuẩn độ lệch nhân với 1000.
Tôi có một loạt các câu hỏi
- Mô hình này có hợp lý cho nhiệm vụ không (một số cách có thể để mô hình hóa?)?
- Tôi đã phạm sai lầm mới bắt đầu?
- Mô hình có thể được đơn giản hóa (tôi có xu hướng phức tạp hóa những điều đơn giản)?
- Làm cách nào tôi có thể vẽ một số mẫu từ phân phối Poisson được trang bị để xem các mẫu?
Các hậu thế sau 5000 bước của Metropolis trông như thế này:
Tôi sẽ rất biết ơn về bất kỳ nhận xét và nhận xét nào cho phép tôi nắm bắt được chương trình xác suất hơn. Có thể có nhiều ví dụ cổ điển đáng thử nghiệm hơn?
Đây là đoạn mã tôi đã viết bằng Python bằng PyMC3. Các tập tin dữ liệu có thể được tìm thấy ở đây .
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()