[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