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.
- data/History.txt +7 -0
- data/Manifest.txt +253 -0
- data/README.txt +33 -0
- data/Rakefile +27 -0
- data/ext/Rakefile +24 -0
- data/ext/alglib.i +24 -0
- data/ext/alglib/Makefile +157 -0
- data/ext/alglib/airyf.cpp +372 -0
- data/ext/alglib/airyf.h +81 -0
- data/ext/alglib/alglib.cpp +8558 -0
- data/ext/alglib/alglib_util.cpp +19 -0
- data/ext/alglib/alglib_util.h +14 -0
- data/ext/alglib/ap.cpp +877 -0
- data/ext/alglib/ap.english.html +364 -0
- data/ext/alglib/ap.h +666 -0
- data/ext/alglib/ap.russian.html +442 -0
- data/ext/alglib/apvt.h +754 -0
- data/ext/alglib/bdss.cpp +1500 -0
- data/ext/alglib/bdss.h +251 -0
- data/ext/alglib/bdsvd.cpp +1339 -0
- data/ext/alglib/bdsvd.h +164 -0
- data/ext/alglib/bessel.cpp +1226 -0
- data/ext/alglib/bessel.h +331 -0
- data/ext/alglib/betaf.cpp +105 -0
- data/ext/alglib/betaf.h +74 -0
- data/ext/alglib/bidiagonal.cpp +1328 -0
- data/ext/alglib/bidiagonal.h +350 -0
- data/ext/alglib/binomialdistr.cpp +247 -0
- data/ext/alglib/binomialdistr.h +153 -0
- data/ext/alglib/blas.cpp +576 -0
- data/ext/alglib/blas.h +132 -0
- data/ext/alglib/cblas.cpp +226 -0
- data/ext/alglib/cblas.h +57 -0
- data/ext/alglib/cdet.cpp +138 -0
- data/ext/alglib/cdet.h +92 -0
- data/ext/alglib/chebyshev.cpp +216 -0
- data/ext/alglib/chebyshev.h +76 -0
- data/ext/alglib/chisquaredistr.cpp +157 -0
- data/ext/alglib/chisquaredistr.h +144 -0
- data/ext/alglib/cholesky.cpp +285 -0
- data/ext/alglib/cholesky.h +86 -0
- data/ext/alglib/cinverse.cpp +298 -0
- data/ext/alglib/cinverse.h +111 -0
- data/ext/alglib/clu.cpp +337 -0
- data/ext/alglib/clu.h +120 -0
- data/ext/alglib/correlation.cpp +280 -0
- data/ext/alglib/correlation.h +77 -0
- data/ext/alglib/correlationtests.cpp +726 -0
- data/ext/alglib/correlationtests.h +134 -0
- data/ext/alglib/crcond.cpp +826 -0
- data/ext/alglib/crcond.h +148 -0
- data/ext/alglib/creflections.cpp +310 -0
- data/ext/alglib/creflections.h +165 -0
- data/ext/alglib/csolve.cpp +312 -0
- data/ext/alglib/csolve.h +99 -0
- data/ext/alglib/ctrinverse.cpp +387 -0
- data/ext/alglib/ctrinverse.h +98 -0
- data/ext/alglib/ctrlinsolve.cpp +297 -0
- data/ext/alglib/ctrlinsolve.h +81 -0
- data/ext/alglib/dawson.cpp +234 -0
- data/ext/alglib/dawson.h +74 -0
- data/ext/alglib/descriptivestatistics.cpp +436 -0
- data/ext/alglib/descriptivestatistics.h +112 -0
- data/ext/alglib/det.cpp +140 -0
- data/ext/alglib/det.h +94 -0
- data/ext/alglib/dforest.cpp +1819 -0
- data/ext/alglib/dforest.h +316 -0
- data/ext/alglib/elliptic.cpp +497 -0
- data/ext/alglib/elliptic.h +217 -0
- data/ext/alglib/estnorm.cpp +429 -0
- data/ext/alglib/estnorm.h +107 -0
- data/ext/alglib/expintegrals.cpp +422 -0
- data/ext/alglib/expintegrals.h +108 -0
- data/ext/alglib/faq.english.html +258 -0
- data/ext/alglib/faq.russian.html +272 -0
- data/ext/alglib/fdistr.cpp +202 -0
- data/ext/alglib/fdistr.h +163 -0
- data/ext/alglib/fresnel.cpp +211 -0
- data/ext/alglib/fresnel.h +91 -0
- data/ext/alglib/gammaf.cpp +338 -0
- data/ext/alglib/gammaf.h +104 -0
- data/ext/alglib/gqgengauss.cpp +235 -0
- data/ext/alglib/gqgengauss.h +92 -0
- data/ext/alglib/gqgenhermite.cpp +268 -0
- data/ext/alglib/gqgenhermite.h +63 -0
- data/ext/alglib/gqgenjacobi.cpp +297 -0
- data/ext/alglib/gqgenjacobi.h +72 -0
- data/ext/alglib/gqgenlaguerre.cpp +265 -0
- data/ext/alglib/gqgenlaguerre.h +69 -0
- data/ext/alglib/gqgenlegendre.cpp +300 -0
- data/ext/alglib/gqgenlegendre.h +62 -0
- data/ext/alglib/gqgenlobatto.cpp +305 -0
- data/ext/alglib/gqgenlobatto.h +97 -0
- data/ext/alglib/gqgenradau.cpp +232 -0
- data/ext/alglib/gqgenradau.h +95 -0
- data/ext/alglib/hbisinv.cpp +480 -0
- data/ext/alglib/hbisinv.h +183 -0
- data/ext/alglib/hblas.cpp +228 -0
- data/ext/alglib/hblas.h +64 -0
- data/ext/alglib/hcholesky.cpp +339 -0
- data/ext/alglib/hcholesky.h +91 -0
- data/ext/alglib/hermite.cpp +114 -0
- data/ext/alglib/hermite.h +49 -0
- data/ext/alglib/hessenberg.cpp +370 -0
- data/ext/alglib/hessenberg.h +152 -0
- data/ext/alglib/hevd.cpp +247 -0
- data/ext/alglib/hevd.h +107 -0
- data/ext/alglib/hsschur.cpp +1316 -0
- data/ext/alglib/hsschur.h +108 -0
- data/ext/alglib/htridiagonal.cpp +734 -0
- data/ext/alglib/htridiagonal.h +180 -0
- data/ext/alglib/ialglib.cpp +6 -0
- data/ext/alglib/ialglib.h +9 -0
- data/ext/alglib/ibetaf.cpp +960 -0
- data/ext/alglib/ibetaf.h +125 -0
- data/ext/alglib/igammaf.cpp +430 -0
- data/ext/alglib/igammaf.h +157 -0
- data/ext/alglib/inv.cpp +274 -0
- data/ext/alglib/inv.h +115 -0
- data/ext/alglib/inverseupdate.cpp +480 -0
- data/ext/alglib/inverseupdate.h +185 -0
- data/ext/alglib/jacobianelliptic.cpp +164 -0
- data/ext/alglib/jacobianelliptic.h +94 -0
- data/ext/alglib/jarquebera.cpp +2271 -0
- data/ext/alglib/jarquebera.h +80 -0
- data/ext/alglib/kmeans.cpp +356 -0
- data/ext/alglib/kmeans.h +76 -0
- data/ext/alglib/laguerre.cpp +94 -0
- data/ext/alglib/laguerre.h +48 -0
- data/ext/alglib/lbfgs.cpp +1167 -0
- data/ext/alglib/lbfgs.h +218 -0
- data/ext/alglib/lda.cpp +434 -0
- data/ext/alglib/lda.h +133 -0
- data/ext/alglib/ldlt.cpp +1130 -0
- data/ext/alglib/ldlt.h +124 -0
- data/ext/alglib/leastsquares.cpp +1252 -0
- data/ext/alglib/leastsquares.h +290 -0
- data/ext/alglib/legendre.cpp +107 -0
- data/ext/alglib/legendre.h +49 -0
- data/ext/alglib/linreg.cpp +1185 -0
- data/ext/alglib/linreg.h +380 -0
- data/ext/alglib/logit.cpp +1523 -0
- data/ext/alglib/logit.h +333 -0
- data/ext/alglib/lq.cpp +399 -0
- data/ext/alglib/lq.h +160 -0
- data/ext/alglib/lu.cpp +462 -0
- data/ext/alglib/lu.h +119 -0
- data/ext/alglib/mannwhitneyu.cpp +4490 -0
- data/ext/alglib/mannwhitneyu.h +115 -0
- data/ext/alglib/minlm.cpp +918 -0
- data/ext/alglib/minlm.h +312 -0
- data/ext/alglib/mlpbase.cpp +3375 -0
- data/ext/alglib/mlpbase.h +589 -0
- data/ext/alglib/mlpe.cpp +1369 -0
- data/ext/alglib/mlpe.h +552 -0
- data/ext/alglib/mlptrain.cpp +1056 -0
- data/ext/alglib/mlptrain.h +283 -0
- data/ext/alglib/nearunityunit.cpp +91 -0
- data/ext/alglib/nearunityunit.h +17 -0
- data/ext/alglib/normaldistr.cpp +377 -0
- data/ext/alglib/normaldistr.h +175 -0
- data/ext/alglib/nsevd.cpp +1869 -0
- data/ext/alglib/nsevd.h +140 -0
- data/ext/alglib/pca.cpp +168 -0
- data/ext/alglib/pca.h +87 -0
- data/ext/alglib/poissondistr.cpp +143 -0
- data/ext/alglib/poissondistr.h +130 -0
- data/ext/alglib/polinterpolation.cpp +685 -0
- data/ext/alglib/polinterpolation.h +206 -0
- data/ext/alglib/psif.cpp +173 -0
- data/ext/alglib/psif.h +88 -0
- data/ext/alglib/qr.cpp +414 -0
- data/ext/alglib/qr.h +168 -0
- data/ext/alglib/ratinterpolation.cpp +134 -0
- data/ext/alglib/ratinterpolation.h +72 -0
- data/ext/alglib/rcond.cpp +705 -0
- data/ext/alglib/rcond.h +140 -0
- data/ext/alglib/reflections.cpp +504 -0
- data/ext/alglib/reflections.h +165 -0
- data/ext/alglib/rotations.cpp +473 -0
- data/ext/alglib/rotations.h +128 -0
- data/ext/alglib/rsolve.cpp +221 -0
- data/ext/alglib/rsolve.h +99 -0
- data/ext/alglib/sbisinv.cpp +217 -0
- data/ext/alglib/sbisinv.h +171 -0
- data/ext/alglib/sblas.cpp +185 -0
- data/ext/alglib/sblas.h +64 -0
- data/ext/alglib/schur.cpp +156 -0
- data/ext/alglib/schur.h +102 -0
- data/ext/alglib/sdet.cpp +193 -0
- data/ext/alglib/sdet.h +101 -0
- data/ext/alglib/sevd.cpp +116 -0
- data/ext/alglib/sevd.h +99 -0
- data/ext/alglib/sinverse.cpp +672 -0
- data/ext/alglib/sinverse.h +138 -0
- data/ext/alglib/spddet.cpp +138 -0
- data/ext/alglib/spddet.h +96 -0
- data/ext/alglib/spdgevd.cpp +842 -0
- data/ext/alglib/spdgevd.h +200 -0
- data/ext/alglib/spdinverse.cpp +509 -0
- data/ext/alglib/spdinverse.h +122 -0
- data/ext/alglib/spdrcond.cpp +421 -0
- data/ext/alglib/spdrcond.h +118 -0
- data/ext/alglib/spdsolve.cpp +275 -0
- data/ext/alglib/spdsolve.h +105 -0
- data/ext/alglib/spline2d.cpp +1192 -0
- data/ext/alglib/spline2d.h +301 -0
- data/ext/alglib/spline3.cpp +1264 -0
- data/ext/alglib/spline3.h +290 -0
- data/ext/alglib/srcond.cpp +595 -0
- data/ext/alglib/srcond.h +127 -0
- data/ext/alglib/ssolve.cpp +895 -0
- data/ext/alglib/ssolve.h +139 -0
- data/ext/alglib/stdafx.h +0 -0
- data/ext/alglib/stest.cpp +131 -0
- data/ext/alglib/stest.h +94 -0
- data/ext/alglib/studenttdistr.cpp +222 -0
- data/ext/alglib/studenttdistr.h +115 -0
- data/ext/alglib/studentttests.cpp +377 -0
- data/ext/alglib/studentttests.h +178 -0
- data/ext/alglib/svd.cpp +620 -0
- data/ext/alglib/svd.h +126 -0
- data/ext/alglib/tdbisinv.cpp +2608 -0
- data/ext/alglib/tdbisinv.h +228 -0
- data/ext/alglib/tdevd.cpp +1229 -0
- data/ext/alglib/tdevd.h +115 -0
- data/ext/alglib/tridiagonal.cpp +594 -0
- data/ext/alglib/tridiagonal.h +171 -0
- data/ext/alglib/trigintegrals.cpp +490 -0
- data/ext/alglib/trigintegrals.h +131 -0
- data/ext/alglib/trinverse.cpp +345 -0
- data/ext/alglib/trinverse.h +98 -0
- data/ext/alglib/trlinsolve.cpp +926 -0
- data/ext/alglib/trlinsolve.h +73 -0
- data/ext/alglib/tsort.cpp +405 -0
- data/ext/alglib/tsort.h +54 -0
- data/ext/alglib/variancetests.cpp +245 -0
- data/ext/alglib/variancetests.h +134 -0
- data/ext/alglib/wsr.cpp +6285 -0
- data/ext/alglib/wsr.h +96 -0
- data/ext/ap.i +97 -0
- data/ext/correlation.i +24 -0
- data/ext/extconf.rb +6 -0
- data/ext/logit.i +89 -0
- data/lib/alglib.rb +71 -0
- data/lib/alglib/correlation.rb +26 -0
- data/lib/alglib/linearregression.rb +63 -0
- data/lib/alglib/logit.rb +42 -0
- data/test/test_alglib.rb +52 -0
- data/test/test_correlation.rb +44 -0
- data/test/test_correlationtest.rb +45 -0
- data/test/test_linreg.rb +35 -0
- data/test/test_logit.rb +43 -0
- data/test/test_pca.rb +27 -0
- 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
|
+
|