num4anova 0.0.1-java → 0.0.3-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61d4380d19135d9bb9973755730f34794d2f4741882d494433086922de5fecbc
4
- data.tar.gz: eed7345a3482c955c3537954fd6d053d2898f53bfc4807aa39926e23c407e3e2
3
+ metadata.gz: 89f91d9c210bb998f14a726f1c7147470cba19fba721724625b7ec87e4c88ad9
4
+ data.tar.gz: a79f6e3ca4adc650193065ae62037cfed0580e5f7b9c5e1d06109d74f17a05d6
5
5
  SHA512:
6
- metadata.gz: 756c787954a6c83b735781b4230b1f113bd3e944d7262e7dd2197cacf39bed1640555d5dfaa555552f6433f1b7905c2211948dc54ce5a1686520f23162316014
7
- data.tar.gz: 878cd5056eed4258da283789036ebd0b209fc19e215a9e4bc6ffdf2d657bccecff858db6f4e4ad643ec215597e902edc20592bc5704cb906e693b720fe343d50
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.2] - 2023-12-12
5
+ ## [0.0.3] - 2024-01-26
6
6
 
7
- ### change
8
- - chg Q-QPlot and kstest
9
- - chg from one-side test to two side test.
7
+ ### add
8
+ - add function of dunnet_test.
10
9
 
11
- ## [0.0.1] - 2023-12-05
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
@@ -6,3 +6,5 @@ Rake::JavaExtensionTask.new(name='num4anova') do | ext |
6
6
  ext.classpath = jars.map { |x| File.expand_path x }.join ":"
7
7
  end
8
8
  task :default => [:compile]
9
+
10
+
@@ -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
@@ -5,7 +5,8 @@ require 'commons-math3-3.6.1.jar'
5
5
 
6
6
  java_import 'OneWayLayout'
7
7
  java_import 'java.util.HashMap'
8
- # 数値計算による分散分析を行う
8
+ # 分散分析を行う
9
+ # (Apache commoms math3使用)
9
10
  module Num4AnovaLib
10
11
  # 一元配置の分散分析
11
12
  class OneWayLayoutLib
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.1
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-09 00:00:00.000000000 Z
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: