// [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(); }
double ZIGM::variance() const { double p = positive_probability(); return p * square(mean_parameter()) * (1 - p + (1 / shape_parameter())); }
double ZIGM::mean() const { return positive_probability() * mean_parameter(); }