num4anova 0.0.1-java → 0.0.3-java
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -5
- data/Rakefile +2 -0
- data/ext/num4anova/MultiComp.java +367 -0
- data/ext/num4anova/OneWayLayout.java +0 -1
- data/lib/dunnet.rb +89 -0
- data/lib/multicomp.rb +78 -0
- data/lib/num4anova.rb +2 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 89f91d9c210bb998f14a726f1c7147470cba19fba721724625b7ec87e4c88ad9
|
|
4
|
+
data.tar.gz: a79f6e3ca4adc650193065ae62037cfed0580e5f7b9c5e1d06109d74f17a05d6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 97a1409dfb791766292e8d6c0a49502555911529632d45b72aa6c68bc6fda7e82ed813fff4c005c9c76745a2ad05fe79d1131e23879da18afcc88d0652617c29
|
|
7
|
+
data.tar.gz: 4cd28879971daf44d20ff8122120327e8a74519f658a22e052724af316387c057cfb315a6d1cb23324bbd08634c066c1045594d6c8804f1f87e12d31b6acd0fb
|
data/CHANGELOG.md
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
## [0.0.
|
|
5
|
+
## [0.0.3] - 2024-01-26
|
|
6
6
|
|
|
7
|
-
###
|
|
8
|
-
-
|
|
9
|
-
- chg from one-side test to two side test.
|
|
7
|
+
### add
|
|
8
|
+
- add function of dunnet_test.
|
|
10
9
|
|
|
11
|
-
## [0.0.
|
|
10
|
+
## [0.0.2] - 2024-01-23
|
|
11
|
+
|
|
12
|
+
### add
|
|
13
|
+
- add Multiple Comparisons function.
|
|
14
|
+
|
|
15
|
+
## [0.0.1] - 2024-01-10
|
|
12
16
|
|
|
13
17
|
### Fixed
|
|
14
18
|
- fix first fixed.
|
data/Rakefile
CHANGED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
|
|
2
|
+
import java.util.Arrays;
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import org.apache.commons.math3.distribution.TDistribution;
|
|
6
|
+
|
|
7
|
+
import org.apache.commons.math3.util.Combinations;
|
|
8
|
+
public class MultiComp {
|
|
9
|
+
public static class ParametrixTest {
|
|
10
|
+
private static ParametrixTest paramTest = new ParametrixTest();
|
|
11
|
+
public static ParametrixTest getInstance() {
|
|
12
|
+
return paramTest;
|
|
13
|
+
}
|
|
14
|
+
public boolean[][] turkeyTest(double[][] xi, double a) {
|
|
15
|
+
HypothesisTest hypoth = new TurkeyTest();
|
|
16
|
+
|
|
17
|
+
double[][] statistic = hypoth.calcTestStatistic(xi);
|
|
18
|
+
return hypoth.executeTest(statistic, a);
|
|
19
|
+
}
|
|
20
|
+
public boolean[][] bonferronoTest(double[][] xi, double a) {
|
|
21
|
+
HypothesisTest hypoth = new BonferroniTest();
|
|
22
|
+
|
|
23
|
+
double[][] statistic = hypoth.calcTestStatistic(xi);
|
|
24
|
+
return hypoth.executeTest(statistic, a * 0.5);
|
|
25
|
+
}
|
|
26
|
+
public boolean scheffe_test(double[][] xi, double a) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public boolean[][] twosideTest(double[][] xi, double a) {
|
|
31
|
+
HypothesisTest hypoth = new TwoSideTest();
|
|
32
|
+
double[][] statistic = hypoth.calcTestStatistic(xi);
|
|
33
|
+
|
|
34
|
+
return hypoth.executeTest(statistic, a / 2.0);
|
|
35
|
+
}
|
|
36
|
+
public boolean[][] rightsideTest(double[][] xi, double a) {
|
|
37
|
+
HypothesisTest hypoth = new RightSideTest();
|
|
38
|
+
double[][] statistic = hypoth.calcTestStatistic(xi);
|
|
39
|
+
|
|
40
|
+
return hypoth.executeTest(statistic, a);
|
|
41
|
+
}
|
|
42
|
+
public boolean[][] leftsideTest(double[][] xi, double a) {
|
|
43
|
+
HypothesisTest hypoth = new LeftSideTest();
|
|
44
|
+
double[][] statistic = hypoth.calcTestStatistic(xi);
|
|
45
|
+
|
|
46
|
+
return hypoth.executeTest(statistic, a);
|
|
47
|
+
}
|
|
48
|
+
/*********************************/
|
|
49
|
+
/* interface define */
|
|
50
|
+
/*********************************/
|
|
51
|
+
private interface HypothesisTest {
|
|
52
|
+
double[][] calcTestStatistic(double[][] xi);
|
|
53
|
+
boolean[][] executeTest(double[][] statistic, double a);
|
|
54
|
+
}
|
|
55
|
+
/*********************************/
|
|
56
|
+
/* Class define */
|
|
57
|
+
/*********************************/
|
|
58
|
+
// turkey法
|
|
59
|
+
private class TurkeyTest implements HypothesisTest {
|
|
60
|
+
private int m = 0;
|
|
61
|
+
private int n = 0;
|
|
62
|
+
public double[][] calcTestStatistic(double[][] xi) {
|
|
63
|
+
n = xi.length; // a
|
|
64
|
+
m = xi[0].length; // n
|
|
65
|
+
double[][] statistic = new double[n][n];
|
|
66
|
+
double[] mean = calcStdMean(xi);
|
|
67
|
+
double ve = calcVe(xi);
|
|
68
|
+
|
|
69
|
+
for(int i = 0; i < n; i++) {
|
|
70
|
+
for(int j = i; j < n; j++) {
|
|
71
|
+
statistic[i][j] =
|
|
72
|
+
Math.abs(mean[i] - mean[j]) / Math.sqrt(ve / m);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return statistic;
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
public boolean[][] executeTest(double[][] statistic, double a) {
|
|
80
|
+
int v = n * (m - 1);
|
|
81
|
+
double q = qvalue(n, v, a);
|
|
82
|
+
boolean[][] ret = new boolean[n][n];
|
|
83
|
+
|
|
84
|
+
for(int i = 0; i < n; i++) {
|
|
85
|
+
for(int j = i; j < n; j++) {
|
|
86
|
+
ret[i][j] = (statistic[i][j] >= q) ? true : false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return ret;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private double[] calcStdMean(double[][] xi) {
|
|
93
|
+
int n = xi.length;
|
|
94
|
+
double[] mean = new double[n];
|
|
95
|
+
|
|
96
|
+
for(int i = 0; i < n; i++) {
|
|
97
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
|
98
|
+
Arrays.stream(xi[i]).forEach(stat::addValue);
|
|
99
|
+
|
|
100
|
+
mean[i] = stat.getMean();
|
|
101
|
+
stat.clear();
|
|
102
|
+
}
|
|
103
|
+
return mean;
|
|
104
|
+
}
|
|
105
|
+
private double calcVe(double[][] xi) {
|
|
106
|
+
int n = xi.length;
|
|
107
|
+
int m = xi[0].length;
|
|
108
|
+
double na = n * (m - 1);
|
|
109
|
+
double sumSq = 0.0;
|
|
110
|
+
|
|
111
|
+
for(int i = 0; i < n; i++) {
|
|
112
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
|
113
|
+
Arrays.stream(xi[i]).forEach(stat::addValue);
|
|
114
|
+
double mean = stat.getMean();
|
|
115
|
+
for (int j = 0; j < m; j++) {
|
|
116
|
+
double diff = xi[i][j] - mean;
|
|
117
|
+
sumSq = sumSq + diff * diff;
|
|
118
|
+
}
|
|
119
|
+
stat.clear();
|
|
120
|
+
}
|
|
121
|
+
return sumSq / na;
|
|
122
|
+
}
|
|
123
|
+
// スチューデント化された範囲のa点
|
|
124
|
+
// v=120
|
|
125
|
+
// k=10 q= 4.5595 p2/a=0.016282 1/61.417516276
|
|
126
|
+
// k=8 q= 4.3630 p2/a=0.025263 1/39.583580731
|
|
127
|
+
// k=6 q= 4.0960 p2/a=0.044883 1/22.280150614
|
|
128
|
+
// k=5 q= 3.9169 p2/a=0.065040 1/15.375153752
|
|
129
|
+
// k=4 q= 3.6846 p2/a=0.103377 1/9.673331592
|
|
130
|
+
// k=3 q= 3.3561 p2/a=0.192270 1/5.2010194
|
|
131
|
+
// k=2 q= 2.8000 p2/a=0.500036 1/2
|
|
132
|
+
// v=14
|
|
133
|
+
// k=10 q= 5.2534 p2/a=0.023091 1/43.306916115
|
|
134
|
+
// k=8 q= 4.9903 p2/a=0.033394 1/29.945499191
|
|
135
|
+
// k=6 q= 4.6385 p2/a=0.054768 1/18.258837277
|
|
136
|
+
// k=5 q= 4.4066 p2/a=0.075883 1/13.178182202
|
|
137
|
+
// k=4 q= 4.1105 p2/a=0.114920 1/8.701705534
|
|
138
|
+
// k=3 q= 3.7014 p2/a=0.202830 1/4.930237144
|
|
139
|
+
// k=2 q= 3.0332 p2/a=0.499991 1/2.000036001
|
|
140
|
+
// v=12
|
|
141
|
+
// k=10 q= 5.3946 p2/a=0.024637 1/40.58935747
|
|
142
|
+
// k=8 q= 5.1187 p2/a=0.035180 1/28.425241615
|
|
143
|
+
// k=6 q= 4.7502 p2/a=0.056858 1/17.587674558
|
|
144
|
+
// k=5 q= 4.5077 p2/a=0.078128 1/12.799508499
|
|
145
|
+
// k=4 q= 4.1987 p2/a=0.117245 1/8.529148365
|
|
146
|
+
// k=3 q= 3.7729 p2/a=0.204923 1/4.879881712
|
|
147
|
+
// k=2 q= 3.0813 p2/a=0.500004 1/2
|
|
148
|
+
// v=10
|
|
149
|
+
// k=10 q= 5.5984 p2/a=0.026922 1/37.144342917
|
|
150
|
+
// k=8 q= 5.3042 p2/a=0.037799 1/26.455726342
|
|
151
|
+
// k=6 q= 4.9128 p2/a=0.059822 1/16.716258233
|
|
152
|
+
// k=5 q= 4.6543 p2/a=0.081351 1/12.292411894
|
|
153
|
+
// k=4 q= 4.3266 p2/a=0.120575 1/8.293593199
|
|
154
|
+
// k=3 q= 3.8768 p2/a=0.207859 1/4.810953579
|
|
155
|
+
// k=2 q= 3.1511 p2/a=0.499979 1/2
|
|
156
|
+
// v=9
|
|
157
|
+
// k=10 q= 5.7384 p2/a=0.028519 1/35.06434307
|
|
158
|
+
// k=8 q= 5.4312 p2/a=0.039639 1/25.22767981
|
|
159
|
+
// k=6 q= 5.0235 p2/a=0.061950 1/16.14205004
|
|
160
|
+
// k=5 q= 4.7554 p2/a=0.083549 1/11.969024165
|
|
161
|
+
// k=4 q= 4.4149 p2/a=0.122828 1/8.141466115
|
|
162
|
+
// k=3 q= 3.9485 p2/a=0.209848 1/4.76535397
|
|
163
|
+
// k=2 q= 3.1992 p2/a=0.499985 1/2
|
|
164
|
+
private double qvalue(int k, int v, double a) {
|
|
165
|
+
double den = (k-1) * (2 + k) / 2;
|
|
166
|
+
double p = 1.0 - a / den;
|
|
167
|
+
TDistribution tDist = new TDistribution(v);
|
|
168
|
+
double t =
|
|
169
|
+
tDist.inverseCumulativeProbability(p);
|
|
170
|
+
return Math.sqrt(2) * t;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ボンフェロー法
|
|
174
|
+
private class BonferroniTest implements HypothesisTest {
|
|
175
|
+
private int k = 0;
|
|
176
|
+
private int n = 0;
|
|
177
|
+
private int m = 0;
|
|
178
|
+
public double[][] calcTestStatistic(double[][] xi) {
|
|
179
|
+
n = xi.length;
|
|
180
|
+
m = xi[0].length;
|
|
181
|
+
double[][] statistic = new double[n][n];
|
|
182
|
+
double[] mean = calcStdMean(xi);
|
|
183
|
+
Combinations c = new Combinations(n, 2);
|
|
184
|
+
List<int[]> al = new ArrayList<>();
|
|
185
|
+
for(int[] iterate : c) {
|
|
186
|
+
al.add(iterate);
|
|
187
|
+
}
|
|
188
|
+
k = al.size();
|
|
189
|
+
double ve = calcVe(xi);
|
|
190
|
+
for(int[] array : al) {
|
|
191
|
+
int i = array[0];
|
|
192
|
+
int j = array[1];
|
|
193
|
+
int n1 = xi[i].length;
|
|
194
|
+
int n2 = xi[j].length;
|
|
195
|
+
|
|
196
|
+
statistic[i][j] = Math.abs(mean[i] - mean[j])
|
|
197
|
+
/ Math.sqrt((1.0 / n1 + 1.0 / n2) * ve);
|
|
198
|
+
}
|
|
199
|
+
return statistic;
|
|
200
|
+
}
|
|
201
|
+
public boolean[][] executeTest(double[][] statistic, double a) {
|
|
202
|
+
boolean[][] ret = new boolean[n][n];
|
|
203
|
+
double na = n * (m - 1);
|
|
204
|
+
TDistribution tDist = new TDistribution(na);
|
|
205
|
+
|
|
206
|
+
double t = tDist.inverseCumulativeProbability(1.0 - a / k);
|
|
207
|
+
|
|
208
|
+
for(int i = 0; i < n; i++) {
|
|
209
|
+
for(int j = i; j < n; j++) {
|
|
210
|
+
ret[i][j] = (statistic[i][j] >= t) ? true : false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return ret;
|
|
214
|
+
}
|
|
215
|
+
private double[] calcStdMean(double[][] xi) {
|
|
216
|
+
double[] mean = new double[n];
|
|
217
|
+
|
|
218
|
+
for(int i = 0; i < n; i++) {
|
|
219
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
|
220
|
+
Arrays.stream(xi[i]).forEach(stat::addValue);
|
|
221
|
+
|
|
222
|
+
mean[i] = stat.getMean();
|
|
223
|
+
stat.clear();
|
|
224
|
+
}
|
|
225
|
+
return mean;
|
|
226
|
+
}
|
|
227
|
+
private double calcVe(double[][] xi) {
|
|
228
|
+
double na = n * (m - 1);
|
|
229
|
+
double sumSq = 0.0;
|
|
230
|
+
|
|
231
|
+
for(int i = 0; i < n; i++) {
|
|
232
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
|
233
|
+
Arrays.stream(xi[i]).forEach(stat::addValue);
|
|
234
|
+
double mean = stat.getMean();
|
|
235
|
+
for (int j = 0; j < m; j++) {
|
|
236
|
+
double diff = xi[i][j] - mean;
|
|
237
|
+
sumSq = sumSq + diff * diff;
|
|
238
|
+
}
|
|
239
|
+
stat.clear();
|
|
240
|
+
}
|
|
241
|
+
return sumSq / na;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// ダネット法
|
|
245
|
+
private class DunnetTest{
|
|
246
|
+
private int k = 0;
|
|
247
|
+
private int v = 0;
|
|
248
|
+
private double[] mean = null;
|
|
249
|
+
private double[] n = null;
|
|
250
|
+
protected int getK() { return k;}
|
|
251
|
+
protected int getV() { return v;}
|
|
252
|
+
public double[][] calcTestStatistic(double[][] xi) {
|
|
253
|
+
k = xi.length;
|
|
254
|
+
mean = new double[k];
|
|
255
|
+
n = new double[k];
|
|
256
|
+
double[][] statistic = new double[k][k];
|
|
257
|
+
double ve = calcVe(xi);
|
|
258
|
+
|
|
259
|
+
for(int i = 0; i < k; i++) {
|
|
260
|
+
for(int j = 0; j < k; j++) {
|
|
261
|
+
statistic[i][j] = (mean[j] - mean[i])
|
|
262
|
+
/ Math.sqrt(ve * (1.0 / n[j] + 1.0 / n[i]));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return statistic;
|
|
266
|
+
}
|
|
267
|
+
private double calcVe(double[][] xi) {
|
|
268
|
+
double sumSq = 0.0;
|
|
269
|
+
int sumN = 0;
|
|
270
|
+
for(int i = 0; i < k; i++) {
|
|
271
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
|
272
|
+
Arrays.stream(xi[i]).forEach(stat::addValue);
|
|
273
|
+
mean[i] = stat.getMean();
|
|
274
|
+
n[i] = stat.getN();
|
|
275
|
+
sumSq += (n[i] - 1) * stat.getVariance();
|
|
276
|
+
sumN += n[i];
|
|
277
|
+
stat.clear();
|
|
278
|
+
}
|
|
279
|
+
v = sumN - k;
|
|
280
|
+
return sumSq / v;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
private class TwoSideTest extends DunnetTest
|
|
284
|
+
implements HypothesisTest {
|
|
285
|
+
public boolean[][] executeTest(double[][] statistic, double a) {
|
|
286
|
+
int v = super.getV();
|
|
287
|
+
int k = super.getK();
|
|
288
|
+
double den = k - 1;
|
|
289
|
+
double p = 1.0 - a / den;
|
|
290
|
+
TDistribution tDist = new TDistribution(v);
|
|
291
|
+
double l_val = tDist.inverseCumulativeProbability(a / den);
|
|
292
|
+
double r_val = tDist.inverseCumulativeProbability(1.0 - a / den);
|
|
293
|
+
boolean[][] ret = new boolean[k][k];
|
|
294
|
+
|
|
295
|
+
for(int i = 0; i < k; i++) {
|
|
296
|
+
for(int j = 0; j < k; j++) {
|
|
297
|
+
ret[i][j] = evaluation(statistic[i][j], l_val, r_val );
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return ret;
|
|
301
|
+
}
|
|
302
|
+
private boolean evaluation(double statistic, double l_val, double r_val) {
|
|
303
|
+
boolean ret = true;
|
|
304
|
+
|
|
305
|
+
if ((l_val < statistic) && (statistic < r_val)) {
|
|
306
|
+
ret = false;
|
|
307
|
+
}
|
|
308
|
+
return ret;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
private class RightSideTest extends DunnetTest
|
|
312
|
+
implements HypothesisTest {
|
|
313
|
+
public boolean[][] executeTest(double[][] statistic, double a) {
|
|
314
|
+
int v = super.getV();
|
|
315
|
+
int k = super.getK();
|
|
316
|
+
double den = k - 1;
|
|
317
|
+
double p = 1.0 - a / den;
|
|
318
|
+
TDistribution tDist = new TDistribution(v);
|
|
319
|
+
double r_val = tDist.inverseCumulativeProbability(1.0 - a);
|
|
320
|
+
boolean[][] ret = new boolean[k][k];
|
|
321
|
+
|
|
322
|
+
for(int i = 0; i < k; i++) {
|
|
323
|
+
for(int j = 0; j < k; j++) {
|
|
324
|
+
ret[i][j] = evaluation(statistic[i][j], r_val );
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return ret;
|
|
328
|
+
}
|
|
329
|
+
private boolean evaluation(double statistic, double r_val) {
|
|
330
|
+
boolean ret = true;
|
|
331
|
+
|
|
332
|
+
if (statistic < r_val) {
|
|
333
|
+
ret = false;
|
|
334
|
+
}
|
|
335
|
+
return ret;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
private class LeftSideTest extends DunnetTest
|
|
339
|
+
implements HypothesisTest {
|
|
340
|
+
public boolean[][] executeTest(double[][] statistic, double a) {
|
|
341
|
+
int v = super.getV();
|
|
342
|
+
int k = super.getK();
|
|
343
|
+
double den = k - 1;
|
|
344
|
+
double p = a / den;
|
|
345
|
+
TDistribution tDist = new TDistribution(v);
|
|
346
|
+
double l_val = tDist.inverseCumulativeProbability(a);
|
|
347
|
+
boolean[][] ret = new boolean[k][k];
|
|
348
|
+
|
|
349
|
+
for(int i = 0; i < k; i++) {
|
|
350
|
+
for(int j = 0; j < k; j++) {
|
|
351
|
+
ret[i][j] = evaluation(statistic[i][j], l_val );
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return ret;
|
|
355
|
+
}
|
|
356
|
+
private boolean evaluation(double statistic, double l_val) {
|
|
357
|
+
boolean ret = true;
|
|
358
|
+
|
|
359
|
+
if (l_val < statistic) {
|
|
360
|
+
ret = false;
|
|
361
|
+
}
|
|
362
|
+
return ret;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
@@ -17,7 +17,6 @@ import org.jfree.chart.axis.CategoryAxis;
|
|
|
17
17
|
import org.jfree.chart.axis.NumberAxis;
|
|
18
18
|
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
|
|
19
19
|
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
|
|
20
|
-
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
|
|
21
20
|
|
|
22
21
|
import org.jfree.chart.ChartUtils;
|
|
23
22
|
import java.io.File;
|
data/lib/dunnet.rb
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Dunnet検定
|
|
2
|
+
# (Apache commoms math3使用)
|
|
3
|
+
module DunnetTestLib
|
|
4
|
+
# Dunnet検定の両側検定
|
|
5
|
+
#
|
|
6
|
+
# @overload twoside_test(xi, a)
|
|
7
|
+
# @param [array] xi データ(double[][])
|
|
8
|
+
# @param [double] a 有意水準
|
|
9
|
+
# @return [Array] 検定結果(boolean[][] true:棄却域内 false:棄却域外)
|
|
10
|
+
# @example
|
|
11
|
+
# xi = [
|
|
12
|
+
# [12.2, 18.8, 18.2],
|
|
13
|
+
# [22.2, 20.5, 14.6],
|
|
14
|
+
# [20.8, 19.5, 26.3],
|
|
15
|
+
# [26.4, 32.5, 31.3],
|
|
16
|
+
# [24.5, 21.2, 22.4],
|
|
17
|
+
# ]
|
|
18
|
+
# paraTest = MultiCompLib::ParametrixTestLib.new
|
|
19
|
+
# paraTest.twoside_test(xi, 0.05)
|
|
20
|
+
# =>
|
|
21
|
+
# res = [
|
|
22
|
+
# [false, false, false, true, false],
|
|
23
|
+
# [false, false, false, true, false],
|
|
24
|
+
# [false, false, false, false, false],
|
|
25
|
+
# [true, true, false, false, false],
|
|
26
|
+
# [false, false, false, false, false],
|
|
27
|
+
# ]
|
|
28
|
+
def twoside_test(xi, a)
|
|
29
|
+
ret = @paramTest.twosideTest(xi.to_java(Java::double[]), a)
|
|
30
|
+
return ret.to_a
|
|
31
|
+
end
|
|
32
|
+
# Dunnet検定の右側検定
|
|
33
|
+
#
|
|
34
|
+
# @overload rightside_test(xi, a)
|
|
35
|
+
# @param [array] xi データ(double[][])
|
|
36
|
+
# @param [double] a 有意水準
|
|
37
|
+
# @return [Array] 検定結果(boolean[][] true:棄却域内 false:棄却域外)
|
|
38
|
+
# @example
|
|
39
|
+
# xi = [
|
|
40
|
+
# [12.2, 18.8, 18.2],
|
|
41
|
+
# [22.2, 20.5, 14.6],
|
|
42
|
+
# [20.8, 19.5, 26.3],
|
|
43
|
+
# [26.4, 32.5, 31.3],
|
|
44
|
+
# [24.5, 21.2, 22.4],
|
|
45
|
+
# ]
|
|
46
|
+
# paraTest = MultiCompLib::ParametrixTestLib.new
|
|
47
|
+
# paraTest.rightside_test(xi, 0.05)
|
|
48
|
+
# =>
|
|
49
|
+
# res = [
|
|
50
|
+
# [false, false, true, true, true],
|
|
51
|
+
# [false, false, false, true, false],
|
|
52
|
+
# [false, false, false, true, false],
|
|
53
|
+
# [false, false, false, false, false],
|
|
54
|
+
# [false, false, false, true, false],
|
|
55
|
+
# ]
|
|
56
|
+
def rightside_test(xi, a)
|
|
57
|
+
ret = @paramTest.rightsideTest(xi.to_java(Java::double[]), a)
|
|
58
|
+
return ret.to_a
|
|
59
|
+
end
|
|
60
|
+
# Dunnet検定の左側検定
|
|
61
|
+
#
|
|
62
|
+
# @overload leftside_test(xi, a)
|
|
63
|
+
# @param [array] xi データ(double[][])
|
|
64
|
+
# @param [double] a 有意水準
|
|
65
|
+
# @return [Array] 検定結果(boolean[][] true:棄却域内 false:棄却域外)
|
|
66
|
+
# @example
|
|
67
|
+
# xi = [
|
|
68
|
+
# [12.2, 18.8, 18.2],
|
|
69
|
+
# [22.2, 20.5, 14.6],
|
|
70
|
+
# [20.8, 19.5, 26.3],
|
|
71
|
+
# [26.4, 32.5, 31.3],
|
|
72
|
+
# [24.5, 21.2, 22.4],
|
|
73
|
+
# ]
|
|
74
|
+
# paraTest = MultiCompLib::ParametrixTestLib.new
|
|
75
|
+
# paraTest.leftside_test(xi, 0.05)
|
|
76
|
+
# =>
|
|
77
|
+
# res = [
|
|
78
|
+
# [false, false, false, false, false],
|
|
79
|
+
# [false, false, false, false, false],
|
|
80
|
+
# [true, false, false, false, false],
|
|
81
|
+
# [true, true, true, false, true],
|
|
82
|
+
# [true, false, false, false, false],
|
|
83
|
+
# ]
|
|
84
|
+
def leftside_test(xi, a)
|
|
85
|
+
ret = @paramTest.leftsideTest(xi.to_java(Java::double[]), a)
|
|
86
|
+
return ret.to_a
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
data/lib/multicomp.rb
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require 'java'
|
|
2
|
+
require 'num4anova.jar'
|
|
3
|
+
require 'jfreechart-1.5.4.jar'
|
|
4
|
+
require 'commons-math3-3.6.1.jar'
|
|
5
|
+
|
|
6
|
+
require_relative('dunnet')
|
|
7
|
+
|
|
8
|
+
java_import 'MultiComp'
|
|
9
|
+
# 多重比較を行う
|
|
10
|
+
# (Apache commoms math3使用)
|
|
11
|
+
module MultiCompLib
|
|
12
|
+
# パラメトリック検定
|
|
13
|
+
class ParametrixTestLib
|
|
14
|
+
include DunnetTestLib
|
|
15
|
+
def initialize
|
|
16
|
+
@paramTest = MultiComp::ParametrixTest.getInstance()
|
|
17
|
+
end
|
|
18
|
+
# turkeyの方法による多重比較
|
|
19
|
+
#
|
|
20
|
+
# @overload turkey_test(xi, a)
|
|
21
|
+
# @param [array] xi データ(double[][])
|
|
22
|
+
# @param [double] a 有意水準
|
|
23
|
+
# @return [Array] 検定結果(boolean[][] true:棄却域内 false:棄却域外)
|
|
24
|
+
# @example
|
|
25
|
+
# xi = [
|
|
26
|
+
# [12.2, 18.8, 18.2],
|
|
27
|
+
# [22.2, 20.5, 14.6],
|
|
28
|
+
# [20.8, 19.5, 26.3],
|
|
29
|
+
# [26.4, 32.5, 31.3],
|
|
30
|
+
# [24.5, 21.2, 22.4],
|
|
31
|
+
# ]
|
|
32
|
+
# paraTest = MultiCompLib::ParametrixTestLib.new
|
|
33
|
+
# paraTest.turkey_test(xi, 0.05)
|
|
34
|
+
# =>
|
|
35
|
+
# [
|
|
36
|
+
# [false, false, false, true, false],
|
|
37
|
+
# [false, false, false, true, false],
|
|
38
|
+
# [false, false, false, false, false],
|
|
39
|
+
# [false, false, false, false, false],
|
|
40
|
+
# [false, false, false, false, false],
|
|
41
|
+
# ]
|
|
42
|
+
def turkey_test(xi, a)
|
|
43
|
+
ret = @paramTest.turkeyTest(xi.to_java(Java::double[]), a)
|
|
44
|
+
return ret.to_a
|
|
45
|
+
end
|
|
46
|
+
# ボンフェロー二の不等式による多重比較
|
|
47
|
+
#
|
|
48
|
+
# @overload bonferrono_test(xi, a)
|
|
49
|
+
# @param [array] xi データ(double[][])
|
|
50
|
+
# @param [double] a 有意水準
|
|
51
|
+
# @return [Array] 検定結果(boolean[][] true:棄却域内 false:棄却域外)
|
|
52
|
+
# @example
|
|
53
|
+
# xi = [
|
|
54
|
+
# [12.2, 18.8, 18.2],
|
|
55
|
+
# [22.2, 20.5, 14.6],
|
|
56
|
+
# [20.8, 19.5, 26.3],
|
|
57
|
+
# [26.4, 32.5, 31.3],
|
|
58
|
+
# [24.5, 21.2, 22.4],
|
|
59
|
+
# ]
|
|
60
|
+
# paraTest = MultiCompLib::ParametrixTestLib.new
|
|
61
|
+
# paraTest.bonferrono_test(xi, 0.05)
|
|
62
|
+
# =>
|
|
63
|
+
# [
|
|
64
|
+
# [false, false, false, true, false],
|
|
65
|
+
# [false, false, false, true, false],
|
|
66
|
+
# [false, false, false, false, false],
|
|
67
|
+
# [false, false, false, false, false],
|
|
68
|
+
# [false, false, false, false, false],
|
|
69
|
+
# ]
|
|
70
|
+
def bonferrono_test(xi, a)
|
|
71
|
+
ret = @paramTest.bonferronoTest(xi.to_java(Java::double[]), a)
|
|
72
|
+
return ret.to_a
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
# ノンパラメトリック検定
|
|
76
|
+
class NonParametrixTestLib
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/num4anova.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: num4anova
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- siranovel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-01-
|
|
11
|
+
date: 2024-01-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -61,10 +61,13 @@ files:
|
|
|
61
61
|
- Gemfile
|
|
62
62
|
- LICENSE
|
|
63
63
|
- Rakefile
|
|
64
|
+
- ext/num4anova/MultiComp.java
|
|
64
65
|
- ext/num4anova/OneWayLayout.java
|
|
65
66
|
- lib/commons-math3-3.6.1.jar
|
|
67
|
+
- lib/dunnet.rb
|
|
66
68
|
- lib/jcommon-1.0.23.jar
|
|
67
69
|
- lib/jfreechart-1.5.4.jar
|
|
70
|
+
- lib/multicomp.rb
|
|
68
71
|
- lib/num4anova.rb
|
|
69
72
|
homepage: http://github.com/siranovel/num4varanly
|
|
70
73
|
licenses:
|