[rkward-cvs] [rkward/work/distributions] rkward/plugins: Complete re-design for distributions plugins (for now). Beta and binomial are the first two converted.

Thomas Friedrichsmeier thomas.friedrichsmeier at ruhr-uni-bochum.de
Thu Jan 22 17:30:27 UTC 2015


Git commit dd3d55da50cc25ad642da38bd6b5a3bdaeeb5ea4 by Thomas Friedrichsmeier.
Committed on 22/01/2015 at 17:28.
Pushed by tfry into branch 'work/distributions'.

Complete re-design for distributions plugins (for now). Beta and binomial are the first two converted.

M  +4    -6    rkward/plugins/distributions.pluginmap
A  +9    -0    rkward/plugins/distributions/beta.js
A  +18   -0    rkward/plugins/distributions/beta.xml
D  +0    -14   rkward/plugins/distributions/beta_probabilities.js
D  +0    -15   rkward/plugins/distributions/beta_probabilities.xml
D  +0    -14   rkward/plugins/distributions/beta_quantiles.js
D  +0    -15   rkward/plugins/distributions/beta_quantiles.xml
M  +5    -16   rkward/plugins/distributions/binomial.js
M  +3    -2    rkward/plugins/distributions/binomial.xml
M  +62   -22   rkward/plugins/distributions/dist_common.js
M  +3    -2    rkward/plugins/distributions/dist_help_snippets.xml
M  +9    -5    rkward/plugins/distributions/dist_snippets.xml

http://commits.kde.org/rkward/dd3d55da50cc25ad642da38bd6b5a3bdaeeb5ea4

diff --git a/rkward/plugins/distributions.pluginmap b/rkward/plugins/distributions.pluginmap
index 98cdb1c..8864e70 100644
--- a/rkward/plugins/distributions.pluginmap
+++ b/rkward/plugins/distributions.pluginmap
@@ -27,11 +27,10 @@
 		<component type="standard" id="jb_test" file="tests/jb_test.xml" label="Jarque-Bera Normality Test" />
 
 		<!-- distributions -->
-		<component type="standard" id="beta_quantiles" file="beta_quantiles.xml" label="Beta quantiles" />
-		<component type="standard" id="beta_probabilities" file="beta_probabilities.xml" label="Beta probabilities" />
+		<component type="standard" id="beta_probabilities" file="beta.xml" label="Beta probabilities" />
 		<component type="standard" id="plot_beta_distribution" file="plot_beta_distribution.xml" label="Plot Beta distribution" />
 
-		<component type="standard" id="binomial_calculator" file="binomial.xml" label="Binomial probabilities, quantiles, densities" />
+		<component type="standard" id="binomial_probabilities" file="binomial.xml" label="Binomial probabilities, quantiles, densities" />
 		<component type="standard" id="plot_binomial_distribution" file="plot_binomial_distribution.xml" label="Plot binomial distribution" />
 
 		<component type="standard" id="cauchy_quantiles" file="cauchy_quantiles.xml" label="Cauchy quantiles" />
@@ -140,8 +139,7 @@
 			</menu>
 			<menu id="univariate_continuous_distributions" label="Univariate continuous distributions">
 				<menu id="beta_distribution" label="Beta">
-					<entry component="beta_quantiles" label="Beta quantiles"/>
-					<entry component="beta_probabilities" label="Beta probabilities"/>
+					<entry component="beta_probabilities" label="Beta probabilities, quantiles, densities"/>
 					<entry component="plot_beta_clt" label="Beta CLT"/>
 					<entry component="plot_beta_distribution" label="Plot Beta distribution"/>
 				</menu>
@@ -223,7 +221,7 @@
 
 			<menu id="univariate_discrete_distributions" label="Univariate discrete distributions">
 				<menu id="binomial_distribution" label="Binomial">
-					<entry component="binomial_calculator" label="Binomial probabilities, quantiles, densities"/>
+					<entry component="binomial_probabilities" label="Binomial probabilities, quantiles, densities"/>
 					<entry component="plot_binomial_clt" label="Binomial CLT"/>
 					<entry component="plot_binomial_distribution" label="Plot binomial distribution"/>
 				</menu>
diff --git a/rkward/plugins/distributions/beta.js b/rkward/plugins/distributions/beta.js
new file mode 100755
index 0000000..1c6e0b8
--- /dev/null
+++ b/rkward/plugins/distributions/beta.js
@@ -0,0 +1,9 @@
+include ("dist_common.js");
+
+function getDistSpecifics () {
+	var dist = new Object;
+	dist["params"] = ', shape1=' + getValue ("shape1") + ', shape2=' + getValue ("shape2") + ', ncp=' + getValue ("ncp");
+	dist["funstem"] = 'beta';
+	dist["header"] = new Header (i18n ('Beta distribution')).addFromUI ("shape1").addFromUI ("shape2").addFromUI ("ncp");
+	return dist;
+}
diff --git a/rkward/plugins/distributions/beta.xml b/rkward/plugins/distributions/beta.xml
new file mode 100755
index 0000000..8b1d067
--- /dev/null
+++ b/rkward/plugins/distributions/beta.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE rkplugin>
+<document>
+	<code file="beta.js" />
+	<logic>
+		<insert snippet="dialog_logic"/>
+	</logic>
+	<snippets>
+		<snippet id="dist_options">
+			<spinbox default_precision="1" type="real" initial="1" id="shape1" min="0" label="Shape 1"/>
+			<spinbox default_precision="1" type="real" initial="1" id="shape2" min="0" label="Shape 2"/>
+			<spinbox default_precision="1" type="real" min="0" initial="0" id="ncp" label="non-centrality parameter (ncp)"/>
+		</snippet>
+		<include file="dist_snippets.xml"/>
+	</snippets>
+	<dialog label="Beta probabilities, quantiles, densities" >
+		<insert snippet="dialog_layout"/>
+	</dialog>
+</document>
diff --git a/rkward/plugins/distributions/beta_probabilities.js b/rkward/plugins/distributions/beta_probabilities.js
deleted file mode 100755
index ba11341..0000000
--- a/rkward/plugins/distributions/beta_probabilities.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// globals
-var q;
-
-function calculate () {
-	q = "c (" + getList ("q.0").join (", ") + ")";
-
-	echo ('result <- (pbeta (q = ' + q + ', shape1 = ' + getValue ("shape1") + ', shape2 = ' + getValue ("shape2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n');
-}
-
-function printout () {
-	echo ('rk.header ("Beta probability", list ("Vector of quantiles", "' + q + '", "Shape 1", "' + getValue ("shape1") + '", "Shape 2", "' + getValue ("shape2") + '", "non-centrality parameter (ncp)", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n');
-	echo ('rk.results (result, titles="Beta probability")\n');
-}
-
diff --git a/rkward/plugins/distributions/beta_probabilities.xml b/rkward/plugins/distributions/beta_probabilities.xml
deleted file mode 100755
index 7c2fb8c..0000000
--- a/rkward/plugins/distributions/beta_probabilities.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE rkplugin>
-<document>
-	<code file="beta_probabilities.js" />
-	<snippets>
-		<snippet id="dist_options">
-			<spinbox default_precision="2" type="real" initial="1" id="shape1" min="0" label="Shape 1"/>
-			<spinbox default_precision="2" type="real" initial="1" id="shape2" min="0" label="Shape 2"/>
-			<spinbox default_precision="2" type="real" min="0" initial="0" id="ncp" label="non-centrality parameter (ncp)"/>
-		</snippet>
-		<include file="dist_snippets.xml"/>
-	</snippets>
-	<dialog label="Beta probability" >
-		<insert snippet="probabilities_layout"/>
-	</dialog>
-</document>
diff --git a/rkward/plugins/distributions/beta_quantiles.js b/rkward/plugins/distributions/beta_quantiles.js
deleted file mode 100755
index 0d8c112..0000000
--- a/rkward/plugins/distributions/beta_quantiles.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// globals
-var p;
-
-function calculate () {
-	p = "c (" + getList ("p.0").join (", ") + ")";
-
-	echo ('result <- (qbeta (p = ' + p + ', shape1 = ' + getValue ("shape1") + ', shape2 = ' + getValue ("shape2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n');
-}
-
-function printout () {
-	echo ('rk.header ("Beta quantiles", list ("Vector of probabilities", "' + p + '", "Shape 1", "' + getValue ("shape1") + '", "Shape 2", "' + getValue ("shape2") + '", "non-centrality parameter (ncp)", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n');
-	echo ('rk.results (result, titles="Beta quantiles")\n');
-}
-
diff --git a/rkward/plugins/distributions/beta_quantiles.xml b/rkward/plugins/distributions/beta_quantiles.xml
deleted file mode 100755
index 1220afc..0000000
--- a/rkward/plugins/distributions/beta_quantiles.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE rkplugin>
-<document>
-	<code file="beta_quantiles.js" />
-	<snippets>
-		<snippet id="dist_options">
-			<spinbox default_precision="2" type="real" initial="1" id="shape1" min="0" label="Shape 1"/>
-			<spinbox default_precision="2" type="real" initial="1" id="shape2" min="0" label="Shape 2"/>
-			<spinbox default_precision="2" type="real" min="0" initial="0" id="ncp" label="non-centrality parameter (ncp)"/>
-		</snippet>
-		<include file="dist_snippets.xml"/>
-	</snippets>
-	<dialog label="Beta quantiles" >
-		<insert snippet="quantiles_layout"/>
-	</dialog>
-</document>
diff --git a/rkward/plugins/distributions/binomial.js b/rkward/plugins/distributions/binomial.js
index e210483..7534c58 100644
--- a/rkward/plugins/distributions/binomial.js
+++ b/rkward/plugins/distributions/binomial.js
@@ -2,21 +2,10 @@ include ("dist_common.js");
 
 function getDistSpecifics () {
 	var dist = new Object;
-	dist["params"] = "bla";
-	dist["funstem"] = "binom";
-	dist["header"] = new Header (i18n ("Binomial tail probability"));
+	var size = getString ("size");
+	dist["params"] = ', size=' + size + ", prob=" + getString ("prob");
+	dist["funstem"] = 'binom';
+	dist["max_quantile"] = size;
+	dist["header"] = new Header (i18n ('Binomial distribution')).addFromUI ("size").addFromUI ("prob");
 	return dist;
 }
-
-/*function calculate () {
-	q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")";
-
-	echo ('result <- (pbinom (q = ' + q + ', size = ' + getValue ("size") + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n');
-}
-
-function printout () {
-	echo ('rk.header (, list ("Vector of quantiles", "' + q + '", "Binomial trials", "' + getValue ("size") + '", "Probability of success", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n');
-	echo ('rk.results (result, titles="Binomial tail probabilities")\n');
-}
-
-*/
\ No newline at end of file
diff --git a/rkward/plugins/distributions/binomial.xml b/rkward/plugins/distributions/binomial.xml
index b964ee1..b6198b0 100644
--- a/rkward/plugins/distributions/binomial.xml
+++ b/rkward/plugins/distributions/binomial.xml
@@ -4,13 +4,14 @@
 	<help file="binomial.rkh" />
 	<logic>
 		<insert snippet="dialog_logic"/>
+		<set id="ui_note.visible" to="true"/>
+		<set id="ui_note.text" to="Note: For the binomial distribution, quantiles can be interpreted as number of successes in the given number of trials."/>
 	</logic>
 	<snippets>
 		<snippet id="dist_options">
-			<spinbox default_precision="2" type="integer" initial="1" id="size" min="1" label="Binomial trials"/>
+			<spinbox type="integer" initial="10" id="size" min="1" label="Binomial trials"/>
 			<spinbox default_precision="2" type="real" initial="0.5" id="prob" min="0" max="1" label="Probability of success"/>
 		</snippet>
-		<snippet id="ui_note"><text>Note: For the binomial distribution, quantiles can be interpreted as number of successes in the given number of trials.</text></snippet>
 		<include file="dist_snippets.xml"/>
 	</snippets>
 	<dialog label="Binomial probabilities, quantiles, densities" >
diff --git a/rkward/plugins/distributions/dist_common.js b/rkward/plugins/distributions/dist_common.js
index d92eb35..7eaadef 100644
--- a/rkward/plugins/distributions/dist_common.js
+++ b/rkward/plugins/distributions/dist_common.js
@@ -1,38 +1,78 @@
 var mode;
-var values;
-var logp;
-var lowert;
+var logpd;
 var dist;
+var invar;
+var outvar;
 
 function calculate () {
 	mode = getString ("mode");
+	dist = getDistSpecifics ();
+	invar = 'q';
+	if (mode == 'q') invar = 'p'
+	outvar = mode;
+
+	var params;
+	if (mode == "d") {
+		logpd = getBoolean ("logd.state");
+		params = logpd ? ', log=TRUE' : '';
+		// NOTE: param lower.tail is not applicable for density function
+	} else {
+		logpd = getBoolean ("logp.state");
+		params = logpd ? ', log.p=TRUE' : '';
+		if (!getBoolean ("lower.state")) {
+			params += ', lower.tail=FALSE';
+		}
+	}
+
+	var values;
 	if (mode == "q") values = getList ("p.0");
 	else values = getList ("q.0");
-	if (values.length > 1) values = 'c (' + values.join (', ') + ')';
+	if (values.length < 1) {
+		var max_auto_sequence_length = 20;
 
-	logp = getBoolean ("logp.state");
-	var logparam = logp ? ', logp=TRUE' : '';
-	lowert = getBoolean ("lower.state");
-	var tailparam = lowert ? '' : ', lower.tail=FALSE';
+		if (invar == 'q') {
+			var maxquant = dist["max_quantile"];
+			if (typeof (maxquant) != 'undefined') {
+				if (maxquant <= max_auto_sequence_length) {
+					values = '0:' + String (maxquant);
+				} else {
+					values = 'seq.int (0, ' + String (maxquant) + ', by=' + String (Math.ceil (maxquant / max_auto_sequence_length)) + ')';
+				}
+			} else {
+				values = 'seq (0, 1, length.out=' + String (max_auto_sequence_length+1) + ')';
+			}
+		} else {    // invar == 'p'
+			if (logpd) {
+				values = '-' + String (max_auto_sequence_length) + ':0';
+			} else {
+				values = 'seq (0, 1, length.out=' + String (max_auto_sequence_length+1) + ')';
+			}
+		}
+	} else {
+		if (values.length > 1) values = 'c (' + values.join (', ') + ')';
+	}
 
-	dist = getDistSpecifics ();
+	echo (invar + ' <- ' + values + '\n');
+	echo (outvar + ' <- ' + mode + dist["funstem"] + ' (' + invar + dist["params"] + params + ')\n');
+}
 
-	var plabel = logp ? i18n ('Log Probability') : i18n ('Probability');
-	var qlabel = i18n ('Quantile');
-	var dlabel = i18n ('Density');
-
-	echo ('result <- data.frame (');
-	echo (mode == "q" ? plabel : qlabel); 
-	echo ('=' + values + ', ');
-	if (mode == "d") echo (dlabel + '=d' + dist["funstem"] + ' (' + values + dist["params"] + logparam + ')');                  // NOTE: param lower.tail is not applicable for density function
-	else if (mode == "p") echo (plabel + '=p' + dist["funstem"] + ' (' + values + dist["params"] + tailparam + logparam + ')');
-	else if (mode == "q") echo (qlabel + '=q' + dist["funstem"] + ' (' + values + dist["params"] + tailparam + logparam + ')');
-	echo (')\n');
+function getLabel (quantity) {
+	if (quantity == "q") return i18n ('Quantile');
+	if (quantity == "d") {
+		if (logpd) return i18nc ('logarithm of density', 'log (Density)');
+		return i18n ('Density');
+	}
+	// quantity == "p"
+	if (logpd) return i18nc ('logarithm of probability', 'log (Probability)');
+	return i18n ('Probability');
 }
 
 function printout () {
 	header = dist["header"];
-	header.add (i18nc ("Tail of distribution function: lower / upper", 'Tail'), lowert ? i18n ('Lower tail: P[X ≤ x]') : i18n ('Upper tail: P[X > x]'));
+	if (mode != "d") {
+		header.add (i18nc ("Tail of distribution function: lower / upper", 'Tail'), getBoolean ("lower.state") ? i18n ('Lower tail: P[X ≤ x]') : i18n ('Upper tail: P[X > x]'));
+	}
 	header.print ();
-	echo ('rk.print (result)\n');
+
+	echo ('rk.results (data.frame (' + getLabel (invar) + '=' + invar + ', ' + getLabel (outvar) + '=' + outvar + ', check.names=FALSE))\n');
 }
diff --git a/rkward/plugins/distributions/dist_help_snippets.xml b/rkward/plugins/distributions/dist_help_snippets.xml
index a32c2e3..43f4ef1 100644
--- a/rkward/plugins/distributions/dist_help_snippets.xml
+++ b/rkward/plugins/distributions/dist_help_snippets.xml
@@ -2,9 +2,10 @@
 	<snippet id="dialog_settings">
 		<caption title="Generic settings"/>
 		<setting id="mode">Specify the quantitiy to be calculated (probabilites, densities, or quantiles), and the quantity given (probabilities or quantiles)</setting>
-		<setting id="q">When calculating densities or probabilites, specify one or more quantiles.</setting>
-		<setting id="p">When calculating quantiles, specify one or more probabilities (optionally logarithmic; see below).</setting>
+		<setting id="q">When calculating densities or probabilites, specify one or more quantiles. If this setting is left empty, a sequence of evenly spaced quantiles will be used, instead.</setting>
+		<setting id="p">When calculating quantiles, specify one or more probabilities, optionally logarithmic (see below). If this setting is left empty, a sequence sequence of evenly spaced (log) probabilities will be used, instead.</setting>
 		<setting id="logp">When calculating probabilities, return these as log (p). When specifying probabilites, these are supplied as log (p).</setting>
+		<setting id="logd">When calculating densities, return these as log (d).</setting>
 		<setting id="lower">If checked (the default) probabilities are P[X ≤ x]. Otherwise (upper tail) probabilities are P[X > x]</setting>
 		<caption title="Distribution specific settings"/>
 	</snippet>
diff --git a/rkward/plugins/distributions/dist_snippets.xml b/rkward/plugins/distributions/dist_snippets.xml
index c325d17..63855a9 100644
--- a/rkward/plugins/distributions/dist_snippets.xml
+++ b/rkward/plugins/distributions/dist_snippets.xml
@@ -5,9 +5,12 @@
 		<convert id="do_q" mode="equals" sources="mode.string" standard="q"/>
 
 		<connect client="lower.enabled" governor="do_d.not"/>
-		<connect client="logp.enabled" governor="do_d.not"/>
+		<connect client="logp.visible" governor="do_d.not"/>
+		<connect client="logd.visible" governor="do_d"/>
 		<connect client="q.visible" governor="do_q.not"/>
 		<connect client="p.visible" governor="do_q"/>
+
+		<set id="ui_note.visible" to="false"/>
 	</snippet>
 	<snippet id="dialog_layout">
 		<dropdown id="mode" label="Mode">
@@ -18,9 +21,10 @@
 			<row>
 				<frame>
 					<column>
-						<matrix columns="1" allow_user_resize_columns="false" min_rows="1" required="true" mode="real" fixed_width="true" min="0" id="q" label="Vector of quantiles"/>
-						<matrix columns="1" allow_user_resize_columns="false" min_rows="1" required="true" mode="real" fixed_width="true" id="p" label="Vector of probabilities"/>
-						<checkbox id="logp" label="log probabilities" />
+						<matrix columns="1" allow_user_resize_columns="false" required="true" mode="real" fixed_width="true" min="0" id="q" label="Specify Quantiles (optional)"/>
+						<matrix columns="1" allow_user_resize_columns="false" required="true" mode="real" fixed_width="true" id="p" label="Specify Probabilities (optional)"/>
+						<checkbox id="logp" label="Logarithmic probabilities" />
+						<checkbox id="logd" label="Logarithmic densities" />
 						<checkbox id="lower" label="Lower tail" checked="true" />
 						<stretch/>
 					</column>
@@ -32,6 +36,6 @@
 					</column>
 				</frame>
 			</row>
-			<insert snippet="ui_note"/>
+			<text id="ui_note"/>
 	</snippet>
 </document>


------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
rkward-cvs mailing list
rkward-cvs at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rkward-cvs


More information about the rkward-tracker mailing list