alglib 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/ext/alglib/wsr.h
ADDED
@@ -0,0 +1,96 @@
|
|
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
|
+
#ifndef _wsr_h
|
34
|
+
#define _wsr_h
|
35
|
+
|
36
|
+
#include "ap.h"
|
37
|
+
#include "ialglib.h"
|
38
|
+
|
39
|
+
/*************************************************************************
|
40
|
+
Wilcoxon signed-rank test
|
41
|
+
|
42
|
+
This test checks three hypotheses about the median of the given sample.
|
43
|
+
The following tests are performed:
|
44
|
+
* two-tailed test (null hypothesis - the median is equal to the given
|
45
|
+
value)
|
46
|
+
* left-tailed test (null hypothesis - the median is greater than or
|
47
|
+
equal to the given value)
|
48
|
+
* right-tailed test (null hypothesis - the median is less than or
|
49
|
+
equal to the given value)
|
50
|
+
|
51
|
+
Requirements:
|
52
|
+
* the scale of measurement should be ordinal, interval or ratio (i.e.
|
53
|
+
the test could not be applied to nominal variables).
|
54
|
+
* the distribution should be continuous and symmetric relative to its
|
55
|
+
median.
|
56
|
+
* number of distinct values in the X array should be greater than 4
|
57
|
+
|
58
|
+
The test is non-parametric and doesn't require distribution X to be normal
|
59
|
+
|
60
|
+
Input parameters:
|
61
|
+
X - sample. Array whose index goes from 0 to N-1.
|
62
|
+
N - size of the sample.
|
63
|
+
Median - assumed median value.
|
64
|
+
|
65
|
+
Output parameters:
|
66
|
+
BothTails - p-value for two-tailed test.
|
67
|
+
If BothTails is less than the given significance level
|
68
|
+
the null hypothesis is rejected.
|
69
|
+
LeftTail - p-value for left-tailed test.
|
70
|
+
If LeftTail is less than the given significance level,
|
71
|
+
the null hypothesis is rejected.
|
72
|
+
RightTail - p-value for right-tailed test.
|
73
|
+
If RightTail is less than the given significance level
|
74
|
+
the null hypothesis is rejected.
|
75
|
+
|
76
|
+
To calculate p-values, special approximation is used. This method lets us
|
77
|
+
calculate p-values with two decimal places in interval [0.0001, 1].
|
78
|
+
|
79
|
+
"Two decimal places" does not sound very impressive, but in practice the
|
80
|
+
relative error of less than 1% is enough to make a decision.
|
81
|
+
|
82
|
+
There is no approximation outside the [0.0001, 1] interval. Therefore, if
|
83
|
+
the significance level outlies this interval, the test returns 0.0001.
|
84
|
+
|
85
|
+
-- ALGLIB --
|
86
|
+
Copyright 08.09.2006 by Bochkanov Sergey
|
87
|
+
*************************************************************************/
|
88
|
+
void wilcoxonsignedranktest(ap::real_1d_array x,
|
89
|
+
int n,
|
90
|
+
double e,
|
91
|
+
double& bothtails,
|
92
|
+
double& lefttail,
|
93
|
+
double& righttail);
|
94
|
+
|
95
|
+
|
96
|
+
#endif
|
data/ext/ap.i
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
%typemap(in) ap::real_1d_array {
|
2
|
+
$1 = new ap::real_1d_array();
|
3
|
+
$1->setlength(RARRAY_LEN($input));
|
4
|
+
for(long i=0;i<RARRAY_LEN($input);i++) {
|
5
|
+
$1->operator()(i)=rb_num2dbl(RARRAY_PTR($input)[i]);
|
6
|
+
}
|
7
|
+
}
|
8
|
+
|
9
|
+
|
10
|
+
%apply ap::real_1d_array {ap::real_1d_array const &};
|
11
|
+
|
12
|
+
namespace ap {
|
13
|
+
/********************************************************************
|
14
|
+
Template of a dynamical one-dimensional array
|
15
|
+
********************************************************************/
|
16
|
+
template<class T, bool Aligned = false>
|
17
|
+
class template_1d_array
|
18
|
+
{
|
19
|
+
public:
|
20
|
+
template_1d_array();
|
21
|
+
~template_1d_array();
|
22
|
+
template_1d_array(const template_1d_array &rhs);
|
23
|
+
%extend {
|
24
|
+
T __getitem__(int i) {
|
25
|
+
return $self->operator()(i);
|
26
|
+
};
|
27
|
+
T __setitem__(int i, T v) {
|
28
|
+
return $self->operator()(i)=v;
|
29
|
+
};
|
30
|
+
int size() {
|
31
|
+
return $self->gethighbound()-$self->getlowbound()+1;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
void setbounds( int iLow, int iHigh );
|
36
|
+
void setlength(int iLen);
|
37
|
+
void setcontent( int iLow, int iHigh, const T *pContent );
|
38
|
+
T* getcontent();
|
39
|
+
int getlowbound(int iBoundNum = 0);
|
40
|
+
int gethighbound(int iBoundNum = 0);
|
41
|
+
};
|
42
|
+
|
43
|
+
template<class T, bool Aligned = false>
|
44
|
+
class template_2d_array
|
45
|
+
{
|
46
|
+
public:
|
47
|
+
template_2d_array();
|
48
|
+
|
49
|
+
~template_2d_array();
|
50
|
+
|
51
|
+
template_2d_array(const template_2d_array &rhs);
|
52
|
+
T& operator()(int i1, int i2);
|
53
|
+
|
54
|
+
void setbounds( int iLow1, int iHigh1, int iLow2, int iHigh2 );
|
55
|
+
|
56
|
+
void setlength(int iLen1, int iLen2);
|
57
|
+
|
58
|
+
void setcontent( int iLow1, int iHigh1, int iLow2, int iHigh2, const T *pContent );
|
59
|
+
|
60
|
+
int getlowbound(int iBoundNum) const;
|
61
|
+
|
62
|
+
int gethighbound(int iBoundNum) const;
|
63
|
+
|
64
|
+
%extend {
|
65
|
+
double __getitem__(int x,int y) {
|
66
|
+
return $self->operator()(x,y);
|
67
|
+
}
|
68
|
+
void __setitem__(int x,int y, T val) {
|
69
|
+
$self->operator()(x,y)=val;
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
73
|
+
|
74
|
+
};
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
typedef template_1d_array<int> integer_1d_array;
|
79
|
+
typedef template_1d_array<double,true> real_1d_array;
|
80
|
+
typedef template_1d_array<complex> complex_1d_array;
|
81
|
+
typedef template_1d_array<bool> boolean_1d_array;
|
82
|
+
|
83
|
+
typedef template_2d_array<int> integer_2d_array;
|
84
|
+
typedef template_2d_array<double,true> real_2d_array;
|
85
|
+
typedef template_2d_array<complex> complex_2d_array;
|
86
|
+
typedef template_2d_array<bool> boolean_2d_array;
|
87
|
+
|
88
|
+
%template(Integer1dArray) template_1d_array<int>;
|
89
|
+
%template(Real1dArray) template_1d_array<double,true>;
|
90
|
+
%template(Boolean1dArray) template_1d_array<bool>;
|
91
|
+
%template(Integer2dArray) template_2d_array<int>;
|
92
|
+
%template(Real2dArray) template_2d_array<double,true>;
|
93
|
+
};
|
94
|
+
|
95
|
+
|
96
|
+
VALUE real1d_to_array(ap::real_1d_array *x);
|
97
|
+
void array_to_real1d(VALUE ary, ap::real_1d_array *x);
|
data/ext/correlation.i
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
%{
|
2
|
+
#include "correlation.h"
|
3
|
+
#include "ialglib.h"
|
4
|
+
%}
|
5
|
+
|
6
|
+
// Complete wrapping and testing
|
7
|
+
|
8
|
+
double pearsoncorrelation(const ap::real_1d_array& x,
|
9
|
+
const ap::real_1d_array& y,
|
10
|
+
int n);
|
11
|
+
|
12
|
+
%rename(spearmanrankcorrelation) wrap_spearmanrankcorrelation;
|
13
|
+
%inline %{
|
14
|
+
double wrap_spearmanrankcorrelation(const ap::real_1d_array& x,
|
15
|
+
const ap::real_1d_array& y,
|
16
|
+
int n) {
|
17
|
+
ap::real_1d_array x1,y1;
|
18
|
+
x1=x;
|
19
|
+
y1=y;
|
20
|
+
return spearmanrankcorrelation(x1,y1,n);
|
21
|
+
|
22
|
+
}
|
23
|
+
%}
|
24
|
+
|
data/ext/extconf.rb
ADDED
data/ext/logit.i
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
%{
|
2
|
+
#include "logit.h"
|
3
|
+
%}
|
4
|
+
/**
|
5
|
+
* Logit
|
6
|
+
*/
|
7
|
+
|
8
|
+
%rename (LogitModel) logitmodel;
|
9
|
+
%rename (LogitMcState) logitmcstate;
|
10
|
+
%rename (MNLReport) mnlreport;
|
11
|
+
struct logitmodel
|
12
|
+
{
|
13
|
+
ap::real_1d_array w;
|
14
|
+
};
|
15
|
+
struct logitmcstate
|
16
|
+
{
|
17
|
+
bool brackt;
|
18
|
+
bool stage1;
|
19
|
+
int infoc;
|
20
|
+
double dg;
|
21
|
+
double dgm;
|
22
|
+
double dginit;
|
23
|
+
double dgtest;
|
24
|
+
double dgx;
|
25
|
+
double dgxm;
|
26
|
+
double dgy;
|
27
|
+
double dgym;
|
28
|
+
double finit;
|
29
|
+
double ftest1;
|
30
|
+
double fm;
|
31
|
+
double fx;
|
32
|
+
double fxm;
|
33
|
+
double fy;
|
34
|
+
double fym;
|
35
|
+
double stx;
|
36
|
+
double sty;
|
37
|
+
double stmin;
|
38
|
+
double stmax;
|
39
|
+
double width;
|
40
|
+
double width1;
|
41
|
+
double xtrapf;
|
42
|
+
};
|
43
|
+
struct mnlreport
|
44
|
+
{
|
45
|
+
int ngrad;
|
46
|
+
int nhess;
|
47
|
+
};
|
48
|
+
|
49
|
+
|
50
|
+
void mnltrainh(const ap::real_2d_array& xy,
|
51
|
+
int npoints,
|
52
|
+
int nvars,
|
53
|
+
int nclasses,
|
54
|
+
int& info,
|
55
|
+
logitmodel& lm,
|
56
|
+
mnlreport& rep);
|
57
|
+
|
58
|
+
|
59
|
+
%rename(mnlprocess) wrap_mnlprocess;
|
60
|
+
%inline %{
|
61
|
+
VALUE wrap_mnlprocess(logitmodel& lm,
|
62
|
+
const ap::real_1d_array& x) {
|
63
|
+
ap::real_1d_array y;
|
64
|
+
// y.setlength(lm.w(3));
|
65
|
+
mnlprocess(lm,x,y);
|
66
|
+
// std::cout << "Saliendo";
|
67
|
+
return real1d_to_array(&y);
|
68
|
+
}
|
69
|
+
%}
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
void mnlunpack(const logitmodel& lm,
|
74
|
+
ap::real_2d_array& a,
|
75
|
+
int& nvars,
|
76
|
+
int& nclasses);
|
77
|
+
|
78
|
+
void mnlpack(const ap::real_2d_array& a,
|
79
|
+
int nvars,
|
80
|
+
int nclasses,
|
81
|
+
logitmodel& lm);
|
82
|
+
|
83
|
+
|
84
|
+
void mnlserialize(const logitmodel& lm, ap::real_1d_array& ra, int& rlen);
|
85
|
+
|
86
|
+
void mnlcopy(const logitmodel& lm1, logitmodel& lm2);
|
87
|
+
|
88
|
+
void mnlunserialize(const ap::real_1d_array& ra, logitmodel& lm);
|
89
|
+
double mnlavgce(logitmodel& lm, const ap::real_2d_array& xy, int npoints);
|
data/lib/alglib.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)+"/../ext"))
|
2
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)+"/../lib"))
|
3
|
+
require 'alglib_ext'
|
4
|
+
require 'matrix'
|
5
|
+
class Matrix
|
6
|
+
def to_alglib_matrix
|
7
|
+
a_matrix=Alglib_ext::Real2dArray.new
|
8
|
+
a_matrix.setbounds(0,row_size-1,0,column_size-1)
|
9
|
+
for x in 0...row_size
|
10
|
+
for y in 0...column_size
|
11
|
+
a_matrix[x,y]=self[x,y]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
a_matrix
|
15
|
+
end
|
16
|
+
end
|
17
|
+
require 'alglib_version'
|
18
|
+
require 'alglib/linearregression'
|
19
|
+
require 'alglib/logit'
|
20
|
+
require 'alglib/correlation'
|
21
|
+
|
22
|
+
module Alglib_ext
|
23
|
+
class Real1dArray
|
24
|
+
def to_a
|
25
|
+
Alglib_ext.real1d_to_array(self)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
class Real2dArray
|
29
|
+
def to_2d_a
|
30
|
+
a=self
|
31
|
+
lr=a.getlowbound(1)
|
32
|
+
lc=a.getlowbound(2)
|
33
|
+
hr=a.gethighbound(1)
|
34
|
+
hc=a.gethighbound(2)
|
35
|
+
out=[]
|
36
|
+
(lr..hr).each{|x|
|
37
|
+
row=[]
|
38
|
+
(lc..hc).each{|y|
|
39
|
+
row[y]=a[x,y]
|
40
|
+
}
|
41
|
+
out[x]=row
|
42
|
+
}
|
43
|
+
out
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Alglib
|
49
|
+
|
50
|
+
def self.array_to_real1darray(a)
|
51
|
+
v=Alglib_ext::Real1dArray.new
|
52
|
+
Alglib_ext.array_to_real1d(a,v)
|
53
|
+
v
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.real2darray_to_array(a)
|
57
|
+
lr=a.getlowbound(1)
|
58
|
+
lc=a.getlowbound(2)
|
59
|
+
hr=a.gethighbound(1)
|
60
|
+
hc=a.gethighbound(2)
|
61
|
+
out=[]
|
62
|
+
(lr..hr).each{|x|
|
63
|
+
row=[]
|
64
|
+
(lc..hc).each{|y|
|
65
|
+
row[y]=a[x,y]
|
66
|
+
}
|
67
|
+
out[x]=row
|
68
|
+
}
|
69
|
+
out
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Alglib
|
2
|
+
# Retrieves Pearson correlation for two arrays
|
3
|
+
def self.pearson_correlation(a,b)
|
4
|
+
raise ArgumentError "argument should be the same size" if a.size!=b.size
|
5
|
+
Alglib_ext.pearsoncorrelation(a,b,a.size)
|
6
|
+
end
|
7
|
+
# Retrieves Spearman ranked correlation for two arrays
|
8
|
+
# Equal to Pearson correlation for ranked data
|
9
|
+
|
10
|
+
def self.spearman_correlation(a,b)
|
11
|
+
raise ArgumentError "argument should be the same size" if a.size!=b.size
|
12
|
+
Alglib_ext.spearmanrankcorrelation(a,b,a.size)
|
13
|
+
end
|
14
|
+
# Retrieves significance for pearson correlation for one or two tails
|
15
|
+
# Returns a hash with keys :both, :left and :right
|
16
|
+
def self.pearson_correlation_significance(r,size)
|
17
|
+
out={}
|
18
|
+
out[:both], out[:left], out[:right] = Alglib_ext.pearsoncorrelationsignificance(r, size)
|
19
|
+
out
|
20
|
+
end
|
21
|
+
def self.spearman_correlation_significance(r,size)
|
22
|
+
out={}
|
23
|
+
out[:both], out[:left], out[:right] = Alglib_ext.spearmanrankcorrelationsignificance(r, size)
|
24
|
+
out
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Alglib
|
2
|
+
class LinearRegression
|
3
|
+
attr_reader :model, :cases, :ivars
|
4
|
+
# Creates a Linear Regression object based on a Matrix
|
5
|
+
# EXAMPLE:
|
6
|
+
# require 'alglib'
|
7
|
+
# matrix=Matrix[[2,3,4],[2,5,5],[1,5,3],[4,6,5]]
|
8
|
+
# lr=Alglib::LinearRegression.build_from_matrix(matrix)
|
9
|
+
# => #<Alglib::LinearRegression:0x7ffaf6c05dc0 @model=#<Alglib_ext::LinearModel:0x7ffaf6c05e60>, @cases=4, @report=#<Alglib_ext::LrReport:0x7ffaf6c05e10>, @ivars=2>
|
10
|
+
# lr.coeffs
|
11
|
+
# => [0.585714285714286, -0.0142857142857142]
|
12
|
+
|
13
|
+
def self.build_from_matrix(matrix)
|
14
|
+
raise "Argument should be a matrix" unless matrix.is_a? Matrix
|
15
|
+
cases=matrix.row_size
|
16
|
+
ivars=matrix.column_size-1
|
17
|
+
lm=Alglib_ext::LinearModel.new
|
18
|
+
lr=Alglib_ext::LrReport.new
|
19
|
+
am=matrix.to_alglib_matrix
|
20
|
+
Alglib_ext::lrbuild(am,cases,ivars,lm,lr)
|
21
|
+
self.new(lm,lr,cases,ivars)
|
22
|
+
end
|
23
|
+
# Use with care...
|
24
|
+
def initialize(lm,lr,cases,ivars)
|
25
|
+
@model=lm
|
26
|
+
@report=lr
|
27
|
+
@cases=cases
|
28
|
+
@ivars=ivars
|
29
|
+
end
|
30
|
+
# Constant value. a on
|
31
|
+
# y= a+b1x1+b2x2...
|
32
|
+
|
33
|
+
def constant
|
34
|
+
v=Alglib_ext::Real1dArray.new
|
35
|
+
Alglib_ext::lrunpack(@model,v, @ivars);
|
36
|
+
Alglib_ext.real1d_to_array(v).slice(-1)
|
37
|
+
end
|
38
|
+
# Array with b coeffs.
|
39
|
+
def coeffs
|
40
|
+
v=Alglib_ext::Real1dArray.new
|
41
|
+
Alglib_ext::lrunpack(@model,v, @ivars);
|
42
|
+
Alglib_ext.real1d_to_array(v)[0,v.size]
|
43
|
+
end
|
44
|
+
# Predict an y value based on an array of predictors.
|
45
|
+
def process(vector)
|
46
|
+
Alglib_ext::lrprocess(@model,vector);
|
47
|
+
end
|
48
|
+
# A wrapper for lm_report
|
49
|
+
def report
|
50
|
+
{:c=>@report.c,
|
51
|
+
:rmserror=>@report.rmserror,
|
52
|
+
:avgerror=>@report.avgerror,
|
53
|
+
:avgrelerror=>@report.avgrelerror,
|
54
|
+
:cvrmserror=>@report.cvrmserror,
|
55
|
+
:cvavgerror=>@report.cvavgerror,
|
56
|
+
:cvavgrelerror=>@report.cvavgrelerror,
|
57
|
+
:ncvdefects=>@report.ncvdefects,
|
58
|
+
:cvdefects=>@report.cvdefects
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|