// [ref] ${SCYTHEMCMC_HOME}/examples/normal.cpp.
void normal_example()
{
	MCMCOptions	mcmc_options;
	{
		mcmc_options.config_file = std::string();  // config file name. don't need.
		mcmc_options.out_file = "./data/statistics/scythe/mcmc_normal_output.txt";  // out file name.
		mcmc_options.chains = 1;  // number of chains.
		mcmc_options.sample_size = 1000;  // retained sample size.
		mcmc_options.burnin = 0;  // burn in period.
		mcmc_options.thin = 1;  // thinning interval (1 = no thinning).
		// random number seed (0 uses current timestamp, 1 attempts to load from lecuyer.seed file).
		//	[ref] ShowUsage() in mcmc.h.
		mcmc_options.random_seed[0] = 0L;
		mcmc_options.random_seed[1] = 0L;
		mcmc_options.random_seed[2] = 0L;
		mcmc_options.random_seed[3] = 0L;
		mcmc_options.random_seed[4] = 0L;
		mcmc_options.random_seed[5] = 0L;
	}

	{
		std::cout << "Loading model options..." << std::endl;
		local::model_options.sd = 1.0;
		local::model_options.mean_slice_w = 1.0;

		std::cout << "Loading priors..." << std::endl;
		local::priors.mean_mu = 0.0;
		local::priors.mean_sigma = 2.0;

		// TODO [check] >> is it correct?
		scythe::Matrix<double, scythe::Col> X(3, 4, false);
		X = 1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12;

		std::cout << "Loading data..." << std::endl;
		local::data.X = X;
		std::cout << "Observations added: " << local::data.X.rows() << std::endl;
	}

	//
	Sampler sampler(mcmc_options);

	std::cout << "Adding mean parameter..." << std::endl;
	// Define parameter called "mean", and track it (true).
	// See other examples for how you use loops to creating multiple instance of a specific parameter type (e.g. ideal points).
	local::MeanParameter mean_parameter(true, "mean");

	// Add sampling step.
	sampler.AddStep(new SliceStep<local::MeanParameter>(mean_parameter, local::model_options.mean_slice_w, -dInf, dInf));
	//sampler.AddStep(new MetropStep<local::MeanParameter, NormalProposal>(mean_parameter, NormalProposal(1.0)));
	//sampler.AddStep(new MetropStep<local::MeanParameter, BetaProposal>(mean_parameter, BetaProposal(1.0)));
	//sampler.AddStep(new MetropStep<local::MeanParameter, LogNormalProposal>(mean_parameter, LogNormalProposal(1.0)));
	//sampler.AddStep(new GibbsStep<local::MeanParameter, double>(mean_parameter));
	//sampler.AddStep(new FunctionStep<local::MeanParameter, double>(mean_parameter));

	sampler.Run();
}
Beispiel #2
0
 double ZIGM::variance() const {
   double p = positive_probability();
   return p * square(mean_parameter()) * (1 - p + (1 / shape_parameter()));
 }
Beispiel #3
0
 double ZIGM::mean() const {
   return positive_probability() * mean_parameter();
 }