annotate mayachemtools/docs/modules/html/code/StatisticsUtil.html @ 9:ab29fa5c8c1f draft default tip

Uploaded
author deepakjadmin
date Thu, 15 Dec 2016 14:18:03 -0500
parents 73ae111cf86f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1 <html>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 <head>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3 <title>MayaChemTools:Code:StatisticsUtil.pm</title>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 <link rel="stylesheet" type="text/css" href="../../../css/MayaChemToolsCode.css">
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
6 </head>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
7 <body leftmargin="20" rightmargin="20" topmargin="10" bottommargin="10">
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
8 <br/>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
9 <center>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
10 <a href="http://www.mayachemtools.org" title="MayaChemTools Home"><img src="../../../images/MayaChemToolsLogo.gif" border="0" alt="MayaChemTools"></a>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
11 </center>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
12 <br/>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
13 <pre>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
14 <a name="package-StatisticsUtil-"></a> 1 <span class="k">package </span><span class="i">StatisticsUtil</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
15 2 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
16 3 <span class="c"># $RCSfile: StatisticsUtil.pm,v $</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
17 4 <span class="c"># $Date: 2015/02/28 20:47:18 $</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
18 5 <span class="c"># $Revision: 1.41 $</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
19 6 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
20 7 <span class="c"># Author: Manish Sud &lt;msud@san.rr.com&gt;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
21 8 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
22 9 <span class="c"># Copyright (C) 2015 Manish Sud. All rights reserved.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
23 10 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
24 11 <span class="c"># This file is part of MayaChemTools.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
25 12 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
26 13 <span class="c"># MayaChemTools is free software; you can redistribute it and/or modify it under</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
27 14 <span class="c"># the terms of the GNU Lesser General Public License as published by the Free</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
28 15 <span class="c"># Software Foundation; either version 3 of the License, or (at your option) any</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
29 16 <span class="c"># later version.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
30 17 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
31 18 <span class="c"># MayaChemTools is distributed in the hope that it will be useful, but without</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
32 19 <span class="c"># any warranty; without even the implied warranty of merchantability of fitness</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
33 20 <span class="c"># for a particular purpose. See the GNU Lesser General Public License for more</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34 21 <span class="c"># details.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 22 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36 23 <span class="c"># You should have received a copy of the GNU Lesser General Public License</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 24 <span class="c"># along with MayaChemTools; if not, see &lt;http://www.gnu.org/licenses/&gt; or</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38 25 <span class="c"># write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39 26 <span class="c"># Boston, MA, 02111-1307, USA.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40 27 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41 28
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 29 <span class="k">use</span> <span class="w">strict</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43 30 <span class="k">use</span> <span class="w">Exporter</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44 31
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45 32 <span class="k">use</span> <span class="w">vars</span> <span class="q">qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46 33
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47 34 <span class="i">@ISA</span> = <span class="q">qw(Exporter)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48 35 <span class="i">@EXPORT</span> = <span class="q">qw(Average AverageDeviation Covariance Correlation Euclidean Factorial FactorialDivison GeometricMean Frequency HarmonicMean KLargest KSmallest Kurtosis Maximum Minimum Mean Median Mode PearsonCorrelation Permutations Product Range RSquare Skewness Sum SumOfSquares StandardDeviation StandardDeviationN StandardError Standardize StandardScores StandardScoresN TrimMean Variance VarianceN)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49 36 <span class="i">@EXPORT_OK</span> = <span class="q">qw()</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50 37 <span class="i">%EXPORT_TAGS</span> = <span class="s">(</span><span class="w">all</span> <span class="cm">=&gt;</span> <span class="s">[</span><span class="i">@EXPORT</span><span class="cm">,</span> <span class="i">@EXPORT_OK</span><span class="s">]</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51 38
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 39 <span class="c"># Compute the mean of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53 <a name="Average-"></a> 40 <span class="k">sub </span><span class="m">Average</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 41 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55 42 <span class="k">return</span> <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56 43 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57 44
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 45 <span class="c"># Compute the average of the absolute deviation of an array of numbers: SUM( ABS(x[i] - Xmean) ) / n</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59 <a name="AverageDeviation-"></a> 46 <span class="k">sub </span><span class="m">AverageDeviation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60 47 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 48
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62 49 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63 50 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64 51 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65 52 <span class="k">my</span><span class="s">(</span><span class="i">$AverageDeviation</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$SumOfDeviations</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 53
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67 54 <span class="i">$AverageDeviation</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68 55 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 56 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70 57 <span class="i">$SumOfDeviations</span> += <span class="k">abs</span><span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71 58 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72 59 <span class="i">$AverageDeviation</span> = <span class="i">$SumOfDeviations</span> / <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73 60
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74 61 <span class="k">return</span> <span class="i">$AverageDeviation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75 62 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76 63
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77 64 <span class="c"># Compute correlation coefficient between two arrays of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 <a name="Correlation-"></a> 65 <span class="k">sub </span><span class="m">Correlation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79 66 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 67 <span class="k">return</span> <span class="i">PearsonCorrelation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81 68 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82 69
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83 70 <span class="c"># Compute the covariance between two arrays of numbers: SUM( (x[i] - Xmean) (y[i] - Ymean) ) / n</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84 <a name="Covariance-"></a> 71 <span class="k">sub </span><span class="m">Covariance</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85 72 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86 73
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87 74 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$XArrayRef</span> &amp;&amp; <span class="i">@$YArrayRef</span> &amp;&amp; <span class="s">(</span><span class="i">@$XArrayRef</span> == <span class="i">@$YArrayRef</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 75 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89 76 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90 77 <span class="k">my</span><span class="s">(</span><span class="i">$Covariance</span><span class="cm">,</span> <span class="i">$XMean</span><span class="cm">,</span> <span class="i">$YMean</span><span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$ProductOfDeviations</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 78
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92 79 <span class="i">$Covariance</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93 80 <span class="i">$XMean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 81 <span class="i">$YMean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$YArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95 82 <span class="i">$ProductOfDeviations</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96 83 <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#</span>{<span class="i">@$XArrayRef</span>}<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97 84 <span class="i">$ProductOfDeviations</span> += <span class="s">(</span><span class="s">(</span><span class="i">$XArrayRef</span>-&gt;[<span class="i">$Index</span>] - <span class="i">$XMean</span><span class="s">)</span> * <span class="s">(</span><span class="i">$YArrayRef</span>-&gt;[<span class="i">$Index</span>] - <span class="i">$YMean</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 85 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99 86 <span class="i">$Covariance</span> = <span class="i">$ProductOfDeviations</span> / <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100 87 <span class="k">return</span> <span class="i">$Covariance</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101 88 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 89
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103 90 <span class="c"># Compute the euclidean distance of an array of numbers: SQRT( SUM( x[i] ** 2) )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104 <a name="Euclidean-"></a> 91 <span class="k">sub </span><span class="m">Euclidean</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105 92 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106 93
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107 94 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 95 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109 96 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110 97 <span class="k">my</span><span class="s">(</span><span class="i">$SumOfSquares</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 98
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 99 <span class="i">$SumOfSquares</span> = <span class="i">SumOfSquares</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 100
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114 101 <span class="k">return</span> <span class="k">sqrt</span> <span class="i">$SumOfSquares</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115 102 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 103
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117 104 <span class="c"># Compute factorial of a number...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118 <a name="Factorial-"></a> 105 <span class="k">sub </span><span class="m">Factorial</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119 106 <span class="k">my</span><span class="s">(</span><span class="i">$Num</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120 107
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121 108 <span class="k">return</span> <span class="i">_Factorial</span><span class="s">(</span><span class="i">$Num</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122 109 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123 110
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124 111 <span class="c"># Perform factorial division of two numbers...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 <a name="FactorialDivison-"></a> 112 <span class="k">sub </span><span class="m">FactorialDivison</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126 113 <span class="k">my</span><span class="s">(</span><span class="i">$Numerator</span><span class="cm">,</span> <span class="i">$Denominator</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127 114
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128 115 <span class="c"># Only works for integer numbers...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 116 <span class="k">if</span> <span class="s">(</span><span class="i">$Numerator</span> &lt;= <span class="n">0</span> || <span class="s">(</span><span class="i">$Numerator</span> != <span class="k">int</span><span class="s">(</span><span class="i">$Numerator</span><span class="s">)</span><span class="s">)</span> ||
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 117 <span class="i">$Denominator</span> &lt;= <span class="n">0</span> || <span class="s">(</span><span class="i">$Denominator</span> != <span class="k">int</span><span class="s">(</span><span class="i">$Denominator</span><span class="s">)</span><span class="s">)</span> <span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131 118 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132 119 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133 120 <span class="k">my</span><span class="s">(</span><span class="i">$LargerNum</span><span class="cm">,</span> <span class="i">$SmallerNum</span><span class="cm">,</span> <span class="i">$Result</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134 121 <span class="i">$LargerNum</span> = <span class="s">(</span><span class="i">$Numerator</span> &gt; <span class="i">$Denominator</span><span class="s">)</span> ? <span class="i">$Numerator</span> <span class="co">:</span> <span class="i">$Denominator</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 122 <span class="i">$SmallerNum</span> = <span class="s">(</span><span class="i">$Numerator</span> &lt; <span class="i">$Denominator</span><span class="s">)</span> ? <span class="i">$Numerator</span> <span class="co">:</span> <span class="i">$Denominator</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136 123
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 124 <span class="i">$Result</span> = <span class="i">_Factorial</span><span class="s">(</span><span class="i">$LargerNum</span><span class="cm">,</span> <span class="i">$SmallerNum</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138 125 <span class="k">if</span> <span class="s">(</span><span class="i">$Numerator</span> &lt; <span class="i">$Denominator</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 126 <span class="i">$Result</span> = <span class="n">1</span>/<span class="i">$Result</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140 127 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 128 <span class="k">return</span> <span class="i">$Result</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142 129 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143 130
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 131 <span class="c"># Calculate factorial of a number upto a specific limit...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 <a name="_Factorial-"></a> 132 <span class="k">sub </span><span class="m">_Factorial</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146 133 <span class="k">my</span><span class="s">(</span><span class="i">$Num</span><span class="cm">,</span> <span class="i">$Limit</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147 134
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 135 <span class="c"># Only works for integer numbers...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
149 136 <span class="k">if</span> <span class="s">(</span><span class="i">$Num</span> &lt;= <span class="n">0</span> || <span class="s">(</span><span class="i">$Num</span> != <span class="k">int</span><span class="s">(</span><span class="i">$Num</span><span class="s">)</span><span class="s">)</span> || <span class="i">$Limit</span> &lt; <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
150 137 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
151 138 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
152 139
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
153 140 <span class="k">my</span><span class="s">(</span><span class="i">$Result</span><span class="s">)</span> = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 141
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 142 <span class="k">while</span> <span class="s">(</span><span class="i">$Num</span> &gt; <span class="i">$Limit</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 143 <span class="i">$Result</span> *= <span class="i">$Num</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157 144 <span class="i">$Num</span>--<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158 145 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 146 <span class="k">return</span> <span class="i">$Result</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160 147 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161 148
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 149 <span class="c"># Generate all possible permuations or a specific permutations of items in an array</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 150 <span class="c"># and return a reference to an array containing array references to generated permuations...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164 151 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 152 <span class="c"># This alogrithm is based on the example provided by Mark Jason-Dominus, and is available</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166 153 <span class="c"># at CPAN as mjd_permute standalone script.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 154 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168 <a name="Permutations-"></a> 155 <span class="k">sub </span><span class="m">Permutations</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169 156 <span class="k">my</span><span class="s">(</span><span class="i">@DataToPermute</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 157 <span class="k">my</span><span class="s">(</span><span class="i">$PermutationNum</span><span class="cm">,</span> <span class="i">$NumOfPermutations</span><span class="cm">,</span> <span class="i">@Permutations</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 158
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172 159 <span class="k">if</span> <span class="s">(</span>!<span class="i">@DataToPermute</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 160 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174 161 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175 162
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 163 <span class="i">@Permutations</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177 164 <span class="i">$NumOfPermutations</span> = <span class="i">Factorial</span><span class="s">(</span><span class="k">scalar</span> <span class="i">@DataToPermute</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 165
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179 166 <span class="k">for</span> <span class="s">(</span><span class="i">$PermutationNum</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$PermutationNum</span> &lt; <span class="i">$NumOfPermutations</span><span class="sc">;</span> <span class="i">$PermutationNum</span>++<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180 167 <span class="k">my</span> <span class="i">@Permutation</span> = <span class="i">@DataToPermute</span>[<span class="i">_PermutationNumToPermutation</span><span class="s">(</span><span class="i">$PermutationNum</span><span class="cm">,</span> <span class="i">$#DataToPermute</span><span class="s">)</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 168 <span class="k">push</span> <span class="i">@Permutations</span><span class="cm">,</span> \<span class="i">@Permutation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182 169 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183 170
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184 171 <span class="k">return</span> \<span class="i">@Permutations</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185 172 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186 173
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 174 <span class="c"># Generte Nth permutation for a collection of specific size...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188 175 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 <a name="_PermutationNumToPermutation-"></a> 176 <span class="k">sub </span><span class="m">_PermutationNumToPermutation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190 177 <span class="k">my</span><span class="s">(</span><span class="i">$Num</span><span class="cm">,</span> <span class="i">$Size</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 178
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 179 <span class="k">return</span> <span class="i">_PatternToPermutation</span><span class="s">(</span><span class="i">_PermutationNumToPattern</span><span class="s">(</span><span class="i">$Num</span><span class="cm">,</span> <span class="i">$Size</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193 180 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
194 181
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
195 182 <span class="c"># Generate Nth pattern for a collection of specific size...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
196 183 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
197 <a name="_PermutationNumToPattern-"></a> 184 <span class="k">sub </span><span class="m">_PermutationNumToPattern</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
198 185 <span class="k">my</span><span class="s">(</span><span class="i">$Num</span><span class="cm">,</span> <span class="i">$Size</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
199 186 <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">@Pattern</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
200 187
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
201 188 <span class="i">$Index</span> = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
202 189
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
203 190 <span class="k">while</span> <span class="s">(</span><span class="i">$Index</span> &lt;= <span class="i">$Size</span> + <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
204 191 <span class="k">push</span> <span class="i">@Pattern</span><span class="cm">,</span> <span class="i">$Num</span> % <span class="i">$Index</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
205 192 <span class="i">$Num</span> = <span class="k">int</span><span class="s">(</span><span class="i">$Num</span>/<span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
206 193 <span class="i">$Index</span>++<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
207 194 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
208 195
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
209 196 <span class="k">return</span> <span class="i">@Pattern</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
210 197 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
211 198
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
212 199 <span class="c"># Generate permutation of integers from pattern...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
213 200 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
214 <a name="_PatternToPermutation-"></a> 201 <span class="k">sub </span><span class="m">_PatternToPermutation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
215 202 <span class="k">my</span><span class="s">(</span><span class="i">@Pattern</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
216 203 <span class="k">my</span><span class="s">(</span><span class="i">@Source</span><span class="cm">,</span> <span class="i">@Permutation</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
217 204
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
218 205 <span class="i">@Source</span> = <span class="s">(</span><span class="n">0</span> .. <span class="i">$#Pattern</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
219 206
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
220 207 <span class="k">while</span> <span class="s">(</span><span class="i">@Pattern</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
221 208 <span class="k">push</span> <span class="i">@Permutation</span><span class="cm">,</span> <span class="k">splice</span><span class="s">(</span><span class="i">@Source</span><span class="cm">,</span> <span class="s">(</span><span class="k">pop</span> <span class="i">@Pattern</span><span class="s">)</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
222 209 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
223 210
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
224 211 <span class="k">return</span> <span class="i">@Permutation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
225 212 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
226 213
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
227 214 <span class="c"># Compute the frequency of occurance of values in an array of numbers. Three different</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
228 215 <span class="c"># invocation methods are supported:</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
229 216 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
230 217 <span class="c"># Frequency(\@ArrayRef) : Using the smallest and largest values, group the numbers into</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
231 218 <span class="c"># 10 bins.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
232 219 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
233 220 <span class="c"># Frequency(\@ArrayRef, $NumOfBins) : Using the smallest and largest values, group the</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
234 221 <span class="c"># numbers into specified bins.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
235 222 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
236 223 <span class="c"># Frequency(\@ArrayRef, \@BinRange): Use bin range to goup the values into different bins.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
237 224 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
238 225 <span class="c"># A hash array is returned with keys and values representing range and frequency values respectively.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
239 226 <span class="c"># The frequency value for a specific key corresponds to all the values which are greater than</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
240 227 <span class="c"># the previous key and less than or equal to the current key. A key value representing maximum value is</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
241 228 <span class="c"># added for generating frequency distribution for specific number of bins, and whenever the maximum</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
242 229 <span class="c"># array value is greater than the maximum specified in bin range, it is also added to bin range.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
243 230 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
244 <a name="Frequency-"></a> 231 <span class="k">sub </span><span class="m">Frequency</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
245 232 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
246 233
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
247 234 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
248 235 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
249 236 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
250 237
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
251 238 <span class="k">my</span><span class="s">(</span><span class="i">$BinRange</span><span class="cm">,</span> <span class="i">$NumOfBins</span><span class="cm">,</span> <span class="i">$BinRangeSpecified</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
252 239
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
253 240 <span class="i">$BinRangeSpecified</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
254 241 <span class="i">$NumOfBins</span> = <span class="n">10</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
255 242 <span class="k">if</span> <span class="s">(</span><span class="i">@_</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
256 243 <span class="k">if</span> <span class="s">(</span><span class="k">ref</span><span class="s">(</span><span class="i">$_</span>[<span class="n">1</span>]<span class="s">)</span> <span class="k">eq</span> <span class="q">&#39;ARRAY&#39;</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
257 244 <span class="i">$BinRange</span> = <span class="i">$_</span>[<span class="n">1</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
258 245 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$BinRange</span> &amp;&amp; <span class="s">(</span><span class="i">@$BinRange</span> &gt; <span class="n">1</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
259 246 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
260 247 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
261 248 <span class="c"># Make sure the bin range contains values in increasing order...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
262 249 <span class="k">my</span><span class="s">(</span><span class="i">$Index1</span><span class="cm">,</span> <span class="i">$Index2</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
263 250 <span class="k">for</span> <span class="i">$Index1</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#</span>{<span class="i">@$BinRange</span>}<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
264 251 <span class="k">for</span> <span class="i">$Index2</span> <span class="s">(</span><span class="s">(</span><span class="i">$Index1</span> + <span class="n">1</span><span class="s">)</span> .. <span class="i">$#</span>{<span class="i">@$BinRange</span>}<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
265 252 <span class="k">if</span> <span class="s">(</span><span class="i">$BinRange</span>-&gt;[<span class="i">$Index1</span>] &gt;= <span class="i">$BinRange</span>-&gt;[<span class="i">$Index2</span>]<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
266 253 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
267 254 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
268 255 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
269 256 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
270 257 <span class="i">$BinRangeSpecified</span> = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
271 258 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
272 259 <span class="k">else</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
273 260 <span class="i">$NumOfBins</span> = <span class="i">$_</span>[<span class="n">1</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
274 261 <span class="k">if</span> <span class="s">(</span><span class="i">$NumOfBins</span> &lt;= <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
275 262 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
276 263 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
277 264 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
278 265 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
279 266
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
280 267 <span class="c"># Setup range keys...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
281 268 <span class="k">my</span><span class="s">(</span><span class="i">@RangeKeys</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
282 269 <span class="i">@RangeKeys</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
283 270
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
284 271 <span class="k">my</span><span class="s">(</span><span class="i">$MinValue</span><span class="cm">,</span> <span class="i">$MaxValue</span><span class="s">)</span> = <span class="i">Range</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
285 272 <span class="k">if</span> <span class="s">(</span><span class="i">$BinRangeSpecified</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
286 273 <span class="k">push</span> <span class="i">@RangeKeys</span><span class="cm">,</span> <span class="i">@$BinRange</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
287 274 <span class="k">if</span> <span class="s">(</span><span class="i">$MaxValue</span> &gt; <span class="i">$RangeKeys</span>[<span class="i">$#RangeKeys</span>]<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
288 275 <span class="k">push</span> <span class="i">@RangeKeys</span><span class="cm">,</span> <span class="i">$MaxValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
289 276 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
290 277 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
291 278 <span class="k">else</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
292 279 <span class="k">my</span><span class="s">(</span><span class="i">$MinValue</span><span class="cm">,</span> <span class="i">$MaxValue</span><span class="s">)</span> = <span class="i">Range</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
293 280 <span class="k">my</span><span class="s">(</span><span class="i">$Interval</span><span class="s">)</span> = <span class="s">(</span><span class="i">$MaxValue</span> - <span class="i">$MinValue</span><span class="s">)</span>/<span class="i">$NumOfBins</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
294 281 <span class="k">my</span><span class="s">(</span><span class="i">$KeyValue</span><span class="s">)</span> = <span class="i">$MinValue</span> + <span class="i">$Interval</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
295 282 <span class="k">while</span> <span class="s">(</span><span class="i">$KeyValue</span> &lt; <span class="i">$MaxValue</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
296 283 <span class="k">push</span> <span class="i">@RangeKeys</span><span class="cm">,</span> <span class="i">$KeyValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
297 284 <span class="i">$KeyValue</span> += <span class="i">$Interval</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
298 285 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
299 286 <span class="k">push</span> <span class="i">@RangeKeys</span><span class="cm">,</span> <span class="i">$MaxValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
300 287 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
301 288
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
302 289 <span class="c">#Setup frequency hash array...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
303 290 <span class="k">my</span><span class="s">(</span><span class="i">%FrequencyMap</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
304 291 <span class="i">%FrequencyMap</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
305 292
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
306 293 <span class="i">%FrequencyMap</span> = <span class="k">map</span> <span class="s">{</span> <span class="i">$_</span> <span class="cm">=&gt;</span> <span class="n">0</span> <span class="s">}</span> <span class="i">@RangeKeys</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
307 294
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
308 295 <span class="c"># Count values...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
309 296 <span class="k">my</span><span class="s">(</span><span class="i">$Key</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
310 297
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
311 298 <span class="j">VALUE:</span> <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
312 299 <span class="k">for</span> <span class="i">$Key</span> <span class="s">(</span><span class="i">@RangeKeys</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
313 300 <span class="k">if</span> <span class="s">(</span><span class="i">$Value</span> &lt;= <span class="i">$Key</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
314 301 <span class="i">$FrequencyMap</span>{<span class="i">$Key</span>} += <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
315 302 <span class="k">next</span> <span class="j">VALUE</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
316 303 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
317 304 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
318 305 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
319 306 <span class="k">return</span> <span class="s">(</span><span class="i">%FrequencyMap</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
320 307 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
321 308
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
322 309 <span class="c"># Compute the geometric mean of an array of numbers: NthROOT( PRODUCT(x[i]) )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
323 <a name="GeometricMean-"></a> 310 <span class="k">sub </span><span class="m">GeometricMean</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
324 311 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
325 312
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
326 313 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
327 314 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
328 315 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
329 316 <span class="k">my</span><span class="s">(</span><span class="i">$Mean</span><span class="cm">,</span> <span class="i">$Product</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
330 317 <span class="i">$Product</span> = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
331 318 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
332 319 <span class="k">if</span> <span class="s">(</span><span class="i">$Value</span> &lt;= <span class="n">0</span> <span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
333 320 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
334 321 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
335 322 <span class="i">$Product</span> *= <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
336 323 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
337 324 <span class="i">$Mean</span> = <span class="i">$Product</span> ** <span class="s">(</span><span class="n">1</span> / <span class="i">@$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
338 325 <span class="k">return</span> <span class="i">$Mean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
339 326 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
340 327
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
341 328 <span class="c"># Compute the harmonic mean of an array of numbers: 1 / ( SUM(1/x[i]) / n )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
342 <a name="HarmonicMean-"></a> 329 <span class="k">sub </span><span class="m">HarmonicMean</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
343 330 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
344 331
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
345 332 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
346 333 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
347 334 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
348 335 <span class="k">my</span><span class="s">(</span><span class="i">$Mean</span><span class="cm">,</span> <span class="i">$Sum</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
349 336 <span class="i">$Sum</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
350 337 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
351 338 <span class="k">if</span> <span class="s">(</span><span class="i">$Value</span> &lt;= <span class="n">0</span> <span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
352 339 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
353 340 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
354 341 <span class="i">$Sum</span> += <span class="n">1</span>/<span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
355 342 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
356 343 <span class="i">$Mean</span> = <span class="n">1</span>/<span class="s">(</span><span class="i">$Sum</span>/<span class="i">@$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
357 344 <span class="k">return</span> <span class="i">$Mean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
358 345 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
359 346
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
360 347 <span class="c"># Return the k-largest value from an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
361 <a name="KLargest-"></a> 348 <span class="k">sub </span><span class="m">KLargest</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
362 349 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$K</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
363 350
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
364 351 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$XArrayRef</span> &amp;&amp; <span class="s">(</span><span class="i">$K</span> &gt; <span class="n">0</span><span class="s">)</span> &amp;&amp; <span class="s">(</span><span class="i">$K</span> &lt;= <span class="i">@$XArrayRef</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
365 352 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
366 353 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
367 354 <span class="k">my</span><span class="s">(</span><span class="i">$KLargest</span><span class="cm">,</span> <span class="i">@SortedXArray</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
368 355 <span class="i">@SortedXArray</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$b</span> &lt;=&gt; <span class="i">$a</span> <span class="s">}</span> <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
369 356 <span class="i">$KLargest</span> = <span class="i">$SortedXArray</span>[<span class="i">$K</span> - <span class="n">1</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
370 357 <span class="k">return</span> <span class="i">$KLargest</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
371 358 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
372 359
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
373 360 <span class="c"># Return the k-smallest value from an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
374 <a name="KSmallest-"></a> 361 <span class="k">sub </span><span class="m">KSmallest</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
375 362 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$K</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
376 363
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
377 364 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$XArrayRef</span> &amp;&amp; <span class="s">(</span><span class="i">$K</span> &gt; <span class="n">0</span><span class="s">)</span> &amp;&amp; <span class="s">(</span><span class="i">$K</span> &lt;= <span class="i">@$XArrayRef</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
378 365 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
379 366 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
380 367 <span class="k">my</span><span class="s">(</span><span class="i">$KSmallest</span><span class="cm">,</span> <span class="i">@SortedXArray</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
381 368 <span class="i">@SortedXArray</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$a</span> &lt;=&gt; <span class="i">$b</span> <span class="s">}</span> <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
382 369 <span class="i">$KSmallest</span> = <span class="i">$SortedXArray</span>[<span class="i">$K</span> - <span class="n">1</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
383 370 <span class="k">return</span> <span class="i">$KSmallest</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
384 371 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
385 372
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
386 373 <span class="c"># Compute the kurtosis of an array of numbers:</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
387 374 <span class="c"># [ {n(n + 1)/(n - 1)(n - 2)(n - 3)} SUM{ ((x[i] - Xmean)/STDDEV)^4 } ] - {3((n - 1)^2)}/{(n - 2)(n-3)}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
388 375 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
389 <a name="Kurtosis-"></a> 376 <span class="k">sub </span><span class="m">Kurtosis</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
390 377 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
391 378
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
392 379 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span> || <span class="s">(</span><span class="s">(</span><span class="i">@$XArrayRef</span> - <span class="n">3</span><span class="s">)</span> &lt;= <span class="n">0</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
393 380 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
394 381 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
395 382 <span class="k">my</span><span class="s">(</span><span class="i">$Kurtosis</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$StandardDeviation</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
396 383 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
397 384 <span class="k">if</span> <span class="s">(</span>!<span class="k">defined</span> <span class="i">$Mean</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
398 385 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
399 386 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
400 387 <span class="i">$StandardDeviation</span> = <span class="i">StandardDeviation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
401 388 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="k">defined</span> <span class="i">$StandardDeviation</span> &amp;&amp; <span class="i">$StandardDeviation</span> != <span class="n">0</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
402 389 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
403 390 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
404 391
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
405 392 <span class="k">my</span><span class="s">(</span><span class="i">$SumOfScores</span><span class="cm">,</span> <span class="i">$SampleSize</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
406 393 <span class="i">$SumOfScores</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
407 394 <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
408 395 <span class="i">$SumOfScores</span> += <span class="s">(</span><span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span>/<span class="i">$StandardDeviation</span><span class="s">)</span> ** <span class="n">4</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
409 396 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
410 397 <span class="i">$SampleSize</span> = <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
411 398 <span class="i">$Kurtosis</span> = <span class="s">(</span><span class="s">(</span><span class="s">(</span><span class="i">$SampleSize</span> * <span class="s">(</span><span class="i">$SampleSize</span> + <span class="n">1</span><span class="s">)</span><span class="s">)</span>/<span class="s">(</span><span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">1</span><span class="s">)</span> * <span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">2</span><span class="s">)</span> * <span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">3</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> * <span class="i">$SumOfScores</span><span class="s">)</span> - <span class="s">(</span><span class="s">(</span><span class="n">3</span> * <span class="s">(</span><span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">1</span><span class="s">)</span> ** <span class="n">2</span><span class="s">)</span><span class="s">)</span>/<span class="s">(</span><span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">2</span><span class="s">)</span> * <span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">3</span><span class="s">)</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
412 399 <span class="k">return</span> <span class="i">$Kurtosis</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
413 400 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
414 401
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
415 402 <span class="c"># Return the smallest value from an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
416 <a name="Minimum-"></a> 403 <span class="k">sub </span><span class="m">Minimum</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
417 404 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
418 405 <span class="k">return</span> <span class="i">KSmallest</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
419 406 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
420 407
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
421 408 <span class="c"># Return the largest value from an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
422 <a name="Maximum-"></a> 409 <span class="k">sub </span><span class="m">Maximum</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
423 410 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
424 411 <span class="k">return</span> <span class="i">KLargest</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
425 412 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
426 413
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
427 414 <span class="c"># Compute the mean of an array of numbers: SUM( x[i] ) / n</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
428 <a name="Mean-"></a> 415 <span class="k">sub </span><span class="m">Mean</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
429 416 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
430 417
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
431 418 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
432 419 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
433 420 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
434 421 <span class="k">my</span><span class="s">(</span><span class="i">$Mean</span><span class="cm">,</span> <span class="i">$Sum</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
435 422 <span class="i">$Sum</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
436 423 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
437 424 <span class="i">$Sum</span> += <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
438 425 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
439 426 <span class="i">$Mean</span> = <span class="i">$Sum</span> / <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
440 427 <span class="k">return</span> <span class="i">$Mean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
441 428 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
442 429
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
443 430 <span class="c"># Compute the median value of an array of numbers. For an even number array, it&#39;s</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
444 431 <span class="c"># the average of two middle values.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
445 432 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
446 433 <span class="c"># For even values of n: Xsorted[(n - 1)/2 + 1]</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
447 434 <span class="c"># For odd values of n: (Xsorted[n/2] + Xsorted[n/2 + 1])/2</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
448 435 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
449 <a name="Median-"></a> 436 <span class="k">sub </span><span class="m">Median</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
450 437 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
451 438
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
452 439 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
453 440 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
454 441 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
455 442 <span class="k">my</span><span class="s">(</span><span class="i">$Median</span><span class="cm">,</span> <span class="i">@SortedXArray</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
456 443 <span class="i">$Median</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
457 444 <span class="i">@SortedXArray</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$a</span> &lt;=&gt; <span class="i">$b</span> <span class="s">}</span> <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
458 445 <span class="k">if</span> <span class="s">(</span><span class="i">@$XArrayRef</span> % <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
459 446 <span class="k">my</span><span class="s">(</span><span class="i">$MidIndex</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
460 447 <span class="i">$MidIndex</span> = <span class="k">int</span><span class="s">(</span><span class="i">@SortedXArray</span> - <span class="n">1</span><span class="s">)</span>/<span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
461 448 <span class="i">$Median</span> = <span class="i">$SortedXArray</span>[<span class="i">$MidIndex</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
462 449 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
463 450 <span class="k">else</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
464 451 <span class="c"># Even number array...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
465 452 <span class="k">my</span><span class="s">(</span><span class="i">$MidPosition</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
466 453 <span class="i">$MidPosition</span> = <span class="k">int</span><span class="s">(</span><span class="i">@SortedXArray</span> / <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
467 454 <span class="i">$Median</span> = <span class="s">(</span><span class="i">$SortedXArray</span>[<span class="i">$MidPosition</span> - <span class="n">1</span>] + <span class="i">$SortedXArray</span>[<span class="i">$MidPosition</span>]<span class="s">)</span> / <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
468 455 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
469 456 <span class="k">return</span> <span class="i">$Median</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
470 457 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
471 458
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
472 459 <span class="c"># Return the most frequently occuring value in an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
473 <a name="Mode-"></a> 460 <span class="k">sub </span><span class="m">Mode</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
474 461 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
475 462
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
476 463 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
477 464 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
478 465 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
479 466 <span class="k">my</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">%ValueToCountMap</span><span class="cm">,</span> <span class="i">@CountList</span><span class="cm">,</span> <span class="i">@SortedCountList</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
480 467 <span class="i">%ValueToCountMap</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
481 468 <span class="i">@CountList</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
482 469 <span class="i">@SortedCountList</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
483 470 <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
484 471 <span class="k">if</span> <span class="s">(</span><span class="k">exists</span> <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>}<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
485 472 <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} += <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
486 473 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
487 474 <span class="k">else</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
488 475 <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
489 476 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
490 477 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
491 478 <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="k">keys</span> <span class="i">%ValueToCountMap</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
492 479 <span class="k">push</span> <span class="i">@CountList</span><span class="cm">,</span> <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>}<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
493 480 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
494 481 <span class="i">@SortedCountList</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$b</span> &lt;=&gt; <span class="i">$a</span> <span class="s">}</span> <span class="i">@CountList</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
495 482
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
496 483 <span class="c"># Make sure the frequency of mode value is greater than one and check for</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
497 484 <span class="c"># multiple modes as well...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
498 485 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
499 486 <span class="k">my</span><span class="s">(</span><span class="i">$ModeCount</span><span class="cm">,</span> <span class="i">$ModeValue</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
500 487 <span class="i">$ModeCount</span> = <span class="i">$SortedCountList</span>[<span class="n">0</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
501 488 <span class="k">if</span> <span class="s">(</span><span class="i">$ModeCount</span> &lt;= <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
502 489 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
503 490 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
504 491 <span class="c"># Get the first mode value...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
505 492 <span class="j">VALUE:</span> <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="k">keys</span> <span class="i">%ValueToCountMap</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
506 493 <span class="k">if</span> <span class="s">(</span><span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} == <span class="i">$ModeCount</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
507 494 <span class="i">$ModeValue</span> = <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
508 495 <span class="c"># Set it to zero to skip it next time...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
509 496 <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
510 497 <span class="k">last</span> <span class="j">VALUE</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
511 498 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
512 499 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
513 500
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
514 501 <span class="k">if</span> <span class="s">(</span><span class="k">wantarray</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
515 502 <span class="c"># Retrieve all the modes...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
516 503 <span class="k">my</span><span class="s">(</span><span class="i">@Modes</span><span class="cm">,</span> <span class="i">$Count</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
517 504 <span class="i">@Modes</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
518 505 <span class="k">push</span> <span class="i">@Modes</span><span class="cm">,</span> <span class="i">$ModeValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
519 506 <span class="k">for</span> <span class="i">$Count</span> <span class="s">(</span><span class="i">@SortedCountList</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
520 507 <span class="k">if</span> <span class="s">(</span><span class="i">$Count</span> == <span class="i">$ModeCount</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
521 508 <span class="j">VALUE:</span> <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="k">keys</span> <span class="i">%ValueToCountMap</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
522 509 <span class="k">if</span> <span class="s">(</span><span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} == <span class="i">$ModeCount</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
523 510 <span class="k">push</span> <span class="i">@Modes</span><span class="cm">,</span> <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
524 511 <span class="c"># Set it to zero to skip it next time...</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
525 512 <span class="i">$ValueToCountMap</span>{<span class="i">$Value</span>} = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
526 513 <span class="k">last</span> <span class="j">VALUE</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
527 514 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
528 515 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
529 516 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
530 517 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
531 518 <span class="k">return</span> <span class="k">sort</span> <span class="s">{</span><span class="i">$b</span> &lt;=&gt; <span class="i">$a</span><span class="s">}</span> <span class="i">@Modes</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
532 519 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
533 520 <span class="k">else</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
534 521 <span class="k">return</span> <span class="i">$ModeValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
535 522 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
536 523 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
537 524
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
538 525
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
539 526 <span class="c"># Compute the Pearson correlation coefficient between two arrays of numbers:</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
540 527 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
541 528 <span class="c"># SUM( (x[i] - Xmean)(y[i] - Ymean) ) / SQRT( SUM( (x[i] - Xmean)^2 )(SUM( (y[i] - Ymean)^2 )) )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
542 529 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
543 530 <span class="c"># It returns values in the range from -1.0 to 1.0</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
544 <a name="PearsonCorrelation-"></a> 531 <span class="k">sub </span><span class="m">PearsonCorrelation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
545 532 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
546 533
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
547 534 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$XArrayRef</span> &amp;&amp; <span class="i">@$YArrayRef</span> &amp;&amp; <span class="s">(</span><span class="i">@$XArrayRef</span> == <span class="i">@$YArrayRef</span><span class="s">)</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
548 535 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
549 536 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
550 537 <span class="k">my</span><span class="s">(</span><span class="i">$Correlation</span><span class="cm">,</span> <span class="i">$XMean</span><span class="cm">,</span> <span class="i">$YMean</span><span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$XValueDeviation</span><span class="cm">,</span> <span class="i">$YValueDeviation</span><span class="cm">,</span> <span class="i">$SquareOfXDeviations</span><span class="cm">,</span> <span class="i">$SquareOfYDeviations</span><span class="cm">,</span> <span class="i">$ProductOfDeviations</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
551 538
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
552 539 <span class="i">$Correlation</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
553 540 <span class="i">$XMean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
554 541 <span class="i">$YMean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$YArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
555 542 <span class="i">$ProductOfDeviations</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$SquareOfXDeviations</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$SquareOfYDeviations</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
556 543 <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#</span>{<span class="i">@$XArrayRef</span>}<span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
557 544 <span class="i">$XValueDeviation</span> = <span class="i">$XArrayRef</span>-&gt;[<span class="i">$Index</span>] - <span class="i">$XMean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
558 545 <span class="i">$YValueDeviation</span> = <span class="i">$YArrayRef</span>-&gt;[<span class="i">$Index</span>] - <span class="i">$YMean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
559 546 <span class="i">$ProductOfDeviations</span> += <span class="s">(</span><span class="i">$XValueDeviation</span> * <span class="i">$YValueDeviation</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
560 547 <span class="i">$SquareOfXDeviations</span> += <span class="i">$XValueDeviation</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
561 548 <span class="i">$SquareOfYDeviations</span> += <span class="i">$YValueDeviation</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
562 549 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
563 550 <span class="i">$Correlation</span> = <span class="i">$ProductOfDeviations</span> / <span class="k">sqrt</span><span class="s">(</span><span class="i">$SquareOfXDeviations</span> * <span class="i">$SquareOfYDeviations</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
564 551 <span class="k">return</span> <span class="i">$Correlation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
565 552 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
566 553
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
567 554 <span class="c"># Return the smallest and largest values from an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
568 <a name="Range-"></a> 555 <span class="k">sub </span><span class="m">Range</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
569 556 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
570 557
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
571 558 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
572 559 <span class="k">return</span> <span class="s">(</span><span class="k">undef</span><span class="cm">,</span> <span class="k">undef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
573 560 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
574 561 <span class="k">my</span><span class="s">(</span><span class="i">$Smallest</span><span class="cm">,</span> <span class="i">$Largest</span><span class="cm">,</span> <span class="i">@SortedXArray</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
575 562 <span class="i">@SortedXArray</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$a</span> &lt;=&gt; <span class="i">$b</span> <span class="s">}</span> <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
576 563 <span class="i">$Smallest</span> = <span class="i">$SortedXArray</span>[<span class="n">0</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
577 564 <span class="i">$Largest</span> = <span class="i">$SortedXArray</span>[<span class="i">$#SortedXArray</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
578 565 <span class="k">return</span> <span class="s">(</span><span class="i">$Smallest</span><span class="cm">,</span> <span class="i">$Largest</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
579 566 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
580 567
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
581 568 <span class="c"># Compute square of the Pearson correlation coefficient between two arrays of numbers.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
582 569 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
583 <a name="RSquare-"></a> 570 <span class="k">sub </span><span class="m">RSquare</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
584 571 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
585 572 <span class="k">my</span><span class="s">(</span><span class="i">$RSquare</span><span class="cm">,</span> <span class="i">$Correlation</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
586 573
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
587 574 <span class="i">$RSquare</span> = <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
588 575 <span class="i">$Correlation</span> = <span class="i">PearsonCorrelation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$YArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
589 576 <span class="k">if</span> <span class="s">(</span><span class="k">defined</span> <span class="i">$Correlation</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
590 577 <span class="i">$RSquare</span> = <span class="i">$Correlation</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
591 578 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
592 579 <span class="k">return</span> <span class="i">$RSquare</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
593 580 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
594 581
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
595 582 <span class="c"># Compute the skewness of an array of numbers:</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
596 583 <span class="c"># {n/(n - 1)(n - 2)} SUM{ ((x[i] - Xmean)/STDDEV)^3 }</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
597 584 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
598 <a name="Skewness-"></a> 585 <span class="k">sub </span><span class="m">Skewness</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
599 586 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
600 587
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
601 588 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span> || <span class="s">(</span><span class="s">(</span><span class="i">@$XArrayRef</span> - <span class="n">2</span><span class="s">)</span> &lt;= <span class="n">0</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
602 589 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
603 590 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
604 591 <span class="k">my</span><span class="s">(</span><span class="i">$Skewness</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$StandardDeviation</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
605 592 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
606 593 <span class="k">if</span> <span class="s">(</span>!<span class="k">defined</span> <span class="i">$Mean</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
607 594 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
608 595 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
609 596 <span class="i">$StandardDeviation</span> = <span class="i">StandardDeviation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
610 597 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="k">defined</span> <span class="i">$StandardDeviation</span> &amp;&amp; <span class="i">$StandardDeviation</span> != <span class="n">0</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
611 598 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
612 599 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
613 600
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
614 601 <span class="k">my</span><span class="s">(</span><span class="i">$SumOfScores</span><span class="cm">,</span> <span class="i">$SampleSize</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
615 602 <span class="i">$SumOfScores</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
616 603 <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
617 604 <span class="i">$SumOfScores</span> += <span class="s">(</span><span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span>/<span class="i">$StandardDeviation</span><span class="s">)</span> ** <span class="n">3</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
618 605 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
619 606 <span class="i">$SampleSize</span> = <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
620 607 <span class="i">$Skewness</span> = <span class="s">(</span><span class="i">$SampleSize</span>/<span class="s">(</span><span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">1</span><span class="s">)</span> * <span class="s">(</span><span class="i">$SampleSize</span> - <span class="n">2</span><span class="s">)</span> <span class="s">)</span><span class="s">)</span> * <span class="i">$SumOfScores</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
621 608 <span class="k">return</span> <span class="i">$Skewness</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
622 609 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
623 610
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
624 611 <span class="c"># Compute the standard deviation of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
625 <a name="StandardDeviation-"></a> 612 <span class="k">sub </span><span class="m">StandardDeviation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
626 613 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
627 614 <span class="k">return</span> <span class="i">_CalculateStandardDeviation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
628 615 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
629 616
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
630 617 <span class="c"># Compute the standard deviation of an array of numbers representing entire population</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
631 <a name="StandardDeviationN-"></a> 618 <span class="k">sub </span><span class="m">StandardDeviationN</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
632 619 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
633 620 <span class="k">return</span> <span class="i">_CalculateStandardDeviation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
634 621 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
635 622
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
636 623 <span class="c"># Compute the standard deviation of an array of numbers.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
637 624 <span class="c"># Mode 1: SQRT ( SUM( (x[i] - mean)^2 ) / n )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
638 625 <span class="c"># Mode 2: SQRT ( SUM( (x[i] - mean)^2 ) / (n - 1) )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
639 626 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
640 <a name="_CalculateStandardDeviation-"></a> 627 <span class="k">sub </span><span class="m">_CalculateStandardDeviation</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
641 628 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$Mode</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
642 629
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
643 630 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
644 631 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
645 632 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
646 633 <span class="k">my</span><span class="s">(</span><span class="i">$StandardDeviation</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$SquareOfDeviations</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$N</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
647 634
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
648 635 <span class="i">$StandardDeviation</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
649 636 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
650 637 <span class="i">$SquareOfDeviations</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
651 638 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
652 639 <span class="i">$SquareOfDeviations</span> += <span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
653 640 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
654 641 <span class="i">$N</span> = <span class="s">(</span><span class="i">$Mode</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">@$XArrayRef</span> <span class="co">:</span> <span class="s">(</span><span class="i">@$XArrayRef</span> - <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
655 642 <span class="i">$StandardDeviation</span> = <span class="k">sqrt</span><span class="s">(</span><span class="i">$SquareOfDeviations</span> / <span class="i">$N</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
656 643
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
657 644 <span class="k">return</span> <span class="i">$StandardDeviation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
658 645 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
659 646
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
660 647 <span class="c"># Compute the standard error using standard deviation and sample size</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
661 <a name="StandardError-"></a> 648 <span class="k">sub </span><span class="m">StandardError</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
662 649 <span class="k">my</span><span class="s">(</span><span class="i">$StandardDeviation</span><span class="cm">,</span> <span class="i">$Count</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
663 650
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
664 651 <span class="k">if</span> <span class="s">(</span><span class="i">$Count</span> &lt;= <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
665 652 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
666 653 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
667 654 <span class="k">my</span><span class="s">(</span><span class="i">$StandardError</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
668 655 <span class="i">$StandardError</span> = <span class="i">$StandardDeviation</span> / <span class="k">sqrt</span><span class="s">(</span><span class="i">$Count</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
669 656
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
670 657 <span class="k">return</span> <span class="i">$StandardError</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
671 658 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
672 659
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
673 660 <span class="c"># Standardize the value using mean and standard deviation</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
674 <a name="Standardize-"></a> 661 <span class="k">sub </span><span class="m">Standardize</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
675 662 <span class="k">my</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$StandardDeviation</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
676 663
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
677 664 <span class="k">if</span> <span class="s">(</span><span class="i">$StandardDeviation</span> &lt;= <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
678 665 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
679 666 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
680 667 <span class="k">my</span><span class="s">(</span><span class="i">$StandardizedValue</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
681 668 <span class="i">$StandardizedValue</span> = <span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span>/<span class="i">$StandardDeviation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
682 669
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
683 670 <span class="k">return</span> <span class="i">$StandardizedValue</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
684 671 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
685 672
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
686 673 <span class="c"># Compute the standard deviation above the mean for an array of numbers.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
687 <a name="StandardScores-"></a> 674 <span class="k">sub </span><span class="m">StandardScores</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
688 675 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
689 676 <span class="k">return</span> <span class="i">_CalculateStandardScores</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
690 677 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
691 678
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
692 679 <span class="c"># Compute the standard deviation above the mean for an array of numbers representing entire population</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
693 <a name="StandardScoresN-"></a> 680 <span class="k">sub </span><span class="m">StandardScoresN</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
694 681 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
695 682 <span class="k">return</span> <span class="i">_CalculateStandardScores</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
696 683 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
697 684
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
698 685 <span class="c"># Compute the standard deviation above the mean for an array of numbers.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
699 686 <span class="c"># Mode 1: (x[i] - mean) / n</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
700 687 <span class="c"># Mode 2: (x[i] - mean) / (n - 1)</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
701 688 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
702 <a name="_CalculateStandardScores-"></a> 689 <span class="k">sub </span><span class="m">_CalculateStandardScores</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
703 690 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$Mode</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
704 691
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
705 692 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
706 693 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
707 694 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
708 695 <span class="k">my</span><span class="s">(</span><span class="i">@StandardScores</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$StandardDeviation</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
709 696
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
710 697 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
711 698 <span class="i">$StandardDeviation</span> = <span class="i">_CalculateStandardDeviation</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$Mode</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
712 699 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="k">defined</span><span class="s">(</span><span class="i">$StandardDeviation</span><span class="s">)</span> &amp;&amp; <span class="i">$StandardDeviation</span> &gt; <span class="n">0</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
713 700 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
714 701 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
715 702 <span class="i">@StandardScores</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
716 703 <span class="k">for</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
717 704 <span class="k">push</span> <span class="i">@StandardScores</span><span class="cm">,</span> <span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span>/<span class="i">$StandardDeviation</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
718 705 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
719 706
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
720 707 <span class="k">return</span> <span class="i">@StandardScores</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
721 708 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
722 709
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
723 710 <span class="c"># Compute the product of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
724 <a name="Product-"></a> 711 <span class="k">sub </span><span class="m">Product</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
725 712 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
726 713
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
727 714 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
728 715 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
729 716 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
730 717 <span class="k">my</span><span class="s">(</span><span class="i">$Product</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
731 718 <span class="i">$Product</span> = <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
732 719 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
733 720 <span class="i">$Product</span> *= <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
734 721 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
735 722 <span class="k">return</span> <span class="i">$Product</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
736 723 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
737 724
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
738 725 <span class="c"># Compute the sum of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
739 <a name="Sum-"></a> 726 <span class="k">sub </span><span class="m">Sum</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
740 727 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
741 728
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
742 729 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
743 730 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
744 731 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
745 732 <span class="k">my</span><span class="s">(</span><span class="i">$Sum</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
746 733 <span class="i">$Sum</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
747 734 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
748 735 <span class="i">$Sum</span> += <span class="i">$Value</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
749 736 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
750 737 <span class="k">return</span> <span class="i">$Sum</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
751 738 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
752 739
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
753 740 <span class="c"># Compute the sum of squares of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
754 <a name="SumOfSquares-"></a> 741 <span class="k">sub </span><span class="m">SumOfSquares</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
755 742 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
756 743
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
757 744 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
758 745 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
759 746 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
760 747 <span class="k">my</span><span class="s">(</span><span class="i">$SumOfSquares</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
761 748 <span class="i">$SumOfSquares</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
762 749 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
763 750 <span class="i">$SumOfSquares</span> += <span class="i">$Value</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
764 751 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
765 752 <span class="k">return</span> <span class="i">$SumOfSquares</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
766 753 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
767 754
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
768 755 <span class="c"># Compute the mean of an array of numbers by excluding a fraction of</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
769 756 <span class="c"># numbers from the top and bottom of the data set.</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
770 <a name="TrimMean-"></a> 757 <span class="k">sub </span><span class="m">TrimMean</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
771 758 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$FractionToExclude</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
772 759
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
773 760 <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="i">@$XArrayRef</span> &amp;&amp; <span class="i">$FractionToExclude</span> &gt; <span class="n">0</span> &amp;&amp; <span class="i">$FractionToExclude</span> &lt;= <span class="n">1</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
774 761 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
775 762 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
776 763 <span class="k">my</span><span class="s">(</span><span class="i">$NumberToExclude</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
777 764 <span class="i">$NumberToExclude</span> = <span class="k">int</span><span class="s">(</span><span class="i">@$XArrayRef</span> * <span class="i">$FractionToExclude</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
778 765 <span class="i">$NumberToExclude</span> = <span class="s">(</span><span class="i">$NumberToExclude</span> % <span class="n">2</span><span class="s">)</span> ? <span class="s">(</span><span class="i">$NumberToExclude</span> - <span class="n">1</span><span class="s">)</span> <span class="co">:</span> <span class="i">$NumberToExclude</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
779 766 <span class="k">if</span> <span class="s">(</span><span class="i">$NumberToExclude</span> == <span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
780 767 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
781 768 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
782 769 <span class="k">my</span><span class="s">(</span><span class="i">$Mean</span><span class="cm">,</span> <span class="i">$Sum</span><span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$FirstIndex</span><span class="cm">,</span> <span class="i">$LastIndex</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
783 770 <span class="i">$FirstIndex</span> = <span class="i">$NumberToExclude</span>/<span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
784 771 <span class="i">$LastIndex</span> = <span class="i">@$XArrayRef</span> - <span class="s">(</span><span class="i">$NumberToExclude</span>/<span class="n">2</span><span class="s">)</span> - <span class="n">1</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
785 772 <span class="i">$Sum</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
786 773 <span class="k">my</span><span class="s">(</span><span class="i">@SortedXArray</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
787 774 <span class="i">@SortedXArray</span> = <span class="k">sort</span> <span class="s">{</span> <span class="i">$a</span> &lt;=&gt; <span class="i">$b</span> <span class="s">}</span> <span class="i">@$XArrayRef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
788 775 <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="i">$FirstIndex</span> .. <span class="i">$LastIndex</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
789 776 <span class="i">$Sum</span> += <span class="i">$SortedXArray</span>[<span class="i">$Index</span>]<span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
790 777 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
791 778 <span class="i">$Mean</span> = <span class="i">$Sum</span>/<span class="s">(</span><span class="i">@SortedXArray</span> - <span class="i">$NumberToExclude</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
792 779 <span class="k">return</span> <span class="i">$Mean</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
793 780 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
794 781
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
795 782 <span class="c"># Compute the variance of an array of numbers</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
796 <a name="Variance-"></a> 783 <span class="k">sub </span><span class="m">Variance</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
797 784 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
798 785 <span class="k">return</span> <span class="i">_CalculateVariance</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
799 786 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
800 787
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
801 788 <span class="c"># Compute the variance of an array of numbers representing entire population</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
802 <a name="VarianceN-"></a> 789 <span class="k">sub </span><span class="m">VarianceN</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
803 790 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
804 791 <span class="k">return</span> <span class="i">_CalculateVariance</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
805 792 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
806 793
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
807 794 <span class="c"># Compute the variance of an array of numbers:</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
808 795 <span class="c"># Mode 1: SUM( (x[i] - Xmean)^2 / n )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
809 796 <span class="c"># Mode 2: SUM( (x[i] - Xmean)^2 / (n - 1) )</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
810 797 <span class="c">#</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
811 <a name="_CalculateVariance-"></a> 798 <span class="k">sub </span><span class="m">_CalculateVariance</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
812 799 <span class="k">my</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="cm">,</span> <span class="i">$Mode</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
813 800
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
814 801 <span class="k">if</span> <span class="s">(</span>!<span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
815 802 <span class="k">return</span> <span class="k">undef</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
816 803 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
817 804 <span class="k">my</span><span class="s">(</span><span class="i">$Variance</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$SquareOfDeviations</span><span class="cm">,</span> <span class="i">$Mean</span><span class="cm">,</span> <span class="i">$N</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
818 805
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
819 806 <span class="i">$Variance</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
820 807 <span class="i">$Mean</span> = <span class="i">Mean</span><span class="s">(</span><span class="i">$XArrayRef</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
821 808 <span class="i">$SquareOfDeviations</span> = <span class="n">0</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
822 809 <span class="k">foreach</span> <span class="i">$Value</span> <span class="s">(</span><span class="i">@$XArrayRef</span><span class="s">)</span> <span class="s">{</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
823 810 <span class="i">$SquareOfDeviations</span> += <span class="s">(</span><span class="i">$Value</span> - <span class="i">$Mean</span><span class="s">)</span> ** <span class="n">2</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
824 811 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
825 812 <span class="i">$N</span> = <span class="s">(</span><span class="i">$Mode</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">@$XArrayRef</span> <span class="co">:</span> <span class="s">(</span><span class="i">@$XArrayRef</span> - <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
826 813 <span class="i">$Variance</span> = <span class="i">$SquareOfDeviations</span> / <span class="i">$N</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
827 814
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
828 815 <span class="k">return</span> <span class="i">$Variance</span><span class="sc">;</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
829 816 <span class="s">}</span>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
830 817
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
831 <a name="EOF-"></a></pre>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
832 <p>&nbsp;</p>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
833 <br />
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
834 <center>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
835 <img src="../../../images/h2o2.png">
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
836 </center>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
837 </body>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
838 </html>