package org.geogebra.common.gui.view.data; import java.util.HashMap; import java.util.Map.Entry; import org.geogebra.common.main.App; import org.geogebra.common.main.Localization; /** * * Extended JPanel that displays: (1) summary statistics for the current data * set (2) interactive panels for performing statistical inference with the * current data set * * @author G. Sturr * */ public class StatisticsModel { public interface IStatisticsModelListener { void addInferenceMode(String item); void selectInferenceMode(String string); String getSeparator(); void updateOneVarInference(int mode); void updateTwoVarInference(int mode); void updateAnovaTable(); } // inference mode constants public static final int SUMMARY_STATISTICS = 0; // one var public static final int INFER_ZTEST = 1; public static final int INFER_ZINT = 2; public static final int INFER_TTEST = 3; public static final int INFER_TINT = 4; // two var public static final int INFER_TTEST_2MEANS = 20; public static final int INFER_TTEST_PAIRED = 21; public static final int INFER_TINT_2MEANS = 22; public static final int INFER_TINT_PAIRED = 23; // multi var public static final int INFER_ANOVA = 40; // inference mode selection private HashMap<Integer, String> labelMap; private HashMap<String, Integer> labelMapReverse; private int selectedMode = SUMMARY_STATISTICS; // ggb fields private DataAnalysisModel daModel; private IStatisticsModelListener listener; private Localization loc; /************************************* * Constructor * * @param app * @param statDialog */ public StatisticsModel(App app, DataAnalysisModel model, IStatisticsModelListener listener) { this.loc = app.getLocalization(); this.daModel = model; this.listener = listener; createLabelMap(); } public void fillInferenceModes() { switch (daModel.getMode()) { default: case DataAnalysisModel.MODE_ONEVAR: listener.addInferenceMode(labelMap.get(SUMMARY_STATISTICS)); listener.addInferenceMode(labelMap.get(INFER_ZTEST)); listener.addInferenceMode(labelMap.get(INFER_TTEST)); listener.addInferenceMode(listener.getSeparator()); listener.addInferenceMode(labelMap.get(INFER_ZINT)); listener.addInferenceMode(labelMap.get(INFER_TINT)); break; case DataAnalysisModel.MODE_REGRESSION: listener.addInferenceMode(labelMap.get(SUMMARY_STATISTICS)); break; case DataAnalysisModel.MODE_MULTIVAR: listener.addInferenceMode(labelMap.get(SUMMARY_STATISTICS)); listener.addInferenceMode(labelMap.get(INFER_ANOVA)); listener.addInferenceMode(labelMap.get(INFER_TTEST_2MEANS)); listener.addInferenceMode(labelMap.get(INFER_TTEST_PAIRED)); listener.addInferenceMode(listener.getSeparator()); listener.addInferenceMode(labelMap.get(INFER_TINT_2MEANS)); listener.addInferenceMode(labelMap.get(INFER_TINT_PAIRED)); break; } listener.selectInferenceMode(labelMap.get(getSelectedMode())); } /** * Creates two hash maps for JComboBox selections, 1) plotMap: Key = integer * mode, Value = JComboBox menu string 2) plotMapReverse: Key = JComboBox * menu string, Value = integer mode */ private void createLabelMap() { if (labelMap == null) { labelMap = new HashMap<Integer, String>(); } labelMap.clear(); labelMap.put(INFER_TTEST, loc.getMenu("TMeanTest")); labelMap.put(INFER_TINT, loc.getMenu("TMeanInterval")); labelMap.put(INFER_ZTEST, loc.getMenu("ZMeanTest")); labelMap.put(INFER_ZINT, loc.getMenu("ZMeanInterval")); labelMap.put(INFER_ANOVA, loc.getMenu("ANOVA")); labelMap.put(SUMMARY_STATISTICS, loc.getMenu("Statistics")); labelMap.put(INFER_TTEST_2MEANS, loc.getMenu("TTestDifferenceOfMeans")); labelMap.put(INFER_TTEST_PAIRED, loc.getMenu("TTestPairedDifferences")); labelMap.put(INFER_TINT_2MEANS, loc.getMenu("TEstimateDifferenceOfMeans")); labelMap.put(INFER_TINT_PAIRED, loc.getMenu("TEstimatePairedDifferences")); // REVERSE LABEL MAP labelMapReverse = new HashMap<String, Integer>(); for (Entry<Integer, String> entry : labelMap.entrySet()) { labelMapReverse.put(entry.getValue(), entry.getKey()); } } public void update() { switch (getSelectedMode()) { default: case INFER_ZTEST: case INFER_TTEST: case INFER_ZINT: case INFER_TINT: listener.updateOneVarInference(selectedMode); break; case INFER_TTEST_2MEANS: case INFER_TTEST_PAIRED: case INFER_TINT_2MEANS: case INFER_TINT_PAIRED: listener.updateTwoVarInference(selectedMode); break; case INFER_ANOVA: listener.updateAnovaTable(); break; } } public void selectInferenceMode(String item) { if (item.equals(listener.getSeparator())) { listener.selectInferenceMode(labelMap.get(getSelectedMode())); } else { selectedMode = labelMapReverse.get(item); } } public int getSelectedMode() { return selectedMode; } public void setSelectedMode(int selectedMode) { this.selectedMode = selectedMode; } }