Move d3.stats to external lib, science.stats.js!
This commit is contained in:
Родитель
bb21bbd8ce
Коммит
e0a0455f7b
16
Makefile
16
Makefile
|
@ -6,8 +6,6 @@ all: \
|
|||
d3.min.js \
|
||||
d3.behavior.js \
|
||||
d3.behavior.min.js \
|
||||
d3.stats.js \
|
||||
d3.stats.min.js \
|
||||
d3.chart.js \
|
||||
d3.chart.min.js \
|
||||
d3.layout.js \
|
||||
|
@ -101,20 +99,6 @@ d3.behavior.js: \
|
|||
src/behavior/zoom.js \
|
||||
src/end.js
|
||||
|
||||
d3.stats.js: \
|
||||
src/start.js \
|
||||
src/stats/stats.js \
|
||||
src/stats/bandwidth.js \
|
||||
src/stats/kernel.js \
|
||||
src/stats/kde.js \
|
||||
src/stats/iqr.js \
|
||||
src/stats/mean.js \
|
||||
src/stats/median.js \
|
||||
src/stats/mode.js \
|
||||
src/stats/quantiles.js \
|
||||
src/stats/variance.js \
|
||||
src/end.js
|
||||
|
||||
d3.chart.js: \
|
||||
src/start.js \
|
||||
src/chart/chart.js \
|
||||
|
|
|
@ -291,7 +291,11 @@ function d3_chart_boxWhiskers(d) {
|
|||
|
||||
function d3_chart_boxQuartiles(d) {
|
||||
// TODO avoid sorting data twice?
|
||||
return d3.stats.quantiles(d, [.25, .5, .75]);
|
||||
var n = d.length;
|
||||
return [.25, .5, .75].map(function(q) {
|
||||
q *= n;
|
||||
return ~~q === q ? (d[q] + d[q + 1]) / 2 : d[Math.round(q)];
|
||||
});
|
||||
}
|
||||
// ranges (bad, satisfactory, good)
|
||||
// measures (actual, forecast)
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -1 +0,0 @@
|
|||
(function(){d3.stats={},d3.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(d3.stats.variance(a));(lo=Math.min(b,d3.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=d3.stats.iqr(a)/1.34;return 1.06*Math.min(Math.sqrt(d3.stats.variance(a)),b)*Math.pow(a.length,-0.2)}},d3.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},d3.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=d3.stats.kernel.gaussian,b=[],c=d3.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=d3.functor(a);return d};return d},d3.stats.iqr=function(a){var b=d3.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},d3.stats.mean=function(a){var b=a.length;if(b===0)return NaN;var c=0,d=-1;while(++d<b)c+=(a[d]-c)/(d+1);return c},d3.stats.median=function(a){return d3.stats.quantiles(a,[.5])[0]},d3.stats.mode=function(a){a=a.slice().sort(d3.ascending);var b,c=a.length,d=-1,e=d,f=null,g=0,h,i;while(++d<c)(i=a[d])!==f&&((h=d-e)>g&&(g=h,b=f),f=i,e=d);return b},d3.stats.quantiles=function(a,b){a=a.slice().sort(d3.ascending);var c=a.length-1;return b.map(function(b){if(b===0)return a[0];if(b===1)return a[c];var e=1+b*c,f=Math.floor(e),g=e-f,h=a[f-1];return g===0?h:h+g*(a[f]-h)})},d3.stats.variance=function(a){var b=a.length;if(b<1)return NaN;if(b===1)return 0;var c=d3.stats.mean(a),d=-1,e=0;while(++d<b){var f=a[d]-c;e+=f*f}return e/(b-1)}})()
|
|
@ -3,7 +3,6 @@
|
|||
<head>
|
||||
<title>Box Plot Charts</title>
|
||||
<script type="text/javascript" src="../../d3.js"></script>
|
||||
<script type="text/javascript" src="../../d3.stats.js"></script>
|
||||
<script type="text/javascript" src="../../d3.chart.js"></script>
|
||||
<script type="text/javascript" src="../../d3.csv.js"></script>
|
||||
<link type="text/css" rel="stylesheet" href="../button.css"/>
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
<link rel="stylesheet" type="text/css" href="kde.css"/>
|
||||
<script type="text/javascript" src="../../d3.js"></script>
|
||||
<script type="text/javascript" src="../../d3.layout.js"></script>
|
||||
<script type="text/javascript" src="../../d3.stats.js"></script>
|
||||
<script type="text/javascript" src="../../lib/science/science.js"></script>
|
||||
<script type="text/javascript" src="../../lib/science/science.stats.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript" src="kde.js"></script>
|
||||
|
|
|
@ -4,10 +4,10 @@ d3.json("faithful.json", function(faithful) {
|
|||
var w = 800,
|
||||
h = 400,
|
||||
x = d3.scale.linear().domain([30, 110]).range([0, w]);
|
||||
bins = d3.layout.histogram().frequency(false).ticks(x.ticks(60))(data),
|
||||
bins = d3.layout.histogram().frequency(true).bins(x.ticks(60))(data),
|
||||
max = d3.max(bins, function(d) { return d.y; }),
|
||||
y = d3.scale.linear().domain([0, .1]).range([0, h]),
|
||||
kde = d3.stats.kde().sample(data);
|
||||
kde = science.stats.kde().sample(data);
|
||||
|
||||
var vis = d3.select("body")
|
||||
.append("svg:svg")
|
||||
|
@ -32,7 +32,7 @@ d3.json("faithful.json", function(faithful) {
|
|||
.y(function(d) { return h - y(d[1]); });
|
||||
|
||||
vis.selectAll("path")
|
||||
.data(d3.values(d3.stats.bandwidth))
|
||||
.data(d3.values(science.stats.bandwidth))
|
||||
.enter().append("svg:path")
|
||||
.attr("d", function(h) {
|
||||
return line(kde.bandwidth(h)(d3.range(30, 110, .1)));
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
<script type="text/javascript" src="../../d3.js"></script>
|
||||
<script type="text/javascript" src="../../d3.chart.js"></script>
|
||||
<script type="text/javascript" src="../../d3.stats.js"></script>
|
||||
<script type="text/javascript" src="../../lib/science/science.js"></script>
|
||||
<script type="text/javascript" src="../../lib/science/science.stats.js"></script>
|
||||
<link type="text/css" rel="stylesheet" href="../button.css"/>
|
||||
<link type="text/css" rel="stylesheet" href="qq.css"/>
|
||||
</head>
|
||||
|
|
|
@ -15,8 +15,8 @@ var vis = d3.select("#chart")
|
|||
.attr("transform", "translate(" + m[3] + "," + m[0] + ")");
|
||||
|
||||
d3.json("turkers.json", function(turkers) {
|
||||
var tm = d3.stats.mean(turkers),
|
||||
td = Math.sqrt(d3.stats.variance(turkers)),
|
||||
var tm = science.stats.mean(turkers),
|
||||
td = Math.sqrt(science.stats.variance(turkers)),
|
||||
dd = [
|
||||
[0.10306430789206111, 0.0036139086950272735, 0.30498647327844536],
|
||||
[0.5924252668569606, 0.0462763685758622, 0.4340870312025223],
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
Copyright (c) 2011, Jason Davies
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* The name Jason Davies may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,5 @@
|
|||
(function(){science = {version: "0.0.1"}; // semver
|
||||
science.functor = function(v) {
|
||||
return typeof v === "function" ? v : function() { return v; };
|
||||
};
|
||||
})()
|
|
@ -0,0 +1 @@
|
|||
(function(){science={version:"0.0.1"},science.functor=function(a){return typeof a=="function"?a:function(){return a}}})()
|
|
@ -1,12 +1,12 @@
|
|||
(function(){d3.stats = {};
|
||||
(function(){science.stats = {};
|
||||
// Bandwidth selectors for Gaussian kernels.
|
||||
// Based on R's implementations in `stats.bw`.
|
||||
d3.stats.bandwidth = {
|
||||
science.stats.bandwidth = {
|
||||
|
||||
// Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall.
|
||||
nrd0: function(x) {
|
||||
var hi = Math.sqrt(d3.stats.variance(x));
|
||||
if (!(lo = Math.min(hi, d3.stats.iqr(x) / 1.34)))
|
||||
var hi = Math.sqrt(science.stats.variance(x));
|
||||
if (!(lo = Math.min(hi, science.stats.iqr(x) / 1.34)))
|
||||
(lo = hi) || (lo = Math.abs(x[1])) || (lo = 1);
|
||||
return .9 * lo * Math.pow(x.length, -.2);
|
||||
},
|
||||
|
@ -14,13 +14,13 @@ d3.stats.bandwidth = {
|
|||
// Scott, D. W. (1992) Multivariate Density Estimation: Theory, Practice, and
|
||||
// Visualization. Wiley.
|
||||
nrd: function(x) {
|
||||
var h = d3.stats.iqr(x) / 1.34;
|
||||
return 1.06 * Math.min(Math.sqrt(d3.stats.variance(x)), h)
|
||||
var h = science.stats.iqr(x) / 1.34;
|
||||
return 1.06 * Math.min(Math.sqrt(science.stats.variance(x)), h)
|
||||
* Math.pow(x.length, -1/5);
|
||||
}
|
||||
};
|
||||
// See <http://en.wikipedia.org/wiki/Kernel_(statistics)>.
|
||||
d3.stats.kernel = {
|
||||
science.stats.kernel = {
|
||||
uniform: function(u) {
|
||||
if (u <= 1 && u >= -1) return .5;
|
||||
return 0;
|
||||
|
@ -56,10 +56,10 @@ d3.stats.kernel = {
|
|||
}
|
||||
};
|
||||
// http://exploringdata.net/den_trac.htm
|
||||
d3.stats.kde = function() {
|
||||
var kernel = d3.stats.kernel.gaussian,
|
||||
science.stats.kde = function() {
|
||||
var kernel = science.stats.kernel.gaussian,
|
||||
sample = [],
|
||||
bandwidth = d3.stats.bandwidth.nrd;
|
||||
bandwidth = science.stats.bandwidth.nrd;
|
||||
|
||||
function kde(points, i) {
|
||||
var bw = bandwidth.call(this, sample);
|
||||
|
@ -88,18 +88,18 @@ d3.stats.kde = function() {
|
|||
|
||||
kde.bandwidth = function(x) {
|
||||
if (!arguments.length) return bandwidth;
|
||||
bandwidth = d3.functor(x);
|
||||
bandwidth = science.functor(x);
|
||||
return kde;
|
||||
};
|
||||
|
||||
return kde;
|
||||
};
|
||||
d3.stats.iqr = function(x) {
|
||||
var quartiles = d3.stats.quantiles(x, [.25, .75]);
|
||||
science.stats.iqr = function(x) {
|
||||
var quartiles = science.stats.quantiles(x, [.25, .75]);
|
||||
return quartiles[1] - quartiles[0];
|
||||
};
|
||||
// Welford's algorithm.
|
||||
d3.stats.mean = function(x) {
|
||||
science.stats.mean = function(x) {
|
||||
var n = x.length;
|
||||
if (n === 0) return NaN;
|
||||
var m = 0,
|
||||
|
@ -107,11 +107,11 @@ d3.stats.mean = function(x) {
|
|||
while (++i < n) m += (x[i] - m) / (i + 1);
|
||||
return m;
|
||||
};
|
||||
d3.stats.median = function(x) {
|
||||
return d3.stats.quantiles(x, [.5])[0];
|
||||
science.stats.median = function(x) {
|
||||
return science.stats.quantiles(x, [.5])[0];
|
||||
};
|
||||
d3.stats.mode = function(x) {
|
||||
x = x.slice().sort(d3.ascending);
|
||||
science.stats.mode = function(x) {
|
||||
x = x.slice().sort(science.ascending);
|
||||
var mode,
|
||||
n = x.length,
|
||||
i = -1,
|
||||
|
@ -133,8 +133,8 @@ d3.stats.mode = function(x) {
|
|||
return mode;
|
||||
};
|
||||
// Uses R's quantile algorithm type=7.
|
||||
d3.stats.quantiles = function(d, quantiles) {
|
||||
d = d.slice().sort(d3.ascending);
|
||||
science.stats.quantiles = function(d, quantiles) {
|
||||
d = d.slice().sort(science.ascending);
|
||||
var n_1 = d.length - 1;
|
||||
return quantiles.map(function(q) {
|
||||
if (q === 0) return d[0];
|
||||
|
@ -150,11 +150,11 @@ d3.stats.quantiles = function(d, quantiles) {
|
|||
};
|
||||
// Unbiased estimate of a sample's variance.
|
||||
// Also known as the sample variance, where the denominator is n - 1.
|
||||
d3.stats.variance = function(x) {
|
||||
science.stats.variance = function(x) {
|
||||
var n = x.length;
|
||||
if (n < 1) return NaN;
|
||||
if (n === 1) return 0;
|
||||
var mean = d3.stats.mean(x),
|
||||
var mean = science.stats.mean(x),
|
||||
i = -1,
|
||||
s = 0;
|
||||
while (++i < n) {
|
|
@ -0,0 +1 @@
|
|||
(function(){science.stats={},science.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(science.stats.variance(a));(lo=Math.min(b,science.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=science.stats.iqr(a)/1.34;return 1.06*Math.min(Math.sqrt(science.stats.variance(a)),b)*Math.pow(a.length,-0.2)}},science.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},science.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=science.stats.kernel.gaussian,b=[],c=science.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=science.functor(a);return d};return d},science.stats.iqr=function(a){var b=science.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},science.stats.mean=function(a){var b=a.length;if(b===0)return NaN;var c=0,d=-1;while(++d<b)c+=(a[d]-c)/(d+1);return c},science.stats.median=function(a){return science.stats.quantiles(a,[.5])[0]},science.stats.mode=function(a){a=a.slice().sort(science.ascending);var b,c=a.length,d=-1,e=d,f=null,g=0,h,i;while(++d<c)(i=a[d])!==f&&((h=d-e)>g&&(g=h,b=f),f=i,e=d);return b},science.stats.quantiles=function(a,b){a=a.slice().sort(science.ascending);var c=a.length-1;return b.map(function(b){if(b===0)return a[0];if(b===1)return a[c];var e=1+b*c,f=Math.floor(e),g=e-f,h=a[f-1];return g===0?h:h+g*(a[f]-h)})},science.stats.variance=function(a){var b=a.length;if(b<1)return NaN;if(b===1)return 0;var c=science.stats.mean(a),d=-1,e=0;while(++d<b){var f=a[d]-c;e+=f*f}return e/(b-1)}})()
|
|
@ -290,5 +290,9 @@ function d3_chart_boxWhiskers(d) {
|
|||
|
||||
function d3_chart_boxQuartiles(d) {
|
||||
// TODO avoid sorting data twice?
|
||||
return d3.stats.quantiles(d, [.25, .5, .75]);
|
||||
var n = d.length;
|
||||
return [.25, .5, .75].map(function(q) {
|
||||
q *= n;
|
||||
return ~~q === q ? (d[q] + d[q + 1]) / 2 : d[Math.round(q)];
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
// Bandwidth selectors for Gaussian kernels.
|
||||
// Based on R's implementations in `stats.bw`.
|
||||
d3.stats.bandwidth = {
|
||||
|
||||
// Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall.
|
||||
nrd0: function(x) {
|
||||
var hi = Math.sqrt(d3.stats.variance(x));
|
||||
if (!(lo = Math.min(hi, d3.stats.iqr(x) / 1.34)))
|
||||
(lo = hi) || (lo = Math.abs(x[1])) || (lo = 1);
|
||||
return .9 * lo * Math.pow(x.length, -.2);
|
||||
},
|
||||
|
||||
// Scott, D. W. (1992) Multivariate Density Estimation: Theory, Practice, and
|
||||
// Visualization. Wiley.
|
||||
nrd: function(x) {
|
||||
var h = d3.stats.iqr(x) / 1.34;
|
||||
return 1.06 * Math.min(Math.sqrt(d3.stats.variance(x)), h)
|
||||
* Math.pow(x.length, -1/5);
|
||||
}
|
||||
};
|
|
@ -1,4 +0,0 @@
|
|||
d3.stats.iqr = function(x) {
|
||||
var quartiles = d3.stats.quantiles(x, [.25, .75]);
|
||||
return quartiles[1] - quartiles[0];
|
||||
};
|
|
@ -1,39 +0,0 @@
|
|||
// http://exploringdata.net/den_trac.htm
|
||||
d3.stats.kde = function() {
|
||||
var kernel = d3.stats.kernel.gaussian,
|
||||
sample = [],
|
||||
bandwidth = d3.stats.bandwidth.nrd;
|
||||
|
||||
function kde(points, i) {
|
||||
var bw = bandwidth.call(this, sample);
|
||||
return points.map(function(x) {
|
||||
var i = -1,
|
||||
y = 0,
|
||||
n = sample.length;
|
||||
while (++i < n) {
|
||||
y += kernel((x - sample[i]) / bw);
|
||||
}
|
||||
return [x, y / bw / n];
|
||||
});
|
||||
}
|
||||
|
||||
kde.kernel = function(x) {
|
||||
if (!arguments.length) return kernel;
|
||||
kernel = x;
|
||||
return kde;
|
||||
};
|
||||
|
||||
kde.sample = function(x) {
|
||||
if (!arguments.length) return sample;
|
||||
sample = x;
|
||||
return kde;
|
||||
};
|
||||
|
||||
kde.bandwidth = function(x) {
|
||||
if (!arguments.length) return bandwidth;
|
||||
bandwidth = d3.functor(x);
|
||||
return kde;
|
||||
};
|
||||
|
||||
return kde;
|
||||
};
|
|
@ -1,36 +0,0 @@
|
|||
// See <http://en.wikipedia.org/wiki/Kernel_(statistics)>.
|
||||
d3.stats.kernel = {
|
||||
uniform: function(u) {
|
||||
if (u <= 1 && u >= -1) return .5;
|
||||
return 0;
|
||||
},
|
||||
triangular: function(u) {
|
||||
if (u <= 1 && u >= -1) return 1 - Math.abs(u);
|
||||
return 0;
|
||||
},
|
||||
epanechnikov: function(u) {
|
||||
if (u <= 1 && u >= -1) return .75 * (1 - u * u);
|
||||
return 0;
|
||||
},
|
||||
quartic: function(u) {
|
||||
if (u <= 1 && u >= -1) {
|
||||
var tmp = 1 - u * u;
|
||||
return (15 / 16) * tmp * tmp;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
triweight: function(u) {
|
||||
if (u <= 1 && u >= -1) {
|
||||
var tmp = 1 - u * u;
|
||||
return (35 / 32) * tmp * tmp * tmp;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
gaussian: function(u) {
|
||||
return 1 / Math.sqrt(2 * Math.PI) * Math.exp(-.5 * u * u);
|
||||
},
|
||||
cosine: function(u) {
|
||||
if (u <= 1 && u >= -1) return Math.PI / 4 * Math.cos(Math.PI / 2 * u);
|
||||
return 0;
|
||||
}
|
||||
};
|
|
@ -1,9 +0,0 @@
|
|||
// Welford's algorithm.
|
||||
d3.stats.mean = function(x) {
|
||||
var n = x.length;
|
||||
if (n === 0) return NaN;
|
||||
var m = 0,
|
||||
i = -1;
|
||||
while (++i < n) m += (x[i] - m) / (i + 1);
|
||||
return m;
|
||||
};
|
|
@ -1,3 +0,0 @@
|
|||
d3.stats.median = function(x) {
|
||||
return d3.stats.quantiles(x, [.5])[0];
|
||||
};
|
|
@ -1,22 +0,0 @@
|
|||
d3.stats.mode = function(x) {
|
||||
x = x.slice().sort(d3.ascending);
|
||||
var mode,
|
||||
n = x.length,
|
||||
i = -1,
|
||||
l = i,
|
||||
last = null,
|
||||
max = 0,
|
||||
tmp,
|
||||
v;
|
||||
while (++i < n) {
|
||||
if ((v = x[i]) !== last) {
|
||||
if ((tmp = i - l) > max) {
|
||||
max = tmp;
|
||||
mode = last;
|
||||
}
|
||||
last = v;
|
||||
l = i;
|
||||
}
|
||||
}
|
||||
return mode;
|
||||
};
|
|
@ -1,16 +0,0 @@
|
|||
// Uses R's quantile algorithm type=7.
|
||||
d3.stats.quantiles = function(d, quantiles) {
|
||||
d = d.slice().sort(d3.ascending);
|
||||
var n_1 = d.length - 1;
|
||||
return quantiles.map(function(q) {
|
||||
if (q === 0) return d[0];
|
||||
else if (q === 1) return d[n_1];
|
||||
|
||||
var index = 1 + q * n_1,
|
||||
lo = Math.floor(index),
|
||||
h = index - lo,
|
||||
a = d[lo - 1];
|
||||
|
||||
return h === 0 ? a : a + h * (d[lo] - a);
|
||||
});
|
||||
};
|
|
@ -1 +0,0 @@
|
|||
d3.stats = {};
|
|
@ -1,15 +0,0 @@
|
|||
// Unbiased estimate of a sample's variance.
|
||||
// Also known as the sample variance, where the denominator is n - 1.
|
||||
d3.stats.variance = function(x) {
|
||||
var n = x.length;
|
||||
if (n < 1) return NaN;
|
||||
if (n === 1) return 0;
|
||||
var mean = d3.stats.mean(x),
|
||||
i = -1,
|
||||
s = 0;
|
||||
while (++i < n) {
|
||||
var v = x[i] - mean;
|
||||
s += v * v;
|
||||
}
|
||||
return s / (n - 1);
|
||||
};
|
|
@ -1,13 +0,0 @@
|
|||
require("./../lib/env-js/envjs/node");
|
||||
require("./../d3");
|
||||
require("./../d3.stats");
|
||||
|
||||
var data = [1, 2, 3, 4];
|
||||
|
||||
console.log("nrd0:");
|
||||
console.log(" ", d3.stats.bandwidth.nrd0(data));
|
||||
console.log("");
|
||||
|
||||
console.log("nrd:");
|
||||
console.log(" ", d3.stats.bandwidth.nrd(data));
|
||||
console.log("");
|
|
@ -1,6 +0,0 @@
|
|||
nrd0:
|
||||
0.7635139420854616
|
||||
|
||||
nrd:
|
||||
0.899249754011766
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
require("./../lib/env-js/envjs/node");
|
||||
require("./../d3");
|
||||
require("./../d3.stats");
|
||||
|
||||
var data = [1, 2, 3, 4, 5, 6];
|
||||
|
||||
for (var i = 0; i <= data.length; i++) {
|
||||
var d = data.slice(0, i);
|
||||
console.log("iqr [" + d + "]:");
|
||||
console.log(" ", d3.stats.iqr(d));
|
||||
console.log("");
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
iqr []:
|
||||
NaN
|
||||
|
||||
iqr [1]:
|
||||
0
|
||||
|
||||
iqr [1,2]:
|
||||
0.5
|
||||
|
||||
iqr [1,2,3]:
|
||||
1
|
||||
|
||||
iqr [1,2,3,4]:
|
||||
1.5
|
||||
|
||||
iqr [1,2,3,4,5]:
|
||||
2
|
||||
|
||||
iqr [1,2,3,4,5,6]:
|
||||
2.5
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
require("./../lib/env-js/envjs/node");
|
||||
require("./../d3");
|
||||
require("./../d3.stats");
|
||||
|
||||
var data = [1, 2, 3, 4, 5];
|
||||
|
||||
for (var i = 0; i <= data.length; i++) {
|
||||
var d = data.slice(0, i);
|
||||
console.log("median [" + d + "]:");
|
||||
console.log(" ", d3.stats.median(d));
|
||||
console.log("");
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
median []:
|
||||
NaN
|
||||
|
||||
median [1]:
|
||||
1
|
||||
|
||||
median [1,2]:
|
||||
1.5
|
||||
|
||||
median [1,2,3]:
|
||||
2
|
||||
|
||||
median [1,2,3,4]:
|
||||
2.5
|
||||
|
||||
median [1,2,3,4,5]:
|
||||
3
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
require("./../lib/env-js/envjs/node");
|
||||
require("./../d3");
|
||||
require("./../d3.stats");
|
||||
|
||||
var data = [1, 2, 3, 4, 5];
|
||||
|
||||
for (var i = 0; i <= data.length; i++) {
|
||||
var d = data.slice(0, i);
|
||||
console.log("variance [" + d + "]:");
|
||||
console.log(" ", d3.stats.variance(d));
|
||||
console.log("");
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
variance []:
|
||||
NaN
|
||||
|
||||
variance [1]:
|
||||
0
|
||||
|
||||
variance [1,2]:
|
||||
0.5
|
||||
|
||||
variance [1,2,3]:
|
||||
1
|
||||
|
||||
variance [1,2,3,4]:
|
||||
1.6666666666666667
|
||||
|
||||
variance [1,2,3,4,5]:
|
||||
2.5
|
||||
|
Загрузка…
Ссылка в новой задаче