Skip to content

Commit 6f80d4f

Browse files
committed
Update artifacts
1 parent 82865fd commit 6f80d4f

File tree

7 files changed

+381
-438
lines changed

7 files changed

+381
-438
lines changed

stats/base/variancech/accessors.js.html

Lines changed: 177 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">stats/
2323
<div class='clearfix'>
2424

2525
<div class='fl pad1y space-right2'>
26-
<span class="strong">53.73% </span>
26+
<span class="strong">59.4% </span>
2727
<span class="quiet">Statements</span>
28-
<span class='fraction'>36/67</span>
28+
<span class='fraction'>60/101</span>
2929
</div>
3030

3131

@@ -44,9 +44,9 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">stats/
4444

4545

4646
<div class='fl pad1y space-right2'>
47-
<span class="strong">53.73% </span>
47+
<span class="strong">59.4% </span>
4848
<span class="quiet">Lines</span>
49-
<span class='fraction'>36/67</span>
49+
<span class='fraction'>60/101</span>
5050
</div>
5151

5252

@@ -129,39 +129,96 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">stats/
129129
<a name='L64'></a><a href='#L64'>64</a>
130130
<a name='L65'></a><a href='#L65'>65</a>
131131
<a name='L66'></a><a href='#L66'>66</a>
132-
<a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
133-
<span class="cline-any cline-yes">2x</span>
134-
<span class="cline-any cline-yes">2x</span>
135-
<span class="cline-any cline-yes">2x</span>
136-
<span class="cline-any cline-yes">2x</span>
137-
<span class="cline-any cline-yes">2x</span>
138-
<span class="cline-any cline-yes">2x</span>
139-
<span class="cline-any cline-yes">2x</span>
140-
<span class="cline-any cline-yes">2x</span>
141-
<span class="cline-any cline-yes">2x</span>
142-
<span class="cline-any cline-yes">2x</span>
143-
<span class="cline-any cline-yes">2x</span>
144-
<span class="cline-any cline-yes">2x</span>
145-
<span class="cline-any cline-yes">2x</span>
146-
<span class="cline-any cline-yes">2x</span>
147-
<span class="cline-any cline-yes">2x</span>
148-
<span class="cline-any cline-yes">2x</span>
149-
<span class="cline-any cline-yes">2x</span>
150-
<span class="cline-any cline-yes">2x</span>
151-
<span class="cline-any cline-yes">2x</span>
152-
<span class="cline-any cline-yes">2x</span>
153-
<span class="cline-any cline-yes">2x</span>
154-
<span class="cline-any cline-yes">2x</span>
155-
<span class="cline-any cline-yes">2x</span>
156-
<span class="cline-any cline-yes">2x</span>
157-
<span class="cline-any cline-yes">2x</span>
158-
<span class="cline-any cline-yes">2x</span>
159-
<span class="cline-any cline-yes">2x</span>
160-
<span class="cline-any cline-yes">2x</span>
161-
<span class="cline-any cline-yes">2x</span>
162-
<span class="cline-any cline-yes">2x</span>
163-
<span class="cline-any cline-yes">2x</span>
164-
<span class="cline-any cline-yes">2x</span>
132+
<a name='L67'></a><a href='#L67'>67</a>
133+
<a name='L68'></a><a href='#L68'>68</a>
134+
<a name='L69'></a><a href='#L69'>69</a>
135+
<a name='L70'></a><a href='#L70'>70</a>
136+
<a name='L71'></a><a href='#L71'>71</a>
137+
<a name='L72'></a><a href='#L72'>72</a>
138+
<a name='L73'></a><a href='#L73'>73</a>
139+
<a name='L74'></a><a href='#L74'>74</a>
140+
<a name='L75'></a><a href='#L75'>75</a>
141+
<a name='L76'></a><a href='#L76'>76</a>
142+
<a name='L77'></a><a href='#L77'>77</a>
143+
<a name='L78'></a><a href='#L78'>78</a>
144+
<a name='L79'></a><a href='#L79'>79</a>
145+
<a name='L80'></a><a href='#L80'>80</a>
146+
<a name='L81'></a><a href='#L81'>81</a>
147+
<a name='L82'></a><a href='#L82'>82</a>
148+
<a name='L83'></a><a href='#L83'>83</a>
149+
<a name='L84'></a><a href='#L84'>84</a>
150+
<a name='L85'></a><a href='#L85'>85</a>
151+
<a name='L86'></a><a href='#L86'>86</a>
152+
<a name='L87'></a><a href='#L87'>87</a>
153+
<a name='L88'></a><a href='#L88'>88</a>
154+
<a name='L89'></a><a href='#L89'>89</a>
155+
<a name='L90'></a><a href='#L90'>90</a>
156+
<a name='L91'></a><a href='#L91'>91</a>
157+
<a name='L92'></a><a href='#L92'>92</a>
158+
<a name='L93'></a><a href='#L93'>93</a>
159+
<a name='L94'></a><a href='#L94'>94</a>
160+
<a name='L95'></a><a href='#L95'>95</a>
161+
<a name='L96'></a><a href='#L96'>96</a>
162+
<a name='L97'></a><a href='#L97'>97</a>
163+
<a name='L98'></a><a href='#L98'>98</a>
164+
<a name='L99'></a><a href='#L99'>99</a>
165+
<a name='L100'></a><a href='#L100'>100</a>
166+
<a name='L101'></a><a href='#L101'>101</a>
167+
<a name='L102'></a><a href='#L102'>102</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
168+
<span class="cline-any cline-yes">3x</span>
169+
<span class="cline-any cline-yes">3x</span>
170+
<span class="cline-any cline-yes">3x</span>
171+
<span class="cline-any cline-yes">3x</span>
172+
<span class="cline-any cline-yes">3x</span>
173+
<span class="cline-any cline-yes">3x</span>
174+
<span class="cline-any cline-yes">3x</span>
175+
<span class="cline-any cline-yes">3x</span>
176+
<span class="cline-any cline-yes">3x</span>
177+
<span class="cline-any cline-yes">3x</span>
178+
<span class="cline-any cline-yes">3x</span>
179+
<span class="cline-any cline-yes">3x</span>
180+
<span class="cline-any cline-yes">3x</span>
181+
<span class="cline-any cline-yes">3x</span>
182+
<span class="cline-any cline-yes">3x</span>
183+
<span class="cline-any cline-yes">3x</span>
184+
<span class="cline-any cline-yes">3x</span>
185+
<span class="cline-any cline-yes">3x</span>
186+
<span class="cline-any cline-yes">3x</span>
187+
<span class="cline-any cline-yes">3x</span>
188+
<span class="cline-any cline-yes">3x</span>
189+
<span class="cline-any cline-yes">3x</span>
190+
<span class="cline-any cline-yes">3x</span>
191+
<span class="cline-any cline-yes">3x</span>
192+
<span class="cline-any cline-yes">3x</span>
193+
<span class="cline-any cline-yes">3x</span>
194+
<span class="cline-any cline-yes">3x</span>
195+
<span class="cline-any cline-yes">3x</span>
196+
<span class="cline-any cline-yes">3x</span>
197+
<span class="cline-any cline-yes">3x</span>
198+
<span class="cline-any cline-yes">3x</span>
199+
<span class="cline-any cline-yes">3x</span>
200+
<span class="cline-any cline-yes">3x</span>
201+
<span class="cline-any cline-yes">3x</span>
202+
<span class="cline-any cline-yes">3x</span>
203+
<span class="cline-any cline-yes">3x</span>
204+
<span class="cline-any cline-yes">3x</span>
205+
<span class="cline-any cline-yes">3x</span>
206+
<span class="cline-any cline-yes">3x</span>
207+
<span class="cline-any cline-yes">3x</span>
208+
<span class="cline-any cline-yes">3x</span>
209+
<span class="cline-any cline-yes">3x</span>
210+
<span class="cline-any cline-yes">3x</span>
211+
<span class="cline-any cline-yes">3x</span>
212+
<span class="cline-any cline-yes">3x</span>
213+
<span class="cline-any cline-yes">3x</span>
214+
<span class="cline-any cline-yes">3x</span>
215+
<span class="cline-any cline-yes">3x</span>
216+
<span class="cline-any cline-yes">3x</span>
217+
<span class="cline-any cline-yes">3x</span>
218+
<span class="cline-any cline-yes">3x</span>
219+
<span class="cline-any cline-yes">3x</span>
220+
<span class="cline-any cline-yes">3x</span>
221+
<span class="cline-any cline-yes">3x</span>
165222
<span class="cline-any cline-no">&nbsp;</span>
166223
<span class="cline-any cline-no">&nbsp;</span>
167224
<span class="cline-any cline-no">&nbsp;</span>
@@ -193,9 +250,22 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">stats/
193250
<span class="cline-any cline-no">&nbsp;</span>
194251
<span class="cline-any cline-no">&nbsp;</span>
195252
<span class="cline-any cline-no">&nbsp;</span>
196-
<span class="cline-any cline-yes">2x</span>
197-
<span class="cline-any cline-yes">2x</span>
198-
<span class="cline-any cline-yes">2x</span></td><td class="text"><pre class="prettyprint lang-js">/**
253+
<span class="cline-any cline-no">&nbsp;</span>
254+
<span class="cline-any cline-no">&nbsp;</span>
255+
<span class="cline-any cline-no">&nbsp;</span>
256+
<span class="cline-any cline-no">&nbsp;</span>
257+
<span class="cline-any cline-no">&nbsp;</span>
258+
<span class="cline-any cline-no">&nbsp;</span>
259+
<span class="cline-any cline-no">&nbsp;</span>
260+
<span class="cline-any cline-no">&nbsp;</span>
261+
<span class="cline-any cline-no">&nbsp;</span>
262+
<span class="cline-any cline-no">&nbsp;</span>
263+
<span class="cline-any cline-yes">3x</span>
264+
<span class="cline-any cline-yes">3x</span>
265+
<span class="cline-any cline-yes">3x</span>
266+
<span class="cline-any cline-yes">3x</span>
267+
<span class="cline-any cline-yes">3x</span>
268+
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
199269
* @license Apache-2.0
200270
*
201271
* Copyright (c) 2025 The Stdlib Authors.
@@ -220,55 +290,90 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">stats/
220290
/**
221291
* Computes the variance of a strided array using a one-pass trial mean algorithm.
222292
*
293+
* ## Method
294+
*
295+
* - This implementation uses a one-pass trial mean approach, as suggested by Chan et al (1983).
296+
*
297+
* ## References
298+
*
299+
* - Neely, Peter M. 1966. "Comparison of Several Algorithms for Computation of Means, Standard Deviations and Correlation Coefficients." _Communications of the ACM_ 9 (7). Association for Computing Machinery: 496–99. doi:[10.1145/365719.365958](https://doi.org/10.1145/365719.365958).
300+
* - Ling, Robert F. 1974. "Comparison of Several Algorithms for Computing Sample Means and Variances." _Journal of the American Statistical Association_ 69 (348). American Statistical Association, Taylor &amp; Francis, Ltd.: 859–66. doi:[10.2307/2286154](https://doi.org/10.2307/2286154).
301+
* - Chan, Tony F., Gene H. Golub, and Randall J. LeVeque. 1983. "Algorithms for Computing the Sample Variance: Analysis and Recommendations." _The American Statistician_ 37 (3). American Statistical Association, Taylor &amp; Francis, Ltd.: 242–47. doi:[10.1080/00031305.1983.10483115](https://doi.org/10.1080/00031305.1983.10483115).
302+
* - Schubert, Erich, and Michael Gertz. 2018. "Numerically Stable Parallel Computation of (Co-)Variance." In _Proceedings of the 30th International Conference on Scientific and Statistical Database Management_. New York, NY, USA: Association for Computing Machinery. doi:[10.1145/3221269.3223036](https://doi.org/10.1145/3221269.3223036).
303+
*
304+
* @private
223305
* @param {PositiveInteger} N - number of indexed elements
224306
* @param {number} correction - degrees of freedom adjustment
225307
* @param {Object} x - input array object
226-
* @param {Function} x.get - accessor function
227-
* @param {integer} stride - stride length
228-
* @param {NonNegativeInteger} offset - starting index
308+
* @param {Collection} x.data - input array data
309+
* @param {Array&lt;Function&gt;} x.accessors - array element accessors
310+
* @param {integer} strideX - stride length
311+
* @param {NonNegativeInteger} offsetX - starting index
229312
* @returns {number} variance
313+
*
314+
* @example
315+
* var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
316+
* var arraylike2object = require( '@stdlib/array/base/arraylike2object' );
317+
*
318+
* var x = toAccessorArray( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
319+
*
320+
* var v = variancech( 4, 1, arraylike2object( x ), 2, 1 );
321+
* // returns 6.25
230322
*/
231-
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function variancech(N, correction, x, stride, offset) {</span></span>
232-
<span class="cstat-no" title="statement not covered" > var sum;</span>
233-
<span class="cstat-no" title="statement not covered" > var ix;</span>
234-
<span class="cstat-no" title="statement not covered" > var i;</span>
323+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function variancech( N, correction, x, strideX, offsetX ) {</span></span>
324+
<span class="cstat-no" title="statement not covered" > var xbuf;</span>
325+
<span class="cstat-no" title="statement not covered" > var get;</span>
326+
<span class="cstat-no" title="statement not covered" > var mu;</span>
327+
<span class="cstat-no" title="statement not covered" > var ix;</span>
328+
<span class="cstat-no" title="statement not covered" > var M2;</span>
329+
<span class="cstat-no" title="statement not covered" > var M;</span>
330+
<span class="cstat-no" title="statement not covered" > var d;</span>
331+
<span class="cstat-no" title="statement not covered" > var n;</span>
332+
<span class="cstat-no" title="statement not covered" > var i;</span>
333+
<span class="cstat-no" title="statement not covered" ></span>
334+
<span class="cstat-no" title="statement not covered" > // Cache reference to array data:</span>
335+
<span class="cstat-no" title="statement not covered" > xbuf = x.data;</span>
336+
<span class="cstat-no" title="statement not covered" ></span>
337+
<span class="cstat-no" title="statement not covered" > // Cache a reference to the element accessor:</span>
338+
<span class="cstat-no" title="statement not covered" > get = x.accessors[ 0 ];</span>
235339
<span class="cstat-no" title="statement not covered" ></span>
236-
<span class="cstat-no" title="statement not covered" > if (N &lt;= 0) {</span>
237-
<span class="cstat-no" title="statement not covered" > return NaN;</span>
238-
<span class="cstat-no" title="statement not covered" > }</span>
239-
<span class="cstat-no" title="statement not covered" > if (N === 1 || stride === 0) {</span>
240-
<span class="cstat-no" title="statement not covered" > return 0.0;</span>
241-
<span class="cstat-no" title="statement not covered" > }</span>
242-
<span class="cstat-no" title="statement not covered" > ix = offset;</span>
243-
<span class="cstat-no" title="statement not covered" > sum = 0.0;</span>
340+
<span class="cstat-no" title="statement not covered" > n = N - correction;</span>
341+
<span class="cstat-no" title="statement not covered" > if ( N &lt;= 0 || n &lt;= 0.0 ) {</span>
342+
<span class="cstat-no" title="statement not covered" > return NaN;</span>
343+
<span class="cstat-no" title="statement not covered" > }</span>
344+
<span class="cstat-no" title="statement not covered" > if ( N === 1 || strideX === 0 ) {</span>
345+
<span class="cstat-no" title="statement not covered" > return 0.0;</span>
346+
<span class="cstat-no" title="statement not covered" > }</span>
347+
<span class="cstat-no" title="statement not covered" > ix = offsetX;</span>
244348
<span class="cstat-no" title="statement not covered" ></span>
245-
<span class="cstat-no" title="statement not covered" > // Calculate mean</span>
246-
<span class="cstat-no" title="statement not covered" > for (i = 0; i &lt; N; i++) {</span>
247-
<span class="cstat-no" title="statement not covered" > sum += x.get(ix);</span>
248-
<span class="cstat-no" title="statement not covered" > ix += stride;</span>
249-
<span class="cstat-no" title="statement not covered" > }</span>
250-
<span class="cstat-no" title="statement not covered" > var mean = sum / N;</span>
349+
<span class="cstat-no" title="statement not covered" > // Use an estimate for the mean:</span>
350+
<span class="cstat-no" title="statement not covered" > mu = get( xbuf, ix );</span>
351+
<span class="cstat-no" title="statement not covered" > ix += strideX;</span>
251352
<span class="cstat-no" title="statement not covered" ></span>
252-
<span class="cstat-no" title="statement not covered" > // Calculate variance</span>
253-
<span class="cstat-no" title="statement not covered" > ix = offset;</span>
254-
<span class="cstat-no" title="statement not covered" > var sum2 = 0.0;</span>
255-
<span class="cstat-no" title="statement not covered" > for (i = 0; i &lt; N; i++) {</span>
256-
<span class="cstat-no" title="statement not covered" > var delta = x.get(ix) - mean;</span>
257-
<span class="cstat-no" title="statement not covered" > sum2 += delta * delta;</span>
258-
<span class="cstat-no" title="statement not covered" > ix += stride;</span>
259-
<span class="cstat-no" title="statement not covered" > }</span>
260-
<span class="cstat-no" title="statement not covered" > return sum2 / (N - correction);</span>
353+
<span class="cstat-no" title="statement not covered" > // Compute the variance...</span>
354+
<span class="cstat-no" title="statement not covered" > M2 = 0.0;</span>
355+
<span class="cstat-no" title="statement not covered" > M = 0.0;</span>
356+
<span class="cstat-no" title="statement not covered" > for ( i = 1; i &lt; N; i++ ) {</span>
357+
<span class="cstat-no" title="statement not covered" > d = get( xbuf, ix ) - mu;</span>
358+
<span class="cstat-no" title="statement not covered" > M2 += d * d;</span>
359+
<span class="cstat-no" title="statement not covered" > M += d;</span>
360+
<span class="cstat-no" title="statement not covered" > ix += strideX;</span>
361+
<span class="cstat-no" title="statement not covered" > }</span>
362+
<span class="cstat-no" title="statement not covered" > return (M2/n) - ((M/N)*(M/n));</span>
261363
<span class="cstat-no" title="statement not covered" >}</span>
262364
&nbsp;
365+
&nbsp;
263366
// EXPORTS //
264-
module.exports = variancech; </pre></td></tr></table></pre>
367+
&nbsp;
368+
module.exports = variancech;
369+
&nbsp;</pre></td></tr></table></pre>
265370

266371
<div class='push'></div><!-- for sticky footer -->
267372
</div><!-- /wrapper -->
268373
<div class='footer quiet pad2 space-top1 center small'>
269374
Code coverage generated by
270375
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
271-
at 2025-06-13T10:12:16.809Z
376+
at 2025-06-13T13:22:05.083Z
272377
</div>
273378
<script src="../../../../prettify.js"></script>
274379
<script>

stats/base/variancech/coverage.ndjson

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[329,368,89.4022,26,27,96.2963,2,5,40,329,368,89.4022,"2534aad9ea8a19c9a6145a374fc4365da8fd6c46","2025-06-13 10:11:09 +0000"]
1+
[305,348,87.6437,16,17,94.1176,2,3,66.6667,305,348,87.6437,"87ed7657114b6438b7343985df6e06ea801793cf","2025-06-13 13:19:28 +0000"]

0 commit comments

Comments
 (0)