package statalign.tests; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import org.apache.commons.math3.random.RandomGenerator; import org.apache.commons.math3.random.Well19937c; import statalign.base.Utils; import statalign.mcmc.MultiplicativeProposal; import statalign.utils.BetaDistribution; public class McmcTest { public static void main5(String[] args) { HashMap<Integer,String> test = new HashMap<Integer,String>(); test.put(1, "1"); test.put(2, "2"); test.put(4, "4"); for (int i=1; i<=4; i++) { String s = test.get(i); if (s==null) { test.put(i, ""+i); } System.out.println(s+" "+test.get(i)); } } public static void main4(String[] args) { int nSamples = 10000; RandomGenerator master = new Well19937c(1); ArrayList<RandomGenerator> rands = new ArrayList<RandomGenerator>(); //for (int i=0; i<10; i++) rands.add(new Well19937c(master.nextInt())); for (int i=0; i<10; i++) rands.add(new Well19937c(i)); try { FileWriter output = new FileWriter("rngTest.txt"); for (int i=0; i<nSamples; i++) { for (int j=0; j<10; j++) { output.write(rands.get(j).nextDouble()+"\t"); } output.write("\n"); } output.flush(); output.close(); } catch (IOException e) { throw new RuntimeException(e.toString());} } /** * Code to test that the moves are being sampled according to the * correct weights (i.e. that there is not some bias arising from * the choose function and/or random number generator). */ public static void main3(String[] args) { final int rWeight = 8; final int lambdaWeight = 4; final int muWeight = 6; final int lambdaMuWeight = 6; final int phiWeight = 4; final int rhoWeight = 6; final int thetaWeight = 6; final int substWeight = 10; final int edgeWeight = 1; // per edge final int allEdgeWeight = 6; final int edgeWeightIncrement = 0; // Added after half of burnin final int alignWeight = 25; final int topologyWeight = 8; final int localTopologyWeight = 8; int[] weights = { rWeight, lambdaWeight, rhoWeight, thetaWeight, edgeWeight, edgeWeight, edgeWeight, edgeWeight, edgeWeight, edgeWeight, edgeWeight, allEdgeWeight, alignWeight, topologyWeight, localTopologyWeight }; final int nSamples = 10000; int[] samples = new int[nSamples]; for (int i=0; i<nSamples; i++) { samples[i] = Utils.weightedChoose(weights); } try { FileWriter output = new FileWriter("sampleTest.txt"); for (int i=0; i<nSamples; i++) { output.write(samples[i]+"\n"); } output.flush(); output.close(); } catch (IOException e) { throw new RuntimeException(e.toString());} System.out.println("Done."); } /** * Code to test that various samplers are working correctly. */ public static void main2(String[] args) { MultiplicativeProposal proposalDistribution = new MultiplicativeProposal(); //LogisticProposal proposalDistribution = new LogisticProposal(); //GaussianProposal proposalDistribution = new GaussianProposal(); //GammaDistribution n = new GammaDistribution(2,0.5); BetaDistribution n = new BetaDistribution(2,5); int ITERS = 100000; //double var = 3.5; // LogisticProposal //double var = 0.6; // GaussianProposal double var = 2.5; // MultiplicativeProposal double oldParam = 0.5; double[] params = new double[ITERS]; double MIN_PARAM = 0; double MAX_PARAM = 1; // Beta //double MAX_PARAM = Double.POSITIVE_INFINITY; // Gamma int acc = 0; for (int i=0; i<ITERS; i++) { if (i>0) oldParam = params[i-1]; proposalDistribution.updateProposal(var,oldParam); double newParam = proposalDistribution.sample(); if (newParam <= MIN_PARAM || newParam > MAX_PARAM) { params[i] = oldParam; continue; } double logProposalRatio = -proposalDistribution.logDensity(newParam); proposalDistribution.updateProposal(var,newParam); logProposalRatio += proposalDistribution.logDensity(oldParam); double logLikeRatio = Math.log(n.density(newParam)) - Math.log(n.density(oldParam)); //System.out.println(oldParam+"\t"+newParam+"\t"+logProposalRatio+"\t"+logLikeRatio); if (Math.log(Utils.generator.nextDouble())< (logLikeRatio + logProposalRatio)) { params[i] = newParam; acc++; } else { params[i] = oldParam; } } System.out.println("Acceptance rate = "+((double)acc/(double)ITERS)); try { FileWriter output = new FileWriter("multiplicativeTest.txt"); for (int i=0; i<ITERS; i++) { output.write(params[i]+"\n"); } output.close(); } catch (IOException e) {} } }