পিএমসিতে দুটি সাধারণ বিতরণের জন্য উপযুক্ত মডেল


10

যেহেতু আমি একজন সফটওয়্যার ইঞ্জিনিয়ার আরও পরিসংখ্যান শেখার চেষ্টা করছি আমি এমনকি শুরু করার আগে আমাকে ক্ষমা করতে হবে, এটি গুরুতর নতুন অঞ্চল ...

আমি পিএমসি শিখছি এবং কিছু সত্যিকারের (সত্যই) সাধারণ উদাহরণ দিয়ে কাজ করছি। আমি কাজ করতে না পারার একটি সমস্যা (এবং এর সাথে সম্পর্কিত কোনও উদাহরণ খুঁজে পাচ্ছে না) দুটি সাধারণ বিতরণ থেকে উত্পন্ন ডেটাতে একটি মডেল ফিট করা।

বলুন আমার 1000 মান রয়েছে; একটি থেকে উত্পন্ন 500 Normal(mean=100, stddev=20)এবং এ থেকে আরও 500 জেনারেট করা Normal(mean=200, stddev=20)

যদি আমি তাদের কাছে কোনও মডেল ফিট করতে চাই, অর্থাৎ পিএমসি ব্যবহার করে দুটি উপায় এবং একক মানক বিচ্যুতি নির্ধারণ করুন। আমি জানি এটা কিছু ...

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)

অর্থাত্, উত্পাদনের প্রক্রিয়াটি সাধারণ, তবে দুটি মানগুলির মধ্যে একটি মি। আমি কেবল জানি না যে কোনও মান আসে m1বা আসে কিনা এর মধ্যে "সিদ্ধান্ত" কে উপস্থাপন করতে হয় m2

সম্ভবত আমি পুরোপুরি এই মডেলিংয়ের জন্য ভুল পদ্ধতি গ্রহণ করছি? কেউ কি আমাকে একটি উদাহরণে নির্দেশ করতে পারেন? আমি বাগ এবং জেএজিএস পড়তে পারি তাই কিছু ঠিক আছে।

উত্তর:


11

আপনি কি পুরোপুরি নিশ্চিত যে অর্ধেকটি একটি বিতরণ থেকে এবং অন্য অর্ধেকটি অন্যটি থেকে এসেছিল? যদি তা না হয় তবে আমরা অনুপাতটিকে একটি এলোমেলো পরিবর্তনশীল হিসাবে মডেল করতে পারি (এটি করার জন্য খুব বেইসিয়ান জিনিস)।

নিম্নলিখিতটি আমি কী করব, কিছু টিপস এম্বেড করা হয়েছে।

from pymc import *

size = 10
p = Uniform( "p", 0 , 1) #this is the fraction that come from mean1 vs mean2

ber = Bernoulli( "ber", p = p, size = size) # produces 1 with proportion p.

precision = Gamma('precision', alpha=0.1, beta=0.1)

mean1 = Normal( "mean1", 0, 0.001 ) #better to use normals versus Uniforms (unless you are certain the value is  truncated at 0 and 200 
mean2 = Normal( "mean2", 0, 0.001 )

@deterministic
def mean( ber = ber, mean1 = mean1, mean2 = mean2):
    return ber*mean1 + (1-ber)*mean2


#generate some artificial data   
v = np.random.randint( 0, 2, size)
data = v*(10+ np.random.randn(size) ) + (1-v)*(-10 + np.random.randn(size ) )


obs = Normal( "obs", mean, precision, value = data, observed = True)

model = Model( {"p":p, "precision": precision, "mean1": mean1, "mean2":mean2, "obs":obs} )

2
নির্লজ্জ প্রচার: আপনি এটি পোস্ট করার 1 মিনিটের আগে আমি আক্ষরিক অর্থে বেয়েস এবং পিএমএমসি সম্পর্কে একটি ব্লগ নিবন্ধ লিখেছিলাম , তাই আমি আপনাকে এটি চেক করার জন্য আমন্ত্রণ জানাচ্ছি। বেইস এর আশ্চর্যজনক শক্তি - পর্ব 1
ক্যাম.ড্যাভিডসন.পিলন

অসাধারণ! দুটি উপায়ের মিশ্রণের এই পদ্ধতির বিষয়টি হ'ল আমি প্রায় আমার মাথা পেতে চেষ্টা করছিলাম।
মাদুর কেলসি

নিশ্চিত না যে আমি গড় 1 এবং গড় 2 বলার সত্যিকারের মডেলিং সুবিধাটি পুরোপুরি বুঝতে পেরেছি ইউনিফর্মের পরিবর্তে সাধারণত বিতরণ করা হয় (যথাযথভাবে নির্ভুলতার জন্য একই কাজটি ঘটে, আমি "অন্য কেউ করেছে" বলে গামা ব্যবহার করছি)। আমি অনেক কিছু শিখতে পেয়েছি :)
মাদুর কেলসি

ইউনিফর্ম ব্যবহার করা যেমন আপনার আসল উদাহরণ হিসাবে বোঝা যায় যে আপনি নিখুঁত দৃ know ়তার সাথে জানেন যে গড়টি কোনও মূল্য ছাড়িয়ে যায় না। এটি কিছুটা প্যাথলজিকাল। একটি সাধারণ ব্যবহার করা আরও ভাল, কারণ এটি সমস্ত আসল সংখ্যা বিবেচনা করার অনুমতি দেয়।
ক্যাম.ড্যাভিডসন.পিলন

1
গামার পছন্দটির গাণিতিক কারণ রয়েছে। গামা হয় অনুবন্ধী পূর্বে সঠিকতার, টেবিল দেখতে এখানে
Cam.Davidson.Pilon

6

উপরোক্ত আলোচনার সাথে সম্পর্কিত কয়েকটি পয়েন্ট:

  1. (ক) আপনি যৌক্তিকতা সম্পর্কে উদ্বিগ্ন না হন, যদি না (ক) আপনি স্বাভাবিক ব্যবহার করেন বা (খ) সত্যিকারের মানটি ইউনিফর্মের শেষের দিকের বাইরে থাকতে পারে এমন কিছু যুক্তিসঙ্গত সম্ভাবনা না থাকলে সাধারণ বিচ্ছিন্ন ইউনিফর্মের পছন্দটি একাডেমিক is । পিআইএমসির সাথে, বিবাহবন্ধনের বিষয়ে উদ্বিগ্ন হওয়ার কোনও কারণ নেই, যদি না আপনি নির্দিষ্টভাবে গিবস নমুনা ব্যবহার করতে চান।

  2. একটি গামা আসলে কোনও বৈকল্পিকতা / নির্ভুলতা প্যারামিটারের পূর্বে অজানা তথ্যের জন্য দুর্দান্ত পছন্দ নয়। এটি আপনার মনে হয় আরও তথ্যবহুল হয়ে উঠতে পারে। আরও ভাল পছন্দ হ'ল স্ট্যান্ডার্ড বিচ্যুতির আগে ইউনিফর্ম স্থাপন করা, তারপরে একে বিপরীত স্কোয়ার দ্বারা রূপান্তর করা। বিস্তারিত জানার জন্য জেলম্যান 2006 দেখুন ।


1
আহ ফোনেসবেক পাইমকের অন্যতম প্রধান বিকাশকারী! আপনি কীভাবে পয়েন্ট 2 কোড করবেন আমাদের একটি উদাহরণ দেখাতে পারেন?
ক্যাম.ড্যাভিডসন.পিলন

ধন্যবাদ ফোনেসবেক এবং, হ্যাঁ দয়া করে! পয়েন্ট 2 :) এর দ্রুত
উদাহরণে

1
আসলে আমি অনুমান করছি আপনি ... gist.github.com/4404631 এর ধারায় কিছু বোঝাতে চাইছেন ?
মাদুর কেলসি

হ্যাঁ অবশ্যই. আপনি আরও কিছুটা সংক্ষিপ্তভাবে ট্রান্সফর্মটি করতে পারেন:tau = std_dev**-2
ফোনেসবেক

যথার্থতা এবং স্টাডি_দেবের মধ্যে এই সম্পর্কটি কোথা থেকে এসেছে সে সম্পর্কে পড়ার সঠিক জায়গাটি কী হবে?
ব্যবহারকারী 979
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.