/** * CI * Forms confidence intervals */ PFont fontA; int level = 95; int samplesize = 30; boolean oversampleleftarrow = false; boolean oversamplerightarrow = false; boolean overlevelleftarrow = false; boolean overlevelrightarrow = false; boolean getSample = false; String meanstr = ""; String sdstr = ""; String CIstr = ""; int[] x1 = new int[1000]; int[] x2 = new int[1000]; float[] avvec = new float[1000]; float[] sdvec = new float[1000]; float[] lvec = new float[1000]; float[] rvec = new float[1000]; int[] out = new int[1000]; float[][] ttable = { {1.173864, 1.170346, 1.167743, 1.165740, 1.164151, 1.162859, 1.161788, 1.160886, 1.160116, 1.159451, 1.158871, 1.158360, 1.157907, 1.157502}, {1.311434, 1.306952, 1.303639, 1.301090, 1.299069, 1.297426, 1.296066, 1.294920, 1.293942, 1.293097, 1.292360, 1.291711, 1.291136, 1.290623}, {1.478705, 1.472810, 1.468458, 1.465112, 1.462460, 1.460306, 1.458522, 1.457020, 1.455738, 1.454632, 1.453666, 1.452817, 1.452064, 1.451392}, {1.699127, 1.690924, 1.684875, 1.680230, 1.676551, 1.673565, 1.671093, 1.669013, 1.667239, 1.665707, 1.664371, 1.663197, 1.662155, 1.661226}, {2.045230, 2.032245, 2.022691, 2.015368, 2.009575, 2.004879, 2.000995, 1.997730, 1.994945, 1.992543, 1.990450, 1.988610, 1.986979, 1.985523}}; int count = 0; void setup() { size(700,450); smooth(); fontA = loadFont("ArialMT-48.vlw"); textFont(fontA, 30); SampleMe(); } void draw() { float yupper, ylower; background(200); strokeWeight(3); stroke(0); fill(0); text("Confidence Level",23,345); String tempstr = "0."+level; text(tempstr,290,345); triangle(270,333,280,343,280,323); triangle(368,333,358,343,358,323); text("Sample Size",420,345); text(str(samplesize),620,345); triangle(600,333,610,343,610,323); triangle(672,333,662,343,662,323); //text(str(float(count)/250),200,255); fill(255); rect(290,375,120,45,10); fill(0); text("Sample",300,408); textFont(fontA, 24); text("Count: " + count, 575, 30); for (int i = 0; i < 50; i++) { if (out[i] == 0) { stroke(0); } else { stroke(255,0,0); } line(x1[i],37+5*i,x2[i],37+5*i); } stroke(0); line(350,32,350,287); int mx = mouseX; int my = mouseY; meanstr = ""; sdstr = ""; CIstr = ""; for (int i = 0; i < 50; i++) { yupper = 37+5*i-1; ylower = 37+5*i+1; if (mx >= x1[i] && mx <= x2[i] && my >= yupper && my <= ylower) { meanstr = nf(avvec[i],1,3); sdstr = nf(sdvec[i],1,3); CIstr = "("+nf(lvec[i],1,3)+","+nf(rvec[i],1,3)+")"; if (mx <= 495) { fill(255); rect(mx+10,ylower+10,190,70,10); textFont(fontA, 18); fill(0); text("Sample Mean: " + meanstr,mx+20, ylower+30); text("SD: " + sdstr,mx+20, ylower+50); text("CI: " + CIstr,mx+20, ylower+70); } else { fill(255); rect(mx-10-190,ylower+10,190,70,10); textFont(fontA, 18); fill(0); text("Sample Mean: " + meanstr,mx-190, ylower+30); text("SD: " + sdstr,mx-190, ylower+50); text("CI: " + CIstr,mx-190, ylower+70); } break; } } textFont(fontA, 30); } void mousePressed() { oversampleleftarrow = false; oversamplerightarrow = false; overlevelleftarrow = false; overlevelrightarrow = false; getSample = false; if (mouseX >= 270 && mouseX <= 280 && mouseY >= 323 && mouseY <= 343) overlevelleftarrow = true; if (mouseX >= 358 && mouseX <= 368 && mouseY >= 323 && mouseY <= 343) overlevelrightarrow = true; if (mouseX >= 600 && mouseX <= 610 && mouseY >= 323 && mouseY <= 343) oversampleleftarrow = true; if (mouseX >= 662 && mouseX <= 672 && mouseY >= 323 && mouseY <= 343) oversamplerightarrow = true; if (mouseX >= 290 && mouseX <= 410 && mouseY >= 375 && mouseY <= 420) getSample=true; if (overlevelleftarrow) level -= 5; if (overlevelrightarrow) level += 5; if (level > 95) level = 95; if (level < 75) level = 75; if (oversampleleftarrow) samplesize -= 5; if (oversamplerightarrow) samplesize += 5; if (samplesize < 30) samplesize = 30; if (samplesize > 95) samplesize = 95; if (getSample) { SampleMe(); } } void SampleMe() { float[] avec= new float[samplesize]; float sum, sd, var, av,tempx,tempx2; int tx, ty; count = 0; for (int j = 0; j < 1000; j++) { getNormal(samplesize,avec); sum = 0; for (int i = 0; i < samplesize; i++) sum += avec[i]; av = sum/samplesize; avvec[j] = av; sum = 0; for (int i = 0; i < samplesize; i++) sum += pow(avec[i]-av,2); var = sum/(samplesize - 1); sd = sqrt(var); sdvec[j] = sd; tx = (level-75)/5; ty = (samplesize-30)/5; tempx = av - sd*sqrt(1.0/float(samplesize))*ttable[tx][ty]; tempx2 = av + sd*sqrt(1.0/float(samplesize))*ttable[tx][ty]; lvec[j] = tempx; rvec[j] = tempx2; x1[j] = int((tempx-9)*325+25); x2[j] = int((tempx2-9)*325+25); if (tempx < 10 && tempx2 > 10) { count++; out[j] = 0; } else { out[j] = 1; } } } void getNormal(int number,float[] zvec) { float uone ; float utwo ; for (int i = 0; i < number; i++) { uone = random(0,1); utwo = random(0,1); zvec[i] = sqrt(-2*log(uone))*cos(2*PI*utwo)*1+10; } }