Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test(self):
# Changepoint model
M1 = Model(model_1)
# Constant rate model
M2 = Model(model_2)
# Exponentially varying rate model
M3 = Model(model_3)
# print 'Docstring of model 1:'
# print model_1.__doc__
# print 'Docstring of model 2:'
# print model_2.__doc__
# print 'Docstring of model 3:'
# print model_3.__doc__
posterior = weight([M1,M2,M3],10000)[0]
# print 'Log posterior probability of changepoint model: ',log(posterior[M1])
# print 'Log posterior probability of constant rate model: ',log(posterior[M2])
else:
N = int(options.numberofrows)
delta_true = float(options.delta)
replicate = int(options.replicate)
bias = float(options.bias)
sigma_prior = float(options.sigma)
print 'Running random effects validation for:'
print 'N', N
print 'delta_true', delta_true
print 'bias', bias
print 'sigma_prior', sigma_prior
print 'replicate', replicate
M = gp.Mean(validate_similarity.quadratic)
C = gp.Covariance(gp.matern.euclidean, amp=1., diff_degree=2, scale=50)
gp.observe(M, C, [0, 30, 100], [-5, -3, -5])
true = {}
lp = gp.Realization(M, C)
true_p = lambda x: pl.exp(lp(x))
model = validate_similarity.generate_data(N, delta_true, true_p, 'Unusable', bias, sigma_prior)
for het in 'Very Moderately Slightly'.split():
model.parameters['p']['heterogeneity'] = het
validate_similarity.fit(model)
model.results.to_csv('%s/%s/%s-%s-%s-%s-%s-%s.csv' % (output_dir, validation_name, options.numberofrows, options.delta, het, bias, sigma_prior, options.replicate))
else:
N = int(options.numberofrows)
delta_true = float(options.delta)
replicate = int(options.replicate)
bias = float(options.bias)
sigma_prior = float(options.sigma)
print 'Running random effects validation for:'
print 'N', N
print 'delta_true', delta_true
print 'bias', bias
print 'sigma_prior', sigma_prior
print 'replicate', replicate
M = gp.Mean(validate_similarity.quadratic)
C = gp.Covariance(gp.matern.euclidean, amp=1., diff_degree=2, scale=50)
gp.observe(M, C, [0, 30, 100], [-5, -3, -5])
true = {}
lp = gp.Realization(M, C)
true_p = lambda x: pl.exp(lp(x))
model = validate_similarity.generate_data(N, delta_true, true_p, 'Unusable', bias, sigma_prior)
for het in 'Very Moderately Slightly'.split():
model.parameters['p']['heterogeneity'] = het
validate_similarity.fit(model)
model.results.to_csv('%s/%s/%s-%s-%s-%s-%s-%s.csv' % (output_dir, validation_name, options.numberofrows, options.delta, het, bias, sigma_prior, options.replicate))
def test_neg_binom_model_sim(N=16):
# simulate negative binomial data
pi_true = .01
delta_true = 50
n = pl.array(pl.exp(mc.rnormal(10, 1**-2, size=N)), dtype=int)
k = pl.array(mc.rnegative_binomial(n*pi_true, delta_true, size=N), dtype=float)
p = k/n
# create NB model and priors
vars = dict(mu_age=mc.Uniform('mu_age', 0., 1000., value=.01),
sigma=mc.Uniform('sigma', 0., 10000., value=1000.))
vars['mu_interval'] = mc.Lambda('mu_interval', lambda mu=vars['mu_age']: mu*pl.ones(N))
vars.update(rate_model.log_normal_model('sim', vars['mu_interval'], vars['sigma'], p, 1./pl.sqrt(n)))
# fit NB model
m = mc.MCMC(vars)
m.sample(1)
if c not in area_list:
continue
alpha[c] = mc.rnormal(0., sigma_true[3]**-2.)
sum_c += alpha[c]
last_c = c
if last_c >= 0:
alpha[last_c] -= sum_c
alpha[r] = mc.rnormal(0., sigma_true[2]**-2.)
sum_r += alpha[r]
last_r = r
if last_r >= 0:
alpha[last_r] -= sum_r
alpha[sr] = mc.rnormal(0., sigma_true[1]**-2.)
sum_sr += alpha[sr]
last_sr = sr
if last_sr >= 0:
alpha[last_sr] -= sum_sr
return alpha
def test_age_pattern_model_sim():
# simulate normal data
a = pl.arange(0, 100, 5)
pi_true = .0001 * (a * (100. - a) + 100.)
sigma_true = .025*pl.ones_like(pi_true)
p = pl.maximum(0., mc.rnormal(pi_true, 1./sigma_true**2.))
# create model and priors
vars = {}
vars.update(age_pattern.age_pattern('test', ages=pl.arange(101), knots=pl.arange(0,101,5), smoothing=.1))
vars['pi'] = mc.Lambda('pi', lambda mu=vars['mu_age'], a=a: mu[a])
vars.update(rate_model.normal_model('test', vars['pi'], 0., p, sigma_true))
# fit model
m = mc.MCMC(vars)
m.sample(2)
vars['mu_age'].trace() * fe_usa_1990 * re_usa_1990)
### Prediction case 3: random effect not constant, zero fixed effect coefficients
# set random seed to make randomness reproducible
pl.np.random.seed(12345)
pred = covariate_model.predict_for(d, d.parameters['p'],
'NAHI', 'male', 2005,
'CAN', 'male', 1990,
0., vars, 0., pl.inf)
# test that the predicted value is as expected
pl.np.random.seed(12345)
fe = pl.exp(0.)
re = pl.exp(mc.rnormal(0., vars['sigma_alpha'][3].trace()**-2))
assert_almost_equal(pred.mean(0),
(vars['mu_age'].trace().T * fe * re).T.mean(0))
def test_log_normal_model_sim(N=16):
# simulate negative binomial data
pi_true = 2.
sigma_true = .1
n = pl.array(pl.exp(mc.rnormal(10, 1**-2, size=N)), dtype=int)
p = pl.exp(mc.rnormal(pl.log(pi_true), 1./(sigma_true**2 + 1./n), size=N))
# create model and priors
vars = dict(mu_age=mc.Uniform('mu_age', 0., 1000., value=.01),
sigma=mc.Uniform('sigma', 0., 10000., value=1000.))
vars['mu_interval'] = mc.Lambda('mu_interval', lambda mu=vars['mu_age']: mu*pl.ones(N))
vars.update(rate_model.log_normal_model('sim', vars['mu_interval'], vars['sigma'], p, 1./pl.sqrt(n)))
# fit model
m = mc.MCMC(vars)
m.sample(1)
def simulate_age_group_data(N=50, delta_true=150, pi_true=true_rate_function):
""" generate simulated data
"""
# start with a simple model with N rows of data
model = data_simulation.simple_model(N)
# record the true age-specific rates
model.ages = pl.arange(0, 101, 1)
model.pi_age_true = pi_true(model.ages)
# choose age groups randomly
age_width = mc.runiform(1, 100, size=N)
age_mid = mc.runiform(age_width/2, 100-age_width/2, size=N)
age_width[:10] = 10
age_mid[:10] = pl.arange(5, 105, 10)
#age_width[10:20] = 10
#age_mid[10:20] = pl.arange(5, 105, 10)
age_start = pl.array(age_mid - age_width/2, dtype=int)
age_end = pl.array(age_mid + age_width/2, dtype=int)
model.input_data['age_start'] = age_start
model.input_data['age_end'] = age_end
# choose effective sample size uniformly at random
n = mc.runiform(100, 10000, size=N)
model.input_data['effective_sample_size'] = n
def validate_age_pattern_model_sim(N=500, delta_true=.15, pi_true=quadratic):
## generate simulated data
a = pl.arange(0, 101, 1)
pi_age_true = pi_true(a)
model = data_simulation.simple_model(N)
model.parameters['p']['parameter_age_mesh'] = range(0, 101, 10)
age_list = pl.array(mc.runiform(0, 100, size=N), dtype=int)
p = pi_age_true[age_list]
n = mc.runiform(100, 10000, size=N)
model.input_data['age_start'] = age_list
model.input_data['age_end'] = age_list
model.input_data['effective_sample_size'] = n
model.input_data['true'] = p
model.input_data['value'] = mc.rnegative_binomial(n*p, delta_true*n*p) / n
## Then fit the model and compare the estimates to the truth
model.vars = {}
model.vars['p'] = data_model.data_model('p', model, 'p', 'all', 'total', 'all', None, None, None)
model.map, model.mcmc = fit_model.fit_data_model(model.vars['p'], iter=10000, burn=5000, thin=25, tune_interval=100)
graphics.plot_one_ppc(model.vars['p'], 'p')
graphics.plot_convergence_diag(model.vars)