2

(X,Y) ポイントのランダムなコレクションがあるとします。

import pymc as pm
import numpy as np
import matplotlib.pyplot as plt
import scipy

x = np.array(range(0,50))
y = np.random.uniform(low=0.0, high=40.0, size=200)
y = map((lambda a: a[0] + a[1]), zip(x,y))

plt.scatter(x,y)

                    ここに画像の説明を入力

そして、単純な線形回帰に適合すること:

std = 20.
tau=1/(std**2)
alpha = pm.Normal('alpha', mu=0, tau=tau)
beta  = pm.Normal('beta', mu=0, tau=tau)
sigma = pm.Uniform('sigma', lower=0, upper=20)

y_est = alpha + beta * x

likelihood = pm.Normal('y', mu=y_est, tau=1/(sigma**2), observed=True, value=y)

model = pm.Model([likelihood, alpha, beta, sigma, y_est])
mcmc  = pm.MCMC(model)
mcmc.sample(40000, 15000)

y_est[0]y_est[1]、 ..の分布または統計を取得するにはどうすればよいですか (これらの変数は、各入力値の推定y_est[2]に対応することに注意してください。yx

4

2 に答える 2

2

PyMC 2 では、deterministic のトレースに関心がある場合は、deterministic をLambdaオブジェクトでラップする (または関数を でデコレートする@deterministic) 必要があります。あなたの場合、これは次のようになります。

y_est = Lambda('y_est', lambda a=alpha, b=beta: a + b * x)

summaryその後、ストキャスティクスと同様に、メソッドを呼び出したり、ノードをプロットしたりできるはずです。

Modelところで、既に行っているように、オブジェクトをインスタンス化する必要はありませMCMCん。あなたに必要なのは:

mcmc = pm.MCMC([likelihood, alpha, beta, sigma, y_est])

またはさらに簡潔に:

mcmc = pm.MCMC(vars())
于 2014-03-05T21:46:42.127 に答える
1

@Chris のアドバイスに従って、次のように動作します。

x     = pm.Uniform('x', lower=xmin, upper=xmax)
alpha = pm.Normal('alpha', mu=0, tau=tau)
beta  = pm.Normal('beta', mu=0, tau=tau)
sigma = pm.Uniform('sigma', lower=0, upper=20)

# The deterministic:
y_gen = pm.Lambda('y_gen', lambda a=alpha, x=x, b=beta: a + b * x)

そして、次のようにサンプルを抽出します。

mcmc = pm.MCMC([x, y_gen])
mcmc.sample(n_total_samples, n_burn_in)

x_trace = mcmc.trace('x')[:]
y_trace = mcmc.trace('y_gen')[:]
于 2014-03-06T00:45:58.887 に答える