1 #Region "Microsoft.VisualBasic::d6059623b0d92ef82787b5e78f36de7c, Microsoft.VisualBasic.Core\Extensions\Math\StatisticsMathExtensions\Linq\EnumerableStatsPearson.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 EnumerableStatsPearson
35     
36     '         Function: (+20 Overloads) Pearson
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Collections.Generic
44 Imports System.Linq
45 Imports System.Runtime.CompilerServices
46
47 Namespace Math.Statistics.Linq
48
49     Public Module EnumerableStatsPearson
50         '
51         ' Summary:
52         '     Computes the Pearson of a sequence of nullable System.Decimal values.
53         '
54         ' Parameters:
55         '   source:
56         '     A sequence of nullable System.Decimal values to calculate the Pearson of.
57         '
58         Returns:
59         '     The Pearson of the sequence of values, or null if the source sequence is
60         '     empty or contains only values that are null.
61         '
62         ' Exceptions:
63         '   System.ArgumentNullException:
64         '     source is null.
65         '
66         '   System.OverflowException:
67         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
68         <Extension>
69         Public Function Pearson(source As IEnumerable(Of Decimal?), other As IEnumerable(Of Decimal?)) As Decimal
70             Dim values As IEnumerable(Of Decimal) = source.Coalesce()
71             If values.Any() Then
72                 Return values.Pearson(other.Coalesce())
73             End If
74
75             Return Nothing
76         End Function
77         '
78         ' Summary:
79         '     Computes the Pearson of a sequence of System.Decimal values.
80         '
81         ' Parameters:
82         '   source:
83         '     A sequence of System.Decimal values to calculate the Pearson of.
84         '
85         Returns:
86         '     The Pearson of the sequence of values.
87         '
88         ' Exceptions:
89         '   System.ArgumentNullException:
90         '     source is null.
91         '
92         '   System.InvalidOperationException:
93         '     source contains no elements.
94         '
95         '   System.OverflowException:
96         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
97         <Extension>
98         Public Function Pearson(source As IEnumerable(Of Decimal), other As IEnumerable(Of Decimal)) As Decimal
99             Return CDec(source.[Select](Function(x) CDbl(x)).Pearson(other.[Select](Function(x) CDbl(x))))
100         End Function
101         '
102         ' Summary:
103         '     Computes the Pearson of a sequence of nullable System.Double values.
104         '
105         ' Parameters:
106         '   source:
107         '     A sequence of nullable System.Double values to calculate the Pearson of.
108         '
109         Returns:
110         '     The Pearson of the sequence of values, or null if the source sequence is
111         '     empty or contains only values that are null.
112         '
113         ' Exceptions:
114         '   System.ArgumentNullException:
115         '     source is null.
116         <Extension>
117         Public Function Pearson(source As IEnumerable(Of Double?), other As IEnumerable(Of Double?)) As Double
118             Dim values As IEnumerable(Of Double) = source.Coalesce()
119             If values.Any() Then
120                 Return values.Pearson(other.Coalesce())
121             End If
122
123             Return Nothing
124         End Function
125         '
126         ' Summary:
127         '     Computes the Pearson of a sequence of System.Double values.
128         '
129         ' Parameters:
130         '   source:
131         '     A sequence of System.Double values to calculate the Pearson of.
132         '
133         Returns:
134         '     The Pearson of the sequence of values.
135         '
136         ' Exceptions:
137         '   System.ArgumentNullException:
138         '     source is null.
139         '
140         '   System.InvalidOperationException:
141         '     source contains no elements.
142         <Extension>
143         Public Function Pearson(source As IEnumerable(Of Double), other As IEnumerable(Of Double)) As Double
144             If source.Count() <> other.Count() Then
145                 Throw New ArgumentException("Collections are not of the same length""other")
146             End If
147
148             Return source.Covariance(other) / (source.StandardDeviationP() * other.StandardDeviationP())
149         End Function
150         '
151         ' Summary:
152         '     Computes the Pearson of a sequence of nullable System.Single values.
153         '
154         ' Parameters:
155         '   source:
156         '     A sequence of nullable System.Single values to calculate the Pearson of.
157         '
158         Returns:
159         '     The Pearson 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 Pearson(source As IEnumerable(Of Single?), other As IEnumerable(Of Single?)) As Single
167             Dim values As IEnumerable(Of Single) = source.Coalesce()
168             If values.Any() Then
169                 Return values.Pearson(other.Coalesce())
170             End If
171
172             Return Nothing
173         End Function
174         '
175         ' Summary:
176         '     Computes the Pearson of a sequence of System.Single values.
177         '
178         ' Parameters:
179         '   source:
180         '     A sequence of System.Single values to calculate the Pearson of.
181         '
182         Returns:
183         '     The Pearson 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 Pearson(source As IEnumerable(Of Single), other As IEnumerable(Of Single)) As Single
193             Return CSng(source.[Select](Function(x) CDbl(x)).Pearson(other.[Select](Function(x) CDbl(x))))
194         End Function
195         '
196         ' Summary:
197         '     Computes the Pearson of a sequence of nullable System.Int32 values.
198         '
199         ' Parameters:
200         '   source:
201         '     A sequence of nullable System.Int32values to calculate the Pearson of.
202         '
203         Returns:
204         '     The Pearson 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 Pearson(source As IEnumerable(Of Integer?), other As IEnumerable(Of Integer?)) As Double
215             Dim values As IEnumerable(Of Integer) = source.Coalesce()
216             If values.Any() Then
217                 Return values.Pearson(other.Coalesce())
218             End If
219
220             Return Nothing
221         End Function
222         '
223         ' Summary:
224         '     Computes the Pearson of a sequence of System.Int32 values.
225         '
226         ' Parameters:
227         '   source:
228         '     A sequence of System.Int32 values to calculate the Pearson of.
229         '
230         Returns:
231         '     The Pearson 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 Pearson(source As IEnumerable(Of Integer), other As IEnumerable(Of Integer)) As Double
244             Return source.[Select](Function(x) CDbl(x)).Pearson(other.[Select](Function(x) CDbl(x)))
245         End Function
246         '
247         ' Summary:
248         '     Computes the Pearson of a sequence of nullable System.Int64 values.
249         '
250         ' Parameters:
251         '   source:
252         '     A sequence of nullable System.Int64 values to calculate the Pearson of.
253         '
254         Returns:
255         '     The Pearson 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 Pearson(source As IEnumerable(Of Long?), other As IEnumerable(Of Long?)) As Double
266             Dim values As IEnumerable(Of Long) = source.Coalesce()
267             If values.Any() Then
268                 Return values.Pearson(other.Coalesce())
269             End If
270
271             Return Nothing
272         End Function
273         '
274         ' Summary:
275         '     Computes the Pearson of a sequence of System.Int64 values.
276         '
277         ' Parameters:
278         '   source:
279         '     A sequence of System.Int64 values to calculate the Pearson of.
280         '
281         Returns:
282         '     The Pearson 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 Pearson(source As IEnumerable(Of Long), other As IEnumerable(Of Long)) As Double
295             Return source.[Select](Function(x) CDbl(x)).Pearson(other.[Select](Function(x) CDbl(x)))
296         End Function
297         '
298         ' Summary:
299         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal?)) As Decimal
326             Return source.[Select](selector).Pearson(other.[Select](selector))
327         End Function
328         '
329         ' Summary:
330         '     Computes the Pearson 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 Pearson.
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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal)) As Decimal
358             Return source.[Select](selector).Pearson(other.[Select](selector))
359         End Function
360         '
361         ' Summary:
362         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Double?)) As Double
386             Return source.[Select](selector).Pearson(other.[Select](selector))
387         End Function
388         '
389         ' Summary:
390         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Double)) As Double
415             Return source.[Select](selector).Pearson(other.[Select](selector))
416         End Function
417         '
418         ' Summary:
419         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Single?)) As Single
443             Return source.[Select](selector).Pearson(other.[Select](selector))
444         End Function
445         '
446         ' Summary:
447         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Single)) As Single
472             Return source.[Select](selector).Pearson(other.[Select](selector))
473         End Function
474         '
475         ' Summary:
476         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Integer?)) As Double
502             Return source.[Select](selector).Pearson(other.[Select](selector))
503         End Function
504         '
505         ' Summary:
506         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Integer)) As Double
534             Return source.[Select](selector).Pearson(other.[Select](selector))
535         End Function
536         '
537         ' Summary:
538         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Long?)) As Double
557             Return source.[Select](selector).Pearson(other.[Select](selector))
558         End Function
559         '
560         ' Summary:
561         '     Computes the Pearson 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 Pearson 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 Pearson 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 Pearson(Of TSource)(source As IEnumerable(Of TSource), other As IEnumerable(Of TSource), selector As Func(Of TSource, Long)) As Double
589             Return source.[Select](selector).Pearson(other.[Select](selector))
590         End Function
591     End Module
592 End Namespace