package org.geogebra.common.gui.view.probcalculator;
import org.geogebra.common.main.App;
import org.geogebra.common.main.Localization;
import org.geogebra.common.util.lang.Unicode;
/**
* @author G. Sturr
*
*/
public class StatisticsCalculatorHTML {
private StatisticsCalculator statCalc;
private StatisticsCollection sc;
private String strSample1, strSample2, strMean, strSD, strSigma,
strSuccesses, strN, strSE, strDF, strUpper, strLower, strInterval,
strP, strChiSq, strZ, strT, strPooled;
private Localization loc;
private final static String newline = "<br/>";
/*********************************************
* Constructs StatisticsCalculatorHTML
*
* @param app
* @param statCalc
* @param sc
*/
public StatisticsCalculatorHTML(App app, StatisticsCalculator statCalc,
StatisticsCollection sc) {
this.loc = app.getLocalization();
this.statCalc = statCalc;
this.sc = sc;
this.setLabelStrings();
}
/**
* Formats a number string using local format settings.
*
* @param x
* @return
*/
public String format(double x) {
return statCalc.format(x);
}
private void setLabelStrings() {
strSample1 = loc.getMenu("Sample1");
strSample2 = loc.getMenu("Sample2");
strMean = loc.getMenu("Mean");
strSD = loc.getMenu("SampleStandardDeviation.short");
strSigma = loc.getMenu("StandardDeviation.short");
strSuccesses = loc.getMenu("Successes");
strN = loc.getMenu("N");
strSE = loc.getMenu("StandardError.short");
strDF = loc.getMenu("DegreesOfFreedom.short");
strP = loc.getMenu("PValue");
strZ = loc.getMenu("ZStatistic");
strT = loc.getMenu("TStatistic");
strUpper = loc.getMenu("UpperLimit");
strLower = loc.getMenu("LowerLimit");
strInterval = loc.getMenu("Interval");
strPooled = loc.getMenu("Pooled");
strChiSq = Unicode.Chi + "" + Unicode.Superscript_2;
}
public StringBuilder getStatString() {
StringBuilder sb = new StringBuilder("");
sb.append(statCalc.getMapProcedureToName()
.get(statCalc.getSelectedProcedure()));
sb.append(newline);
sb.append(newline);
switch (statCalc.getSelectedProcedure()) {
case ZMEAN_TEST:
String[][] zTestTable = { { strMean, format(sc.mean) },
{ strSigma, format(sc.sd) }, { strSE, format(sc.se) },
{ strN, format(sc.n) }, { strZ, format(sc.testStat) },
{ strP, format(sc.P) } };
sb.append(htmlTable(zTestTable, true));
break;
case TMEAN_TEST:
String[][] tTestTable = { { strMean, format(sc.mean) },
{ strSD, format(sc.sd) }, { strSE, format(sc.se) },
{ strN, format(sc.n) }, { strDF, format(sc.df) },
{ strT, format(sc.testStat) }, { strP, format(sc.P) } };
sb.append(htmlTable(tTestTable, true));
break;
case ZMEAN_CI:
String[][] zCITable = { { strMean, format(sc.mean) },
{ strSigma, format(sc.sd) }, { strSE, format(sc.se) },
{ strN, format(sc.n) }, { strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval, getInterval(sc.mean, sc.me) } };
sb.append(htmlTable(zCITable, true));
break;
case TMEAN_CI:
String[][] tCITable = { { strMean, format(sc.mean) },
{ strSD, format(sc.sd) }, { strSE, format(sc.se) },
{ strN, format(sc.n) }, { strDF, format(sc.df) },
{ strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval, getInterval(sc.mean, sc.me) } };
sb.append(htmlTable(tCITable, true));
break;
case ZMEAN2_TEST:
String[][] zTest2SampleTable = {
{ " ", strSample1, strSample2 },
{ strMean, format(sc.mean), format(sc.mean2) },
{ strSigma, format(sc.sd), format(sc.sd2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strZ, format(sc.testStat) },
{ strP, format(sc.P) } };
sb.append(htmlTable(zTest2SampleTable, true));
break;
case ZMEAN2_CI:
String[][] zCI2SampleTable = { { " ", strSample1, strSample2 },
{ strMean, format(sc.mean), format(sc.mean2) },
{ strSigma, format(sc.sd), format(sc.sd2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval, getInterval(sc.mean - sc.mean2, sc.me) } };
sb.append(htmlTable(zCI2SampleTable, true));
break;
case TMEAN2_TEST:
String[][] tTest2SampleTable = {
{ " ", strSample1, strSample2 },
{ strMean, format(sc.mean), format(sc.mean2) },
{ strSD, format(sc.sd), format(sc.sd2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strDF, format(sc.df) },
{ strT, format(sc.testStat) }, { strP, format(sc.P) } };
sb.append(htmlTable(tTest2SampleTable, true));
break;
case TMEAN2_CI:
String[][] tCI2SampleTable = { { " ", strSample1, strSample2 },
{ strMean, format(sc.mean), format(sc.mean2) },
{ strSD, format(sc.sd), format(sc.sd2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strDF, format(sc.df) },
{ strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval, getInterval(sc.mean - sc.mean2, sc.me) },
{ strPooled, isPooled() } };
sb.append(htmlTable(tCI2SampleTable, true));
break;
case ZPROP_TEST:
String[][] zPropTestTable = { { strSuccesses, format(sc.count) },
{ strN, format(sc.n) }, { strZ, format(sc.testStat) },
{ strP, format(sc.P) } };
sb.append(htmlTable(zPropTestTable, true));
break;
case ZPROP_CI:
String[][] zPropEstTable = { { strSuccesses, format(sc.count) },
{ strN, format(sc.n) }, { strSE, format(sc.se) },
{ strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval, getInterval(sc.getProportion(), sc.me) } };
sb.append(htmlTable(zPropEstTable, true));
break;
case ZPROP2_TEST:
String[][] zProp2TestSampleTable = {
{ " ", strSample1, strSample2 },
{ strSuccesses, format(sc.count), format(sc.count2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strZ, format(sc.testStat) },
{ strP, format(sc.P) } };
sb.append(htmlTable(zProp2TestSampleTable, true));
break;
case ZPROP2_CI:
String[][] zProp2CISampleTable = {
{ " ", strSample1, strSample2 },
{ strSuccesses, format(sc.count), format(sc.count2) },
{ strN, format(sc.n), format(sc.n2) },
{ strSE, format(sc.se) }, { strLower, format(sc.lower) },
{ strUpper, format(sc.upper) },
{ strInterval,
getInterval(
sc.getProportion() - sc.getProportion2(),
sc.me) } };
sb.append(htmlTable(zProp2CISampleTable, true));
break;
case CHISQ_TEST:
case GOF_TEST:
String[][] chiSqTestTable = { { strDF, format(sc.df) },
{ strChiSq, format(sc.testStat) }, { strP, format(sc.P) } };
sb.append(htmlTable(chiSqTestTable, true));
}
// System.out.println(sb.toString());
return sb;
}
private String isPooled() {
return sc.pooled ? loc.getMenu("True") : loc.getMenu("False");
}
private String getInterval(double stat, double me) {
return format(stat) + " " + Unicode.PLUSMINUS + " "
+ format(me);
}
private static StringBuilder htmlTable(String[][] s, boolean isRowBased) {
StringBuilder sb = new StringBuilder();
// sb.append("<table border=1 cellspacing=0 cellpadding=3> ");
sb.append("<table> ");
if (isRowBased) {
for (int r = 0; r < s.length; r++) {
sb.append("<tr>");
for (int c = 0; c < s[r].length; c++) {
sb.append("<td>" + s[r][c] + "</td>");
}
sb.append("</tr>");
}
} else {
for (int r = 0; r < s[0].length; r++) {
sb.append("<tr>");
for (int c = 0; c < s.length; c++) {
sb.append("<td>" + s[c][r] + "</td>");
}
sb.append("</tr>");
}
}
sb.append("</table> ");
return sb;
}
}