alglib 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +253 -0
  3. data/README.txt +33 -0
  4. data/Rakefile +27 -0
  5. data/ext/Rakefile +24 -0
  6. data/ext/alglib.i +24 -0
  7. data/ext/alglib/Makefile +157 -0
  8. data/ext/alglib/airyf.cpp +372 -0
  9. data/ext/alglib/airyf.h +81 -0
  10. data/ext/alglib/alglib.cpp +8558 -0
  11. data/ext/alglib/alglib_util.cpp +19 -0
  12. data/ext/alglib/alglib_util.h +14 -0
  13. data/ext/alglib/ap.cpp +877 -0
  14. data/ext/alglib/ap.english.html +364 -0
  15. data/ext/alglib/ap.h +666 -0
  16. data/ext/alglib/ap.russian.html +442 -0
  17. data/ext/alglib/apvt.h +754 -0
  18. data/ext/alglib/bdss.cpp +1500 -0
  19. data/ext/alglib/bdss.h +251 -0
  20. data/ext/alglib/bdsvd.cpp +1339 -0
  21. data/ext/alglib/bdsvd.h +164 -0
  22. data/ext/alglib/bessel.cpp +1226 -0
  23. data/ext/alglib/bessel.h +331 -0
  24. data/ext/alglib/betaf.cpp +105 -0
  25. data/ext/alglib/betaf.h +74 -0
  26. data/ext/alglib/bidiagonal.cpp +1328 -0
  27. data/ext/alglib/bidiagonal.h +350 -0
  28. data/ext/alglib/binomialdistr.cpp +247 -0
  29. data/ext/alglib/binomialdistr.h +153 -0
  30. data/ext/alglib/blas.cpp +576 -0
  31. data/ext/alglib/blas.h +132 -0
  32. data/ext/alglib/cblas.cpp +226 -0
  33. data/ext/alglib/cblas.h +57 -0
  34. data/ext/alglib/cdet.cpp +138 -0
  35. data/ext/alglib/cdet.h +92 -0
  36. data/ext/alglib/chebyshev.cpp +216 -0
  37. data/ext/alglib/chebyshev.h +76 -0
  38. data/ext/alglib/chisquaredistr.cpp +157 -0
  39. data/ext/alglib/chisquaredistr.h +144 -0
  40. data/ext/alglib/cholesky.cpp +285 -0
  41. data/ext/alglib/cholesky.h +86 -0
  42. data/ext/alglib/cinverse.cpp +298 -0
  43. data/ext/alglib/cinverse.h +111 -0
  44. data/ext/alglib/clu.cpp +337 -0
  45. data/ext/alglib/clu.h +120 -0
  46. data/ext/alglib/correlation.cpp +280 -0
  47. data/ext/alglib/correlation.h +77 -0
  48. data/ext/alglib/correlationtests.cpp +726 -0
  49. data/ext/alglib/correlationtests.h +134 -0
  50. data/ext/alglib/crcond.cpp +826 -0
  51. data/ext/alglib/crcond.h +148 -0
  52. data/ext/alglib/creflections.cpp +310 -0
  53. data/ext/alglib/creflections.h +165 -0
  54. data/ext/alglib/csolve.cpp +312 -0
  55. data/ext/alglib/csolve.h +99 -0
  56. data/ext/alglib/ctrinverse.cpp +387 -0
  57. data/ext/alglib/ctrinverse.h +98 -0
  58. data/ext/alglib/ctrlinsolve.cpp +297 -0
  59. data/ext/alglib/ctrlinsolve.h +81 -0
  60. data/ext/alglib/dawson.cpp +234 -0
  61. data/ext/alglib/dawson.h +74 -0
  62. data/ext/alglib/descriptivestatistics.cpp +436 -0
  63. data/ext/alglib/descriptivestatistics.h +112 -0
  64. data/ext/alglib/det.cpp +140 -0
  65. data/ext/alglib/det.h +94 -0
  66. data/ext/alglib/dforest.cpp +1819 -0
  67. data/ext/alglib/dforest.h +316 -0
  68. data/ext/alglib/elliptic.cpp +497 -0
  69. data/ext/alglib/elliptic.h +217 -0
  70. data/ext/alglib/estnorm.cpp +429 -0
  71. data/ext/alglib/estnorm.h +107 -0
  72. data/ext/alglib/expintegrals.cpp +422 -0
  73. data/ext/alglib/expintegrals.h +108 -0
  74. data/ext/alglib/faq.english.html +258 -0
  75. data/ext/alglib/faq.russian.html +272 -0
  76. data/ext/alglib/fdistr.cpp +202 -0
  77. data/ext/alglib/fdistr.h +163 -0
  78. data/ext/alglib/fresnel.cpp +211 -0
  79. data/ext/alglib/fresnel.h +91 -0
  80. data/ext/alglib/gammaf.cpp +338 -0
  81. data/ext/alglib/gammaf.h +104 -0
  82. data/ext/alglib/gqgengauss.cpp +235 -0
  83. data/ext/alglib/gqgengauss.h +92 -0
  84. data/ext/alglib/gqgenhermite.cpp +268 -0
  85. data/ext/alglib/gqgenhermite.h +63 -0
  86. data/ext/alglib/gqgenjacobi.cpp +297 -0
  87. data/ext/alglib/gqgenjacobi.h +72 -0
  88. data/ext/alglib/gqgenlaguerre.cpp +265 -0
  89. data/ext/alglib/gqgenlaguerre.h +69 -0
  90. data/ext/alglib/gqgenlegendre.cpp +300 -0
  91. data/ext/alglib/gqgenlegendre.h +62 -0
  92. data/ext/alglib/gqgenlobatto.cpp +305 -0
  93. data/ext/alglib/gqgenlobatto.h +97 -0
  94. data/ext/alglib/gqgenradau.cpp +232 -0
  95. data/ext/alglib/gqgenradau.h +95 -0
  96. data/ext/alglib/hbisinv.cpp +480 -0
  97. data/ext/alglib/hbisinv.h +183 -0
  98. data/ext/alglib/hblas.cpp +228 -0
  99. data/ext/alglib/hblas.h +64 -0
  100. data/ext/alglib/hcholesky.cpp +339 -0
  101. data/ext/alglib/hcholesky.h +91 -0
  102. data/ext/alglib/hermite.cpp +114 -0
  103. data/ext/alglib/hermite.h +49 -0
  104. data/ext/alglib/hessenberg.cpp +370 -0
  105. data/ext/alglib/hessenberg.h +152 -0
  106. data/ext/alglib/hevd.cpp +247 -0
  107. data/ext/alglib/hevd.h +107 -0
  108. data/ext/alglib/hsschur.cpp +1316 -0
  109. data/ext/alglib/hsschur.h +108 -0
  110. data/ext/alglib/htridiagonal.cpp +734 -0
  111. data/ext/alglib/htridiagonal.h +180 -0
  112. data/ext/alglib/ialglib.cpp +6 -0
  113. data/ext/alglib/ialglib.h +9 -0
  114. data/ext/alglib/ibetaf.cpp +960 -0
  115. data/ext/alglib/ibetaf.h +125 -0
  116. data/ext/alglib/igammaf.cpp +430 -0
  117. data/ext/alglib/igammaf.h +157 -0
  118. data/ext/alglib/inv.cpp +274 -0
  119. data/ext/alglib/inv.h +115 -0
  120. data/ext/alglib/inverseupdate.cpp +480 -0
  121. data/ext/alglib/inverseupdate.h +185 -0
  122. data/ext/alglib/jacobianelliptic.cpp +164 -0
  123. data/ext/alglib/jacobianelliptic.h +94 -0
  124. data/ext/alglib/jarquebera.cpp +2271 -0
  125. data/ext/alglib/jarquebera.h +80 -0
  126. data/ext/alglib/kmeans.cpp +356 -0
  127. data/ext/alglib/kmeans.h +76 -0
  128. data/ext/alglib/laguerre.cpp +94 -0
  129. data/ext/alglib/laguerre.h +48 -0
  130. data/ext/alglib/lbfgs.cpp +1167 -0
  131. data/ext/alglib/lbfgs.h +218 -0
  132. data/ext/alglib/lda.cpp +434 -0
  133. data/ext/alglib/lda.h +133 -0
  134. data/ext/alglib/ldlt.cpp +1130 -0
  135. data/ext/alglib/ldlt.h +124 -0
  136. data/ext/alglib/leastsquares.cpp +1252 -0
  137. data/ext/alglib/leastsquares.h +290 -0
  138. data/ext/alglib/legendre.cpp +107 -0
  139. data/ext/alglib/legendre.h +49 -0
  140. data/ext/alglib/linreg.cpp +1185 -0
  141. data/ext/alglib/linreg.h +380 -0
  142. data/ext/alglib/logit.cpp +1523 -0
  143. data/ext/alglib/logit.h +333 -0
  144. data/ext/alglib/lq.cpp +399 -0
  145. data/ext/alglib/lq.h +160 -0
  146. data/ext/alglib/lu.cpp +462 -0
  147. data/ext/alglib/lu.h +119 -0
  148. data/ext/alglib/mannwhitneyu.cpp +4490 -0
  149. data/ext/alglib/mannwhitneyu.h +115 -0
  150. data/ext/alglib/minlm.cpp +918 -0
  151. data/ext/alglib/minlm.h +312 -0
  152. data/ext/alglib/mlpbase.cpp +3375 -0
  153. data/ext/alglib/mlpbase.h +589 -0
  154. data/ext/alglib/mlpe.cpp +1369 -0
  155. data/ext/alglib/mlpe.h +552 -0
  156. data/ext/alglib/mlptrain.cpp +1056 -0
  157. data/ext/alglib/mlptrain.h +283 -0
  158. data/ext/alglib/nearunityunit.cpp +91 -0
  159. data/ext/alglib/nearunityunit.h +17 -0
  160. data/ext/alglib/normaldistr.cpp +377 -0
  161. data/ext/alglib/normaldistr.h +175 -0
  162. data/ext/alglib/nsevd.cpp +1869 -0
  163. data/ext/alglib/nsevd.h +140 -0
  164. data/ext/alglib/pca.cpp +168 -0
  165. data/ext/alglib/pca.h +87 -0
  166. data/ext/alglib/poissondistr.cpp +143 -0
  167. data/ext/alglib/poissondistr.h +130 -0
  168. data/ext/alglib/polinterpolation.cpp +685 -0
  169. data/ext/alglib/polinterpolation.h +206 -0
  170. data/ext/alglib/psif.cpp +173 -0
  171. data/ext/alglib/psif.h +88 -0
  172. data/ext/alglib/qr.cpp +414 -0
  173. data/ext/alglib/qr.h +168 -0
  174. data/ext/alglib/ratinterpolation.cpp +134 -0
  175. data/ext/alglib/ratinterpolation.h +72 -0
  176. data/ext/alglib/rcond.cpp +705 -0
  177. data/ext/alglib/rcond.h +140 -0
  178. data/ext/alglib/reflections.cpp +504 -0
  179. data/ext/alglib/reflections.h +165 -0
  180. data/ext/alglib/rotations.cpp +473 -0
  181. data/ext/alglib/rotations.h +128 -0
  182. data/ext/alglib/rsolve.cpp +221 -0
  183. data/ext/alglib/rsolve.h +99 -0
  184. data/ext/alglib/sbisinv.cpp +217 -0
  185. data/ext/alglib/sbisinv.h +171 -0
  186. data/ext/alglib/sblas.cpp +185 -0
  187. data/ext/alglib/sblas.h +64 -0
  188. data/ext/alglib/schur.cpp +156 -0
  189. data/ext/alglib/schur.h +102 -0
  190. data/ext/alglib/sdet.cpp +193 -0
  191. data/ext/alglib/sdet.h +101 -0
  192. data/ext/alglib/sevd.cpp +116 -0
  193. data/ext/alglib/sevd.h +99 -0
  194. data/ext/alglib/sinverse.cpp +672 -0
  195. data/ext/alglib/sinverse.h +138 -0
  196. data/ext/alglib/spddet.cpp +138 -0
  197. data/ext/alglib/spddet.h +96 -0
  198. data/ext/alglib/spdgevd.cpp +842 -0
  199. data/ext/alglib/spdgevd.h +200 -0
  200. data/ext/alglib/spdinverse.cpp +509 -0
  201. data/ext/alglib/spdinverse.h +122 -0
  202. data/ext/alglib/spdrcond.cpp +421 -0
  203. data/ext/alglib/spdrcond.h +118 -0
  204. data/ext/alglib/spdsolve.cpp +275 -0
  205. data/ext/alglib/spdsolve.h +105 -0
  206. data/ext/alglib/spline2d.cpp +1192 -0
  207. data/ext/alglib/spline2d.h +301 -0
  208. data/ext/alglib/spline3.cpp +1264 -0
  209. data/ext/alglib/spline3.h +290 -0
  210. data/ext/alglib/srcond.cpp +595 -0
  211. data/ext/alglib/srcond.h +127 -0
  212. data/ext/alglib/ssolve.cpp +895 -0
  213. data/ext/alglib/ssolve.h +139 -0
  214. data/ext/alglib/stdafx.h +0 -0
  215. data/ext/alglib/stest.cpp +131 -0
  216. data/ext/alglib/stest.h +94 -0
  217. data/ext/alglib/studenttdistr.cpp +222 -0
  218. data/ext/alglib/studenttdistr.h +115 -0
  219. data/ext/alglib/studentttests.cpp +377 -0
  220. data/ext/alglib/studentttests.h +178 -0
  221. data/ext/alglib/svd.cpp +620 -0
  222. data/ext/alglib/svd.h +126 -0
  223. data/ext/alglib/tdbisinv.cpp +2608 -0
  224. data/ext/alglib/tdbisinv.h +228 -0
  225. data/ext/alglib/tdevd.cpp +1229 -0
  226. data/ext/alglib/tdevd.h +115 -0
  227. data/ext/alglib/tridiagonal.cpp +594 -0
  228. data/ext/alglib/tridiagonal.h +171 -0
  229. data/ext/alglib/trigintegrals.cpp +490 -0
  230. data/ext/alglib/trigintegrals.h +131 -0
  231. data/ext/alglib/trinverse.cpp +345 -0
  232. data/ext/alglib/trinverse.h +98 -0
  233. data/ext/alglib/trlinsolve.cpp +926 -0
  234. data/ext/alglib/trlinsolve.h +73 -0
  235. data/ext/alglib/tsort.cpp +405 -0
  236. data/ext/alglib/tsort.h +54 -0
  237. data/ext/alglib/variancetests.cpp +245 -0
  238. data/ext/alglib/variancetests.h +134 -0
  239. data/ext/alglib/wsr.cpp +6285 -0
  240. data/ext/alglib/wsr.h +96 -0
  241. data/ext/ap.i +97 -0
  242. data/ext/correlation.i +24 -0
  243. data/ext/extconf.rb +6 -0
  244. data/ext/logit.i +89 -0
  245. data/lib/alglib.rb +71 -0
  246. data/lib/alglib/correlation.rb +26 -0
  247. data/lib/alglib/linearregression.rb +63 -0
  248. data/lib/alglib/logit.rb +42 -0
  249. data/test/test_alglib.rb +52 -0
  250. data/test/test_correlation.rb +44 -0
  251. data/test/test_correlationtest.rb +45 -0
  252. data/test/test_linreg.rb +35 -0
  253. data/test/test_logit.rb +43 -0
  254. data/test/test_pca.rb +27 -0
  255. metadata +326 -0
@@ -0,0 +1,115 @@
1
+ /*************************************************************************
2
+ Cephes Math Library Release 2.8: June, 2000
3
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
4
+
5
+ Contributors:
6
+ * Sergey Bochkanov (ALGLIB project). Translation from C to
7
+ pseudocode.
8
+
9
+ See subroutines comments for additional copyrights.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are
13
+ met:
14
+
15
+ - Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ - Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer listed
20
+ in this license in the documentation and/or other materials
21
+ provided with the distribution.
22
+
23
+ - Neither the name of the copyright holders nor the names of its
24
+ contributors may be used to endorse or promote products derived from
25
+ this software without specific prior written permission.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ *************************************************************************/
39
+
40
+ #ifndef _studenttdistr_h
41
+ #define _studenttdistr_h
42
+
43
+ #include "ap.h"
44
+ #include "ialglib.h"
45
+
46
+ #include "gammaf.h"
47
+ #include "normaldistr.h"
48
+ #include "ibetaf.h"
49
+
50
+
51
+ /*************************************************************************
52
+ Student's t distribution
53
+
54
+ Computes the integral from minus infinity to t of the Student
55
+ t distribution with integer k > 0 degrees of freedom:
56
+
57
+ t
58
+ -
59
+ | |
60
+ - | 2 -(k+1)/2
61
+ | ( (k+1)/2 ) | ( x )
62
+ ---------------------- | ( 1 + --- ) dx
63
+ - | ( k )
64
+ sqrt( k pi ) | ( k/2 ) |
65
+ | |
66
+ -
67
+ -inf.
68
+
69
+ Relation to incomplete beta integral:
70
+
71
+ 1 - stdtr(k,t) = 0.5 * incbet( k/2, 1/2, z )
72
+ where
73
+ z = k/(k + t**2).
74
+
75
+ For t < -2, this is the method of computation. For higher t,
76
+ a direct method is derived from integration by parts.
77
+ Since the function is symmetric about t=0, the area under the
78
+ right tail of the density is found by calling the function
79
+ with -t instead of t.
80
+
81
+ ACCURACY:
82
+
83
+ Tested at random 1 <= k <= 25. The "domain" refers to t.
84
+ Relative error:
85
+ arithmetic domain # trials peak rms
86
+ IEEE -100,-2 50000 5.9e-15 1.4e-15
87
+ IEEE -2,100 500000 2.7e-15 4.9e-17
88
+
89
+ Cephes Math Library Release 2.8: June, 2000
90
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
91
+ *************************************************************************/
92
+ double studenttdistribution(int k, double t);
93
+
94
+
95
+ /*************************************************************************
96
+ Functional inverse of Student's t distribution
97
+
98
+ Given probability p, finds the argument t such that stdtr(k,t)
99
+ is equal to p.
100
+
101
+ ACCURACY:
102
+
103
+ Tested at random 1 <= k <= 100. The "domain" refers to p:
104
+ Relative error:
105
+ arithmetic domain # trials peak rms
106
+ IEEE .001,.999 25000 5.7e-15 8.0e-16
107
+ IEEE 10^-6,.001 25000 2.0e-12 2.9e-14
108
+
109
+ Cephes Math Library Release 2.8: June, 2000
110
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
111
+ *************************************************************************/
112
+ double invstudenttdistribution(int k, double p);
113
+
114
+
115
+ #endif
@@ -0,0 +1,377 @@
1
+ /*************************************************************************
2
+ Copyright (c) 2007, Sergey Bochkanov (ALGLIB project).
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ - Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ - Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer listed
13
+ in this license in the documentation and/or other materials
14
+ provided with the distribution.
15
+
16
+ - Neither the name of the copyright holders nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *************************************************************************/
32
+
33
+ #include <stdafx.h>
34
+ #include "studentttests.h"
35
+
36
+ /*************************************************************************
37
+ One-sample t-test
38
+
39
+ This test checks three hypotheses about the mean of the given sample. The
40
+ following tests are performed:
41
+ * two-tailed test (null hypothesis - the mean is equal to the given
42
+ value)
43
+ * left-tailed test (null hypothesis - the mean is greater than or
44
+ equal to the given value)
45
+ * right-tailed test (null hypothesis - the mean is less than or equal
46
+ to the given value).
47
+
48
+ The test is based on the assumption that a given sample has a normal
49
+ distribution and an unknown dispersion. If the distribution sharply
50
+ differs from normal, the test will work incorrectly.
51
+
52
+ Input parameters:
53
+ X - sample. Array whose index goes from 0 to N-1.
54
+ N - size of sample.
55
+ Mean - assumed value of the mean.
56
+
57
+ Output parameters:
58
+ BothTails - p-value for two-tailed test.
59
+ If BothTails is less than the given significance level
60
+ the null hypothesis is rejected.
61
+ LeftTail - p-value for left-tailed test.
62
+ If LeftTail is less than the given significance level,
63
+ the null hypothesis is rejected.
64
+ RightTail - p-value for right-tailed test.
65
+ If RightTail is less than the given significance level
66
+ the null hypothesis is rejected.
67
+
68
+ -- ALGLIB --
69
+ Copyright 08.09.2006 by Bochkanov Sergey
70
+ *************************************************************************/
71
+ void studentttest1(const ap::real_1d_array& x,
72
+ int n,
73
+ double mean,
74
+ double& bothtails,
75
+ double& lefttail,
76
+ double& righttail)
77
+ {
78
+ int i;
79
+ double xmean;
80
+ double xvariance;
81
+ double xstddev;
82
+ double v1;
83
+ double v2;
84
+ double stat;
85
+ double s;
86
+
87
+ if( n<=1 )
88
+ {
89
+ bothtails = 1.0;
90
+ lefttail = 1.0;
91
+ righttail = 1.0;
92
+ return;
93
+ }
94
+
95
+ //
96
+ // Mean
97
+ //
98
+ xmean = 0;
99
+ for(i = 0; i <= n-1; i++)
100
+ {
101
+ xmean = xmean+x(i);
102
+ }
103
+ xmean = xmean/n;
104
+
105
+ //
106
+ // Variance (using corrected two-pass algorithm)
107
+ //
108
+ xvariance = 0;
109
+ xstddev = 0;
110
+ if( n!=1 )
111
+ {
112
+ v1 = 0;
113
+ for(i = 0; i <= n-1; i++)
114
+ {
115
+ v1 = v1+ap::sqr(x(i)-xmean);
116
+ }
117
+ v2 = 0;
118
+ for(i = 0; i <= n-1; i++)
119
+ {
120
+ v2 = v2+(x(i)-xmean);
121
+ }
122
+ v2 = ap::sqr(v2)/n;
123
+ xvariance = (v1-v2)/(n-1);
124
+ if( xvariance<0 )
125
+ {
126
+ xvariance = 0;
127
+ }
128
+ xstddev = sqrt(xvariance);
129
+ }
130
+ if( xstddev==0 )
131
+ {
132
+ bothtails = 1.0;
133
+ lefttail = 1.0;
134
+ righttail = 1.0;
135
+ return;
136
+ }
137
+
138
+ //
139
+ // Statistic
140
+ //
141
+ stat = (xmean-mean)/(xstddev/sqrt(double(n)));
142
+ s = studenttdistribution(n-1, stat);
143
+ bothtails = 2*ap::minreal(s, 1-s);
144
+ lefttail = s;
145
+ righttail = 1-s;
146
+ }
147
+
148
+
149
+ /*************************************************************************
150
+ Two-sample pooled test
151
+
152
+ This test checks three hypotheses about the mean of the given samples. The
153
+ following tests are performed:
154
+ * two-tailed test (null hypothesis - the means are equal)
155
+ * left-tailed test (null hypothesis - the mean of the first sample is
156
+ greater than or equal to the mean of the second sample)
157
+ * right-tailed test (null hypothesis - the mean of the first sample is
158
+ less than or equal to the mean of the second sample).
159
+
160
+ Test is based on the following assumptions:
161
+ * given samples have normal distributions
162
+ * dispersions are equal
163
+ * samples are independent.
164
+
165
+ Input parameters:
166
+ X - sample 1. Array whose index goes from 0 to N-1.
167
+ N - size of sample.
168
+ Y - sample 2. Array whose index goes from 0 to M-1.
169
+ M - size of sample.
170
+
171
+ Output parameters:
172
+ BothTails - p-value for two-tailed test.
173
+ If BothTails is less than the given significance level
174
+ the null hypothesis is rejected.
175
+ LeftTail - p-value for left-tailed test.
176
+ If LeftTail is less than the given significance level,
177
+ the null hypothesis is rejected.
178
+ RightTail - p-value for right-tailed test.
179
+ If RightTail is less than the given significance level
180
+ the null hypothesis is rejected.
181
+
182
+ -- ALGLIB --
183
+ Copyright 18.09.2006 by Bochkanov Sergey
184
+ *************************************************************************/
185
+ void studentttest2(const ap::real_1d_array& x,
186
+ int n,
187
+ const ap::real_1d_array& y,
188
+ int m,
189
+ double& bothtails,
190
+ double& lefttail,
191
+ double& righttail)
192
+ {
193
+ int i;
194
+ double xmean;
195
+ double ymean;
196
+ double stat;
197
+ double s;
198
+ double p;
199
+
200
+ if( n<=1||m<=1 )
201
+ {
202
+ bothtails = 1.0;
203
+ lefttail = 1.0;
204
+ righttail = 1.0;
205
+ return;
206
+ }
207
+
208
+ //
209
+ // Mean
210
+ //
211
+ xmean = 0;
212
+ for(i = 0; i <= n-1; i++)
213
+ {
214
+ xmean = xmean+x(i);
215
+ }
216
+ xmean = xmean/n;
217
+ ymean = 0;
218
+ for(i = 0; i <= m-1; i++)
219
+ {
220
+ ymean = ymean+y(i);
221
+ }
222
+ ymean = ymean/m;
223
+
224
+ //
225
+ // S
226
+ //
227
+ s = 0;
228
+ for(i = 0; i <= n-1; i++)
229
+ {
230
+ s = s+ap::sqr(x(i)-xmean);
231
+ }
232
+ for(i = 0; i <= m-1; i++)
233
+ {
234
+ s = s+ap::sqr(y(i)-ymean);
235
+ }
236
+ s = sqrt(s*(double(1)/double(n)+double(1)/double(m))/(n+m-2));
237
+ if( s==0 )
238
+ {
239
+ bothtails = 1.0;
240
+ lefttail = 1.0;
241
+ righttail = 1.0;
242
+ return;
243
+ }
244
+
245
+ //
246
+ // Statistic
247
+ //
248
+ stat = (xmean-ymean)/s;
249
+ p = studenttdistribution(n+m-2, stat);
250
+ bothtails = 2*ap::minreal(p, 1-p);
251
+ lefttail = p;
252
+ righttail = 1-p;
253
+ }
254
+
255
+
256
+ /*************************************************************************
257
+ Two-sample unpooled test
258
+
259
+ This test checks three hypotheses about the mean of the given samples. The
260
+ following tests are performed:
261
+ * two-tailed test (null hypothesis - the means are equal)
262
+ * left-tailed test (null hypothesis - the mean of the first sample is
263
+ greater than or equal to the mean of the second sample)
264
+ * right-tailed test (null hypothesis - the mean of the first sample is
265
+ less than or equal to the mean of the second sample).
266
+
267
+ Test is based on the following assumptions:
268
+ * given samples have normal distributions
269
+ * samples are independent.
270
+ Dispersion equality is not required
271
+
272
+ Input parameters:
273
+ X - sample 1. Array whose index goes from 0 to N-1.
274
+ N - size of the sample.
275
+ Y - sample 2. Array whose index goes from 0 to M-1.
276
+ M - size of the sample.
277
+
278
+ Output parameters:
279
+ BothTails - p-value for two-tailed test.
280
+ If BothTails is less than the given significance level
281
+ the null hypothesis is rejected.
282
+ LeftTail - p-value for left-tailed test.
283
+ If LeftTail is less than the given significance level,
284
+ the null hypothesis is rejected.
285
+ RightTail - p-value for right-tailed test.
286
+ If RightTail is less than the given significance level
287
+ the null hypothesis is rejected.
288
+
289
+ -- ALGLIB --
290
+ Copyright 18.09.2006 by Bochkanov Sergey
291
+ *************************************************************************/
292
+ void unequalvariancettest(const ap::real_1d_array& x,
293
+ int n,
294
+ const ap::real_1d_array& y,
295
+ int m,
296
+ double& bothtails,
297
+ double& lefttail,
298
+ double& righttail)
299
+ {
300
+ int i;
301
+ double xmean;
302
+ double ymean;
303
+ double xvar;
304
+ double yvar;
305
+ double df;
306
+ double p;
307
+ double stat;
308
+ double c;
309
+
310
+ if( n<=1||m<=1 )
311
+ {
312
+ bothtails = 1.0;
313
+ lefttail = 1.0;
314
+ righttail = 1.0;
315
+ return;
316
+ }
317
+
318
+ //
319
+ // Mean
320
+ //
321
+ xmean = 0;
322
+ for(i = 0; i <= n-1; i++)
323
+ {
324
+ xmean = xmean+x(i);
325
+ }
326
+ xmean = xmean/n;
327
+ ymean = 0;
328
+ for(i = 0; i <= m-1; i++)
329
+ {
330
+ ymean = ymean+y(i);
331
+ }
332
+ ymean = ymean/m;
333
+
334
+ //
335
+ // Variance (using corrected two-pass algorithm)
336
+ //
337
+ xvar = 0;
338
+ for(i = 0; i <= n-1; i++)
339
+ {
340
+ xvar = xvar+ap::sqr(x(i)-xmean);
341
+ }
342
+ xvar = xvar/(n-1);
343
+ yvar = 0;
344
+ for(i = 0; i <= m-1; i++)
345
+ {
346
+ yvar = yvar+ap::sqr(y(i)-ymean);
347
+ }
348
+ yvar = yvar/(m-1);
349
+ if( xvar==0||yvar==0 )
350
+ {
351
+ bothtails = 1.0;
352
+ lefttail = 1.0;
353
+ righttail = 1.0;
354
+ return;
355
+ }
356
+
357
+ //
358
+ // Statistic
359
+ //
360
+ stat = (xmean-ymean)/sqrt(xvar/n+yvar/m);
361
+ c = xvar/n/(xvar/n+yvar/m);
362
+ df = (n-1)*(m-1)/((m-1)*ap::sqr(c)+(n-1)*(1-ap::sqr(c)));
363
+ if( stat>0 )
364
+ {
365
+ p = 1-0.5*incompletebeta(df/2, 0.5, df/(df+ap::sqr(stat)));
366
+ }
367
+ else
368
+ {
369
+ p = 0.5*incompletebeta(df/2, 0.5, df/(df+ap::sqr(stat)));
370
+ }
371
+ bothtails = 2*ap::minreal(p, 1-p);
372
+ lefttail = p;
373
+ righttail = 1-p;
374
+ }
375
+
376
+
377
+