You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2015/05/03 22:41:59 UTC
[math] Add userguide example for integer distributions. Fix title in
real distribution overview.
Repository: commons-math
Updated Branches:
refs/heads/master 613afdb0c -> b313ae688
Add userguide example for integer distributions. Fix title in real distribution overview.
Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/b313ae68
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/b313ae68
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/b313ae68
Branch: refs/heads/master
Commit: b313ae68888445f4c08521bbc8d19f39310c6890
Parents: 613afdb
Author: Thomas Neidhart <th...@gmail.com>
Authored: Sun May 3 22:41:45 2015 +0200
Committer: Thomas Neidhart <th...@gmail.com>
Committed: Sun May 3 22:41:45 2015 +0200
----------------------------------------------------------------------
.../IntegerDistributionComparison.java | 239 +++++++++++++++++++
.../userguide/RealDistributionComparison.java | 2 +-
2 files changed, 240 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-math/blob/b313ae68/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
----------------------------------------------------------------------
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
new file mode 100644
index 0000000..5867aed
--- /dev/null
+++ b/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.math4.userguide;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.apache.commons.math4.distribution.BinomialDistribution;
+import org.apache.commons.math4.distribution.GeometricDistribution;
+import org.apache.commons.math4.distribution.HypergeometricDistribution;
+import org.apache.commons.math4.distribution.IntegerDistribution;
+import org.apache.commons.math4.distribution.PascalDistribution;
+import org.apache.commons.math4.distribution.PoissonDistribution;
+import org.apache.commons.math4.distribution.UniformIntegerDistribution;
+import org.apache.commons.math4.distribution.ZipfDistribution;
+import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
+
+import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.ChartBuilder;
+import com.xeiam.xchart.Series;
+import com.xeiam.xchart.SeriesMarker;
+import com.xeiam.xchart.StyleManager.ChartType;
+import com.xeiam.xchart.StyleManager.LegendPosition;
+import com.xeiam.xchart.XChartPanel;
+
+/**
+ * Displays pdf/cdf for integer distributions.
+ */
+public class IntegerDistributionComparison {
+
+ public static void addPDFSeries(Chart chart, IntegerDistribution distribution, String desc, int lowerBound, int upperBound) {
+ // generates Log data
+ List<Number> xData = new ArrayList<Number>();
+ List<Number> yData = new ArrayList<Number>();
+ for (int x = lowerBound; x <= upperBound; x += 1) {
+ try {
+ double probability = distribution.probability(x);
+ if (! Double.isInfinite(probability) && ! Double.isNaN(probability)) {
+ xData.add(x);
+ yData.add(probability);
+ }
+ } catch (Exception e) {
+ // ignore
+ // some distributions may reject certain values depending on the parameter settings
+ }
+ }
+
+ Series series = chart.addSeries(desc, xData, yData);
+ series.setMarker(SeriesMarker.NONE);
+ series.setLineStyle(new BasicStroke(1.2f));
+ }
+
+ public static void addCDFSeries(Chart chart, IntegerDistribution distribution, String desc,
+ int lowerBound, int upperBound) {
+ // generates Log data
+ List<Number> xData = new ArrayList<Number>();
+ List<Number> yData = new ArrayList<Number>();
+ for (int x = lowerBound; x <= upperBound; x += 1) {
+ double density = distribution.cumulativeProbability(x);
+ if (! Double.isInfinite(density) && ! Double.isNaN(density)) {
+ xData.add(x);
+ yData.add(density);
+ }
+ }
+
+ Series series = chart.addSeries(desc, xData, yData);
+ series.setMarker(SeriesMarker.NONE);
+ series.setLineStyle(new BasicStroke(1.2f));
+ }
+
+ public static Chart createChart(String title, int minX, int maxX, LegendPosition position) {
+ Chart chart = new ChartBuilder().width(235).height(200).build();
+
+ // Customize Chart
+ chart.setChartTitle(title);
+ chart.getStyleManager().setChartTitleVisible(true);
+ chart.getStyleManager().setChartTitleFont(new Font("Arial", Font.PLAIN, 10));
+ chart.getStyleManager().setLegendPosition(position);
+ chart.getStyleManager().setLegendVisible(true);
+ chart.getStyleManager().setLegendFont(new Font("Arial", Font.PLAIN, 10));
+ chart.getStyleManager().setLegendPadding(6);
+ chart.getStyleManager().setLegendSeriesLineLength(6);
+ chart.getStyleManager().setAxisTickLabelsFont(new Font("Arial", Font.PLAIN, 9));
+
+ chart.getStyleManager().setXAxisMin(minX);
+ chart.getStyleManager().setXAxisMax(maxX);
+ chart.getStyleManager().setChartBackgroundColor(Color.white);
+ chart.getStyleManager().setChartPadding(4);
+
+ chart.getStyleManager().setChartType(ChartType.Line);
+ return chart;
+ }
+
+ public static JComponent createComponent(String distributionName, int minX, int maxX, String[] seriesText,
+ IntegerDistribution... series) {
+ JComponent container = new JPanel();
+ container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
+
+ container.add(new JLabel(distributionName));
+
+ Chart chart = createChart("PDF", minX, maxX, LegendPosition.InsideNE);
+ int i = 0;
+ for (IntegerDistribution d : series) {
+ addPDFSeries(chart, d, seriesText[i++], minX, maxX);
+ }
+ container.add(new XChartPanel(chart));
+
+ chart = createChart("CDF", minX, maxX, LegendPosition.InsideSE);
+ i = 0;
+ for (IntegerDistribution d : series) {
+ addCDFSeries(chart, d, seriesText[i++], minX, maxX);
+ }
+ container.add(new XChartPanel(chart));
+
+ container.setBorder(BorderFactory.createLineBorder(Color.black, 1));
+ return container;
+ }
+
+ @SuppressWarnings("serial")
+ public static class Display extends ExampleFrame {
+
+ private JComponent container;
+
+ public Display() {
+ setTitle("Commons-Math: Integer distributions overview");
+ setSize(1320, 920);
+
+ container = new JPanel();
+ container.setLayout(new GridBagLayout());
+
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.VERTICAL;
+ c.gridx = 0;
+ c.gridy = 0;
+ c.insets = new Insets(2, 2, 2, 2);
+
+ JComponent comp = null;
+
+ comp = createComponent("Binomial", 0, 40,
+ new String[] { "p=0.5,n=20", "p=0.7,n=20", "p=0.5,n=40" },
+ new BinomialDistribution(20, 0.5),
+ new BinomialDistribution(20, 0.7),
+ new BinomialDistribution(40, 0.5));
+ container.add(comp, c);
+
+ c.gridx++;
+ comp = createComponent("Geometric", 0, 10,
+ new String[] { "p=0.2", "p=0.5", "p=0.8" },
+ new GeometricDistribution(0.2),
+ new GeometricDistribution(0.5),
+ new GeometricDistribution(0.8));
+ container.add(comp, c);
+
+ c.gridx++;
+ comp = createComponent("Hypergeometric", 0, 10,
+ new String[] { "p=0.3", "p=0.5", "p=0.75" },
+ new HypergeometricDistribution(100, 6, 20),
+ new HypergeometricDistribution(100, 10, 20),
+ new HypergeometricDistribution(100, 15, 20));
+ container.add(comp, c);
+
+ c.gridx++;
+ comp = createComponent("Pascal", 0, 50,
+ new String[] { "p=0.3", "p=0.5", "p=0.7" },
+ new PascalDistribution(10, 0.3),
+ new PascalDistribution(10, 0.5),
+ new PascalDistribution(10, 0.7));
+ container.add(comp, c);
+
+ c.gridy++;
+ c.gridx = 0;
+ comp = createComponent("Poisson", 0, 20,
+ new String[] { "λ=1", "λ=4", "λ=10" },
+ new PoissonDistribution(1),
+ new PoissonDistribution(4),
+ new PoissonDistribution(10));
+ container.add(comp, c);
+
+ c.gridx++;
+ comp = createComponent("Uniform", 0, 30,
+ new String[] { "l=1,u=10", "l=5,u=20", "l=1,u=25" },
+ new UniformIntegerDistribution(1, 10),
+ new UniformIntegerDistribution(5, 20),
+ new UniformIntegerDistribution(1, 25));
+ container.add(comp, c);
+
+ c.gridx++;
+ comp = createComponent("Zipf", 0, 15,
+ new String[] { "n=10,e=0.5", "n=10,e=1", "n=10,e=2", "n=10,e=5" },
+ new ZipfDistribution(10, 0.5),
+ new ZipfDistribution(10, 1),
+ new ZipfDistribution(10, 2),
+ new ZipfDistribution(10, 5));
+ container.add(comp, c);
+
+ JScrollPane scrollPane = new JScrollPane(container);
+ add(scrollPane);
+
+ }
+
+ @Override
+ public Component getMainPanel() {
+ return container;
+ }
+
+ }
+
+ public static void main(String[] args) {
+ ExampleUtils.showExampleFrame(new Display());
+ }
+}
http://git-wip-us.apache.org/repos/asf/commons-math/blob/b313ae68/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
----------------------------------------------------------------------
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
index 6c7ec71..315659b 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
@@ -60,7 +60,7 @@ import com.xeiam.xchart.StyleManager.LegendPosition;
import com.xeiam.xchart.XChartPanel;
/**
- * Plots 2D samples drawn from various pseudo / quasi-random generators.
+ * Displays pdf/cdf for real distributions.
*/
public class RealDistributionComparison {