1 #Region "Microsoft.VisualBasic::473e67c72806d54d9b38834ee8ef01b7, Microsoft.VisualBasic.Core\Extensions\Math\StatisticsMathExtensions\Linq\EnumerableStatsVarianceP.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module EnumerableStatsVarianceP
35     
36     '         Function: (+20 Overloads) VarianceP
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Runtime.CompilerServices
44 Imports sys = System.Math
45
46 Namespace Math.Statistics.Linq
47
48     Public Module EnumerableStatsVarianceP
49         '
50         ' Summary:
51         '     Computes the VarianceP of a sequence of nullable System.Decimal values.
52         '
53         ' Parameters:
54         '   source:
55         '     A sequence of nullable System.Decimal values to calculate the VarianceP of.
56         '
57         Returns:
58         '     The VarianceP of the sequence of values, or null if the source sequence is
59         '     empty or contains only values that are null.
60         '
61         ' Exceptions:
62         '   System.ArgumentNullException:
63         '     source is null.
64         '
65         '   System.OverflowException:
66         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
67         <Extension>
68         Public Function VarianceP(source As IEnumerable(Of Decimal?)) As Decimal
69             Dim values As IEnumerable(Of Decimal) = source.Coalesce()
70             If values.Any() Then
71                 Return values.VarianceP()
72             End If
73
74             Return Nothing
75         End Function
76         '
77         ' Summary:
78         '     Computes the VarianceP of a sequence of System.Decimal values.
79         '
80         ' Parameters:
81         '   source:
82         '     A sequence of System.Decimal values to calculate the VarianceP of.
83         '
84         Returns:
85         '     The VarianceP of the sequence of values.
86         '
87         ' Exceptions:
88         '   System.ArgumentNullException:
89         '     source is null.
90         '
91         '   System.InvalidOperationException:
92         '     source contains no elements.
93         '
94         '   System.OverflowException:
95         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
96         <Extension>
97         Public Function VarianceP(source As IEnumerable(Of Decimal)) As Decimal
98             Return CDec(source.[Select](Function(x) CDbl(x)).VarianceP())
99         End Function
100         '
101         ' Summary:
102         '     Computes the VarianceP of a sequence of nullable System.Double values.
103         '
104         ' Parameters:
105         '   source:
106         '     A sequence of nullable System.Double values to calculate the VarianceP of.
107         '
108         Returns:
109         '     The VarianceP of the sequence of values, or null if the source sequence is
110         '     empty or contains only values that are null.
111         '
112         ' Exceptions:
113         '   System.ArgumentNullException:
114         '     source is null.
115         <Extension>
116         Public Function VarianceP(source As IEnumerable(Of Double?)) As Double
117             Dim values As IEnumerable(Of Double) = source.Coalesce()
118             If values.Any() Then
119                 Return values.VarianceP()
120             End If
121
122             Return Nothing
123         End Function
124         '
125         ' Summary:
126         '     Computes the VarianceP of a sequence of System.Double values.
127         '
128         ' Parameters:
129         '   source:
130         '     A sequence of System.Double values to calculate the VarianceP of.
131         '
132         Returns:
133         '     The VarianceP of the sequence of values.
134         '
135         ' Exceptions:
136         '   System.ArgumentNullException:
137         '     source is null.
138         '
139         '   System.InvalidOperationException:
140         '     source contains no elements.
141         <Extension>
142         Public Function VarianceP(source As IEnumerable(Of Double)) As Double
143             Dim avg As Double = source.Average()
144             Dim d As Double = source.Aggregate(0.0, func:=Function(total, [next]) As Double
145                                                               total += sys.Pow([next] - avg, 2)
146                                                               Return total
147                                                           End Function)
148             Return d / source.Count()
149         End Function
150         '
151         ' Summary:
152         '     Computes the VarianceP of a sequence of nullable System.Single values.
153         '
154         ' Parameters:
155         '   source:
156         '     A sequence of nullable System.Single values to calculate the VarianceP of.
157         '
158         Returns:
159         '     The VarianceP of the sequence of values, or null if the source sequence is
160         '     empty or contains only values that are null.
161         '
162         ' Exceptions:
163         '   System.ArgumentNullException:
164         '     source is null.
165         <Extension>
166         Public Function VarianceP(source As IEnumerable(Of Single?)) As Single
167             Dim values As IEnumerable(Of Single) = source.Coalesce()
168             If values.Any() Then
169                 Return values.VarianceP()
170             End If
171
172             Return Nothing
173         End Function
174         '
175         ' Summary:
176         '     Computes the VarianceP of a sequence of System.Single values.
177         '
178         ' Parameters:
179         '   source:
180         '     A sequence of System.Single values to calculate the VarianceP of.
181         '
182         Returns:
183         '     The VarianceP of the sequence of values.
184         '
185         ' Exceptions:
186         '   System.ArgumentNullException:
187         '     source is null.
188         '
189         '   System.InvalidOperationException:
190         '     source contains no elements.
191         <Extension>
192         Public Function VarianceP(source As IEnumerable(Of Single)) As Single
193             Return CSng(source.[Select](Function(x) CDbl(x)).VarianceP())
194         End Function
195         '
196         ' Summary:
197         '     Computes the VarianceP of a sequence of nullable System.Int32 values.
198         '
199         ' Parameters:
200         '   source:
201         '     A sequence of nullable System.Int32values to calculate the VarianceP of.
202         '
203         Returns:
204         '     The VarianceP of the sequence of values, or null if the source sequence is
205         '     empty or contains only values that are null.
206         '
207         ' Exceptions:
208         '   System.ArgumentNullException:
209         '     source is null.
210         '
211         '   System.OverflowException:
212         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
213         <Extension>
214         Public Function VarianceP(source As IEnumerable(Of Integer?)) As Double
215             Dim values As IEnumerable(Of Integer) = source.Coalesce()
216             If values.Any() Then
217                 Return values.VarianceP()
218             End If
219
220             Return Nothing
221         End Function
222         '
223         ' Summary:
224         '     Computes the VarianceP of a sequence of System.Int32 values.
225         '
226         ' Parameters:
227         '   source:
228         '     A sequence of System.Int32 values to calculate the VarianceP of.
229         '
230         Returns:
231         '     The VarianceP of the sequence of values.
232         '
233         ' Exceptions:
234         '   System.ArgumentNullException:
235         '     source is null.
236         '
237         '   System.InvalidOperationException:
238         '     source contains no elements.
239         '
240         '   System.OverflowException:
241         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
242         <Extension>
243         Public Function VarianceP(source As IEnumerable(Of Integer)) As Double
244             Return source.[Select](Function(x) CDbl(x)).VarianceP()
245         End Function
246         '
247         ' Summary:
248         '     Computes the VarianceP of a sequence of nullable System.Int64 values.
249         '
250         ' Parameters:
251         '   source:
252         '     A sequence of nullable System.Int64 values to calculate the VarianceP of.
253         '
254         Returns:
255         '     The VarianceP of the sequence of values, or null if the source sequence is
256         '     empty or contains only values that are null.
257         '
258         ' Exceptions:
259         '   System.ArgumentNullException:
260         '     source is null.
261         '
262         '   System.OverflowException:
263         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
264         <Extension>
265         Public Function VarianceP(source As IEnumerable(Of Long?)) As Double
266             Dim values As IEnumerable(Of Long) = source.Coalesce()
267             If values.Any() Then
268                 Return values.VarianceP()
269             End If
270
271             Return Nothing
272         End Function
273         '
274         ' Summary:
275         '     Computes the VarianceP of a sequence of System.Int64 values.
276         '
277         ' Parameters:
278         '   source:
279         '     A sequence of System.Int64 values to calculate the VarianceP of.
280         '
281         Returns:
282         '     The VarianceP of the sequence of values.
283         '
284         ' Exceptions:
285         '   System.ArgumentNullException:
286         '     source is null.
287         '
288         '   System.InvalidOperationException:
289         '     source contains no elements.
290         '
291         '   System.OverflowException:
292         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
293         <Extension>
294         Public Function VarianceP(source As IEnumerable(Of Long)) As Double
295             Return source.[Select](Function(x) CDbl(x)).VarianceP()
296         End Function
297         '
298         ' Summary:
299         '     Computes the VarianceP of a sequence of nullable System.Decimal values that
300         '     are obtained by invoking a transform function on each element of the input
301         '     sequence.
302         '
303         ' Parameters:
304         '   source:
305         '     A sequence of values to calculate the VarianceP of.
306         '
307         '   selector:
308         '     A transform function to apply to each element.
309         '
310         ' Type parameters:
311         '   TSource:
312         '     The type of the elements of source.
313         '
314         Returns:
315         '     The VarianceP of the sequence of values, or null if the source sequence is
316         '     empty or contains only values that are null.
317         '
318         ' Exceptions:
319         '   System.ArgumentNullException:
320         '     source or selector is null.
321         '
322         '   System.OverflowException:
323         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
324         <Extension>
325         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal?)) As Decimal
326             Return source.[Select](selector).VarianceP()
327         End Function
328         '
329         ' Summary:
330         '     Computes the VarianceP of a sequence of System.Decimal values that are obtained
331         '     by invoking a transform function on each element of the input sequence.
332         '
333         ' Parameters:
334         '   source:
335         '     A sequence of values that are used to calculate an VarianceP.
336         '
337         '   selector:
338         '     A transform function to apply to each element.
339         '
340         ' Type parameters:
341         '   TSource:
342         '     The type of the elements of source.
343         '
344         Returns:
345         '     The VarianceP of the sequence of values.
346         '
347         ' Exceptions:
348         '   System.ArgumentNullException:
349         '     source or selector is null.
350         '
351         '   System.InvalidOperationException:
352         '     source contains no elements.
353         '
354         '   System.OverflowException:
355         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
356         <Extension>
357         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal)) As Decimal
358             Return source.[Select](selector).VarianceP()
359         End Function
360         '
361         ' Summary:
362         '     Computes the VarianceP of a sequence of nullable System.Double values that
363         '     are obtained by invoking a transform function on each element of the input
364         '     sequence.
365         '
366         ' Parameters:
367         '   source:
368         '     A sequence of values to calculate the VarianceP of.
369         '
370         '   selector:
371         '     A transform function to apply to each element.
372         '
373         ' Type parameters:
374         '   TSource:
375         '     The type of the elements of source.
376         '
377         Returns:
378         '     The VarianceP of the sequence of values, or null if the source sequence is
379         '     empty or contains only values that are null.
380         '
381         ' Exceptions:
382         '   System.ArgumentNullException:
383         '     source or selector is null.
384         <Extension>
385         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Double?)) As Double
386             Return source.[Select](selector).VarianceP()
387         End Function
388         '
389         ' Summary:
390         '     Computes the VarianceP of a sequence of System.Double values that are obtained
391         '     by invoking a transform function on each element of the input sequence.
392         '
393         ' Parameters:
394         '   source:
395         '     A sequence of values to calculate the VarianceP of.
396         '
397         '   selector:
398         '     A transform function to apply to each element.
399         '
400         ' Type parameters:
401         '   TSource:
402         '     The type of the elements of source.
403         '
404         Returns:
405         '     The VarianceP of the sequence of values.
406         '
407         ' Exceptions:
408         '   System.ArgumentNullException:
409         '     source or selector is null.
410         '
411         '   System.InvalidOperationException:
412         '     source contains no elements.
413         <Extension>
414         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Double)) As Double
415             Return source.[Select](selector).VarianceP()
416         End Function
417         '
418         ' Summary:
419         '     Computes the VarianceP of a sequence of nullable System.Single values that
420         '     are obtained by invoking a transform function on each element of the input
421         '     sequence.
422         '
423         ' Parameters:
424         '   source:
425         '     A sequence of values to calculate the VarianceP of.
426         '
427         '   selector:
428         '     A transform function to apply to each element.
429         '
430         ' Type parameters:
431         '   TSource:
432         '     The type of the elements of source.
433         '
434         Returns:
435         '     The VarianceP of the sequence of values, or null if the source sequence is
436         '     empty or contains only values that are null.
437         '
438         ' Exceptions:
439         '   System.ArgumentNullException:
440         '     source or selector is null.
441         <Extension>
442         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Single?)) As Single
443             Return source.[Select](selector).VarianceP()
444         End Function
445         '
446         ' Summary:
447         '     Computes the VarianceP of a sequence of System.Single values that are obtained
448         '     by invoking a transform function on each element of the input sequence.
449         '
450         ' Parameters:
451         '   source:
452         '     A sequence of values to calculate the VarianceP of.
453         '
454         '   selector:
455         '     A transform function to apply to each element.
456         '
457         ' Type parameters:
458         '   TSource:
459         '     The type of the elements of source.
460         '
461         Returns:
462         '     The VarianceP of the sequence of values.
463         '
464         ' Exceptions:
465         '   System.ArgumentNullException:
466         '     source or selector is null.
467         '
468         '   System.InvalidOperationException:
469         '     source contains no elements.
470         <Extension>
471         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Single)) As Single
472             Return source.[Select](selector).VarianceP()
473         End Function
474         '
475         ' Summary:
476         '     Computes the VarianceP of a sequence of nullable System.Int32 values that are
477         '     obtained by invoking a transform function on each element of the input sequence.
478         '
479         ' Parameters:
480         '   source:
481         '     A sequence of values to calculate the VarianceP of.
482         '
483         '   selector:
484         '     A transform function to apply to each element.
485         '
486         ' Type parameters:
487         '   TSource:
488         '     The type of the elements of source.
489         '
490         Returns:
491         '     The VarianceP of the sequence of values, or null if the source sequence is
492         '     empty or contains only values that are null.
493         '
494         ' Exceptions:
495         '   System.ArgumentNullException:
496         '     source or selector is null.
497         '
498         '   System.OverflowException:
499         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
500         <Extension>
501         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer?)) As Double
502             Return source.[Select](selector).VarianceP()
503         End Function
504         '
505         ' Summary:
506         '     Computes the VarianceP of a sequence of System.Int32 values that are obtained
507         '     by invoking a transform function on each element of the input sequence.
508         '
509         ' Parameters:
510         '   source:
511         '     A sequence of values to calculate the VarianceP of.
512         '
513         '   selector:
514         '     A transform function to apply to each element.
515         '
516         ' Type parameters:
517         '   TSource:
518         '     The type of the elements of source.
519         '
520         Returns:
521         '     The VarianceP of the sequence of values.
522         '
523         ' Exceptions:
524         '   System.ArgumentNullException:
525         '     source or selector is null.
526         '
527         '   System.InvalidOperationException:
528         '     source contains no elements.
529         '
530         '   System.OverflowException:
531         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
532         <Extension>
533         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer)) As Double
534             Return source.[Select](selector).VarianceP()
535         End Function
536         '
537         ' Summary:
538         '     Computes the VarianceP of a sequence of nullable System.Int64 values that are
539         '     obtained by invoking a transform function on each element of the input sequence.
540         '
541         ' Parameters:
542         '   source:
543         '     A sequence of values to calculate the VarianceP of.
544         '
545         '   selector:
546         '     A transform function to apply to each element.
547         '
548         ' Type parameters:
549         '   TSource:
550         '     The type of the elements of source.
551         '
552         Returns:
553         '     The VarianceP of the sequence of values, or null if the source sequence is
554         '     empty or contains only values that are null.
555         <Extension>
556         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Long?)) As Double
557             Return source.[Select](selector).VarianceP()
558         End Function
559         '
560         ' Summary:
561         '     Computes the VarianceP of a sequence of System.Int64 values that are obtained
562         '     by invoking a transform function on each element of the input sequence.
563         '
564         ' Parameters:
565         '   source:
566         '     A sequence of values to calculate the VarianceP of.
567         '
568         '   selector:
569         '     A transform function to apply to each element.
570         '
571         ' Type parameters:
572         '   TSource:
573         '     The type of the elements of source.
574         '
575         Returns:
576         '     The VarianceP of the sequence of values.
577         '
578         ' Exceptions:
579         '   System.ArgumentNullException:
580         '     source or selector is null.
581         '
582         '   System.InvalidOperationException:
583         '     source contains no elements.
584         '
585         '   System.OverflowException:
586         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
587         <Extension>
588         Public Function VarianceP(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Long)) As Double
589             Return source.[Select](selector).VarianceP()
590         End Function
591     End Module
592 End Namespace