Karena saya seorang insinyur perangkat lunak yang mencoba mempelajari lebih banyak statistik, Anda harus memaafkan saya bahkan sebelum saya mulai, ini adalah wilayah newb yang serius ...
Saya telah belajar PyMC dan bekerja melalui beberapa contoh sederhana. Satu masalah yang saya tidak dapat mulai bekerja (dan tidak dapat menemukan contoh terkait) adalah memasang model ke data yang dihasilkan dari dua distribusi normal.
Katakanlah saya memiliki 1000 nilai; 500 dihasilkan dari a Normal(mean=100, stddev=20)
dan 500 lainnya dihasilkan dari a Normal(mean=200, stddev=20)
.
Jika saya ingin mencocokkan model dengan mereka, yaitu menentukan dua cara dan standar deviasi tunggal, menggunakan PyMC. Aku tahu itu sesuatu di sepanjang garis ...
mean1 = Uniform('mean1', lower=0.0, upper=200.0)
mean2 = Uniform('mean2', lower=0.0, upper=200.0)
precision = Gamma('precision', alpha=0.1, beta=0.1)
data = read_data_from_file_or_whatever()
@deterministic(plot=False)
def mean(m1=mean1, m2=mean2):
# but what goes here?
process = Normal('process', mu=mean, tau=precision, value=data, observed=True)
yaitu, proses menghasilkan adalah Normal, tetapi mu adalah salah satu dari dua nilai. Saya hanya tidak tahu bagaimana mewakili "keputusan" antara apakah suatu nilai berasal m1
atau tidak m2
.
Mungkin saya benar-benar mengambil pendekatan yang salah untuk pemodelan ini? Adakah yang bisa menunjukkan saya pada contoh? Saya dapat membaca BUGS dan JAGS sehingga semuanya benar-benar baik-baik saja.
Beberapa poin, terkait dengan diskusi di atas:
Pilihan difus normal vs seragam cukup akademis kecuali (a) Anda khawatir tentang konjugasi, dalam hal ini Anda akan menggunakan normal atau (b) ada kemungkinan yang masuk akal bahwa nilai sebenarnya bisa berada di luar titik akhir seragam. . Dengan PyMC, tidak ada alasan untuk khawatir tentang konjugasi, kecuali jika Anda secara khusus ingin menggunakan sampler Gibbs.
Gamma sebenarnya bukan pilihan tepat untuk informasi sebelum parameter varians / presisi. Itu bisa menjadi lebih informatif menurut Anda. Pilihan yang lebih baik adalah meletakkan seragam sebelum deviasi standar, kemudian mengubahnya dengan kuadrat terbalik. Lihat Gelman 2006 untuk detailnya.
sumber
tau = std_dev**-2