import java.awt.*; import java.awt.event.*; import java.text.DecimalFormat; import java.applet.Applet; import javax.swing.JLabel; import javax.swing.JTextField; public class GibbsSampler extends Applet implements ActionListener{ // variable set private static final long serialVersionUID = -729195055739028464L; public static double exp = 1.0; public static double var = 1.0; public static double m0 = 3.0; public static double u, d3, d4, d7, d8, d9, d10, d11, d12; public static double[] s1 = new double[10000]; public static double[] s2 = new double[10000]; public static double[] s3 = new double[1000]; public static double[] s4 = new double[1000]; public static double[] d1 = new double[10000]; public static double[] d2 = new double[10000]; public static double[] d5 = new double[10000]; public static double[] d6 = new double[10000]; JTextField yx = new JTextField("1.0"); JTextField yn = new JTextField("1.0"); JTextField yr = new JTextField("3.0"); JLabel label1 = new JLabel("Gibbs Sampler Frequency Distribution", JLabel.CENTER); JLabel label2 = new JLabel("
The Expectation of σ2 (0<E(σ2)≤108)",JLabel.CENTER); JLabel label3 = new JLabel("The Variance of σ2 (0<Var(σ2)≤108)",JLabel.CENTER); JLabel label4 = new JLabel("The Ratio of σ2 to Var(μ) (0<r≤108)", JLabel.CENTER); public void init(){ label1.setPreferredSize(new Dimension(416,24)); label1.setFont(new Font("Serif",Font.BOLD,14)); add(label1); label2.setPreferredSize(new Dimension(260,23)); label2.setFont(new Font("Serif",Font.BOLD,11)); add(label2); yx.setPreferredSize(new Dimension(80,23)); add(yx); label3.setPreferredSize(new Dimension(260,23)); label3.setFont(new Font("Serif",Font.BOLD,11)); add(label3); yn.setPreferredSize(new Dimension(80,23)); add(yn); label4.setPreferredSize(new Dimension(260,23)); label4.setFont(new Font("Serif",Font.BOLD,11)); add(label4); yr.setPreferredSize(new Dimension(80,23)); add(yr); yx.addActionListener(this); yn.addActionListener(this); yr.addActionListener(this); } public void actionPerformed(ActionEvent e){ if(e.getSource()==yx){ exp=Double.valueOf(yx.getText()).doubleValue(); if(exp <= 0 || exp > Math.pow(10.0,8)){ exp = 1.0; } } if(e.getSource()==yn){ var = Double.valueOf(yn.getText()).doubleValue(); if(var <= 0 || var > Math.pow(10.0,8)){ var = 1.0; } } if(e.getSource()==yr){m0 = Double.valueOf(yr.getText()).doubleValue(); if(m0 <= 0 || m0 > Math.pow(10.0,8)){m0 = 3.0;} } yx.setText(""+exp); yn.setText(""+var); yr.setText(""+m0); repaint(); } public void paint(Graphics g){ double n = 20; double n0 = 2*Math.pow(exp,2)/var+4; double s0 = 2*(Math.pow(exp,3)/var+exp)/n0; double u0 = 0; double q = 25.31; double ExpX = -0.18; double m1 = m0+n; double n1 = n0+n; double n1s1 = n0*s0+q+(m0*n/(m0+n))*(ExpX-u0)*(ExpX-u0); double u1 = (n*ExpX+m0*u0)/(m0+n); s1[0]=1; s2[0]=normal.sampleNormal(u1,(1/s1[0])/m1); for(int i=0;i<9999;i++){ s1[i+1]=gamma.sampleGamma((n1+1)/2,1/(n1s1/2+m1*Math.pow(s2[i]-u1,2)/2)); s2[i+1]=normal.sampleNormal(u1,(1/s1[i+1])/m1); } d1[5000]=1/s1[5000]; d2[5000]=s2[5000]; for(int i=5001;i<10000;i++){ d1[i]=d1[i-1]+1/s1[i]; d2[i]=d2[i-1]+s2[i]; } d3=d1[9999]/5000; d4=d2[9999]/5000; d5[4999]=0; d6[4999]=0; for(int i=5000;i<10000;i++){ d5[i]=Math.pow((1/s1[i]-d3),2)+d5[i-1]; d6[i]=Math.pow((s2[i]-d4),2)+d6[i-1]; } d7=d5[9999]/(5000-1); d8=d6[9999]/(5000-1); // variable set int[] xxxx = new int[1000]; int[] yyyy = new int[1000]; int[] xxxx1 = new int[1000]; int[] yyyy1 = new int[1000]; double minss1 = 1/s1[5000]; double maxss1 = 1/s1[5000]; double minss2 = s2[5000]; double maxss2 = s2[5000]; for(int i=5000;i<10000;i++){ if(1/s1[i]>maxss1){ maxss1 = 1/s1[i]; } } for(int i=5000;i<10000;i++){ if(1/s1[i]