CDF ではなく、確率密度関数 (PDF) を使用する必要があります。微分するだけでCDFからPDFを取得します(関数が表になっている場合は数値的に行います)。あなたがそれを指定した方法で、
CDF(c | a, b)
に関してあなたの微分を取るc
と、条件付き確率密度が得られることに注意してくださいp(c|a,b)
。
の限界分布を取得するには、以下を統合するc
必要があります。a,b
[b_min, b_max]=[-10.0, 10.0] # whatever the reasonable bound in b are
[a_min, a_max]=[-10.0,10.0] # whatever the reasonable bounds in a are
def pc_conditional( c, a,b ):
''' conditional probability density p(c|a,b)'''
...
def pa(a):
''' probability density p(a)'''
....
def pb(b):
''' probability density p(b)'''
...
def joint_distribution( c, a,b ):
''' joint distribution over all variables; p(c,a,b)=p(c|a,b)p(a)p(b) '''
return pc_conditional(c,a,b)*pa(a)*pb(b)
def pca_marginal( c, a ):
''' distribution over c,a after integrating out b; p(c,a)=integrate[ p(c,a,b)db] '''
def integrand( b ):
return joint_distribution( c,a ,b)
return scipy.integrate.quad( integrand, b_min, b_max)
def pc_marginal(c):
def integrand(a):
return pca_marginal( c, a )
return scipy.integrate.quad( integrand, a_min, a_max )
# You can all pc_marginal(c) to obtain the (marginal) probability
# density value for the selected value of c. You could use vectorize
# to allow for calling it with an array of values.
分布をp(c)
計算できるようになったので、好きな統計情報を計算できます。