я играл с PYMC и в линейной регрессии коде я сгенерировал стохастическую переменный с помощью стохастического декоратора:PYMC декораторы ключевых слова означают: след, сюжет
@pymc.stochastic(observed=True, trace=True)
def model(value = y_data, x_values = x_data, m = m_coef, n = n_coef, sigma = sigma):
value_theo = m*x_values + n
chi_sq = np.sum(np.square(value - value_theo)/np.square(sigma))
log_ChiSq = - chi_sq/2.0
return log_ChiSq
Я хотел бы построить эволюцию log_chisq по извилистому Итерации MCMC. Однако след для этой переменной, кажется, не хранить ...
Поэтому мои вопросы:
1) Где я могу найти определение, или пример смысла pymc декоратор ключевых слов, таких как сюжет или трассировать?
2) Почему след стоковой (но наблюдаемой) переменной не сохраняется в виде следа?
спасибо
import numpy as np
import matplotlib.pyplot as plt
import pymc
#Generating some data for the model_difference y = m * x + n
m_true, n_true = 3, 2
sigma_true = 2
x_true = 25 * (np.random.random(50) - 0.5)
y_true = m_true * x_true + n_true
#Adding some scatter
x_data, y_data = x_true, y_true
x_data, y_data = np.random.normal(x_true, 2), np.random.normal(y_true, 2)
#Providiing estimates for priors
Np_lsf = np.polyfit(x_data, y_data, 1)
m_0, n_0 = Np_lsf[0], Np_lsf[1]
#Priors
m_coef = pymc.Normal('m_coef', m_0, 0.01)
n_coef = pymc.Normal('n_coef', n_0, 0.01)
sigma = pymc.Uniform('sigma', 0.0, 5.0)
#---Chi Square Moodel
@pymc.stochastic(observed=True, trace=True)
def model(value = y_data, x_values = x_data, m = m_coef, n = n_coef, sigma = sigma):
value_theo = m*x_values + n
chi_sq = np.sum(np.square(value - value_theo)/np.square(sigma))
log_ChiSq = - chi_sq/2.0
return log_ChiSq
MCMC_dict2 = dict(m_coef=m_coef, n_coef=n_coef, sigma=sigma, model=model)
M = pymc.MCMC(MCMC_dict2)
M.sample(iter=10000, burn=100)
#Code variables
print M.variables
#MCMC ouput
print '\nInitial m, n, estimations'
print m_0, n_0
print 'Bayesian estimation Model 2'
print M.m_coef.value, M.n_coef.value, 'with Sigma:', M.sigma.value
#Store pymc_tracers
MCMC_Traces = [M.trace('m_coef')[:], M.trace('n_coef')[:], M.trace('sigma')[:], M.trace('model')[:]]
# #Plotting regression
Fig = plt.figure(figsize = (16, 9))
Axis1 = Fig.add_subplot(111)
Fig.set_facecolor('w')
Axis1.plot(x_data, y_data, 'ok')
Axis1.plot(x_data, m_0 * x_data + n_0, '-', color='blue', label = 'least-squares fit')
Axis1.plot(x_data, M.m_coef.value * x_data + M.n_coef.value, '-', color='red', label = r'$\chi^{-2}$ model')
Axis1.plot(x_data, m_true * x_data + n_true, '-', color='black', label = r'true data model, $\sigma=$'+str(sigma_true))
Axis1.xlabel('x')
Axis1.ylabel('y')
Axis1.legend(loc='best')
plt.show()