/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.viewer;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import com.rapidminer.gui.look.Colors;
import com.rapidminer.gui.properties.PropertyPanel;
import com.rapidminer.gui.tools.ExtendedJScrollPane;
import com.rapidminer.gui.tools.ExtendedJTable;
import com.rapidminer.tools.Tools;
/**
*
* @author Sebastian Land, Marco Boeck
*/
public class AnovaCalculatorViewer extends JPanel {
private static final long serialVersionUID = 1L;
public AnovaCalculatorViewer(String name, double sumSquaresBetween, int degreesOfFreedom1, double meanSquaresBetween,
double fValue, double prob, double sumSquaresResiduals, int degreesOfFreedom2, double meanSquaresResiduals,
double alpha) {
this.setLayout(new BorderLayout());
String[] row1 = new String[] { "Between", Tools.formatNumber(sumSquaresBetween), String.valueOf(degreesOfFreedom1),
Tools.formatNumber(meanSquaresBetween), Tools.formatNumber(fValue), Tools.formatNumber(prob) };
String[] row2 = new String[] { "Residuals", Tools.formatNumber(sumSquaresResiduals),
String.valueOf(degreesOfFreedom2), Tools.formatNumber(meanSquaresResiduals), "", "" };
String[] row3 = new String[] { "Total", Tools.formatNumber(sumSquaresBetween + sumSquaresResiduals),
String.valueOf(degreesOfFreedom1 + degreesOfFreedom2), "", "", "" };
String[] header = new String[] { "Source", "Square Sums", "DF", "Mean Squares", "F", "Prob" };
TableModel model = new DefaultTableModel(new String[][] { row1, row2, row3 }, header);
ExtendedJTable table = new ExtendedJTable(model, true);
table.setRowHeight(PropertyPanel.VALUE_CELL_EDITOR_HEIGHT);
table.setRowHighlighting(true);
String label2Text = null;
if (prob < alpha) {
label2Text = "Difference between actual mean values is probably significant, since " + Tools.formatNumber(prob)
+ " < alpha = " + Tools.formatNumber(alpha);
} else {
label2Text = "Difference between actual mean values is probably not significant, since "
+ Tools.formatNumber(prob) + " > alpha = " + Tools.formatNumber(alpha);
}
JLabel label1 = new JLabel("Probability for random values with the same result: " + Tools.formatNumber(prob));
JLabel label2 = new JLabel(label2Text);
JPanel panel = new JPanel(new GridBagLayout());
panel.setOpaque(true);
panel.setBackground(Colors.WHITE);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(42, 10, 20, 10);
JScrollPane scrollPane = new ExtendedJScrollPane(table);
scrollPane.setBorder(null);
scrollPane.setBackground(Colors.WHITE);
scrollPane.getViewport().setBackground(Colors.WHITE);
panel.add(scrollPane, gbc);
gbc.gridy += 1;
gbc.weighty = 0.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(5, 10, 5, 10);
panel.add(label1, gbc);
gbc.gridy += 1;
panel.add(label2, gbc);
this.add(panel, BorderLayout.CENTER);
}
}