# Parameters relating to youth data model.add_node(bd.Node("offset", bd.Normal(0.0, 1.0))) model.add_node(bd.Node("policy_effect", bd.Cauchy(0.0, 0.1))) model.add_node(bd.Node("L2", bd.LogUniform(1E-2, 1E2))) model.add_node(bd.Node("beta2", bd.LogUniform(1E-3, 1E3))) model.add_node(bd.Node("alpha2", bd.Delta("exp(-1.0/L2)"))) model.add_node(bd.Node("sigma2", bd.Delta("beta2/sqrt(1.0 - alpha2*alpha2)"))) for i in range(0, data["N"]): name = "youth{i}".format(i=i) mean = "adult{i} + offset + ((t{i} >= 90.0)?(policy_effect):(0.0))"\ .format(i=i) sd = "sigma2" if i > 0: ar1_mean = "{mean} + alpha2*(youth{k} - ({mean}))".format(mean=mean,\ k=(i-1)) mean = ar1_mean sd = "beta2" dist = bd.Normal(mean, sd) model.add_node(bd.Node(name, dist, observed=True)) # Create the C++ code bd.generate_h(model, data) bd.generate_cpp(model, data) # Compile the C++ code so it's ready to go import os os.system("make")
data = {"x": np.array([1.0, 2.0, 3.0, 4.0, 5.0]),\ "y": np.array([1.0, 2.0, 3.0, 3.9, 5.1]),\ "N": 5} # Create the model model = bd.Model() # Slope and intercept model.add_node(bd.Node("m", bd.Uniform(-100.0, 100.0))) model.add_node(bd.Node("b", bd.Uniform(-100.0, 100.0))) # Noise standard deviation model.add_node(bd.Node("log_sigma", bd.Uniform(-10.0, 10.0))) model.add_node(bd.Node("sigma", bd.Delta("exp(log_sigma)"))) # p(data | parameters) for i in range(0, data["N"]): name = "y{index}".format(index=i) mean = "m*x{index} + b".format(index=i) model.add_node(bd.Node(name, bd.Normal(mean, "sigma"), observed=True)) # Create the C++ code bd.generate_h(model, data) bd.generate_cpp(model, data) # Compile the C++ code so it's ready to go import os os.system("make")