num4anova 0.0.2-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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3987057ab3576c0da8a66256901cf7548ad7bf4bef7aaafccf128b083655333d
4
- data.tar.gz: 4b35674f595de9f05b4056ec6c20d671549341aad88083e5dfd928a881de5c7a
3
+ metadata.gz: 89f91d9c210bb998f14a726f1c7147470cba19fba721724625b7ec87e4c88ad9
4
+ data.tar.gz: a79f6e3ca4adc650193065ae62037cfed0580e5f7b9c5e1d06109d74f17a05d6
5
5
  SHA512:
6
- metadata.gz: 75fd29b81f0c79fa4f72520ced191bccc543d1cf86875425f9408a7c25aeeb8dc0b3417a3af3838bbc2dadee641da79f1fd43b46dc3a02f7e920ffafc1f6e1e7
7
- data.tar.gz: 4a9226cc5d20f86fda993eecc91048edc77a7157da8b2d44c305fdcbf9849aeb0c2c6d4c270b623d62a061daee67aff8864e039280282fc8c2a415453f8e8334
6
+ metadata.gz: 97a1409dfb791766292e8d6c0a49502555911529632d45b72aa6c68bc6fda7e82ed813fff4c005c9c76745a2ad05fe79d1131e23879da18afcc88d0652617c29
7
+ data.tar.gz: 4cd28879971daf44d20ff8122120327e8a74519f658a22e052724af316387c057cfb315a6d1cb23324bbd08634c066c1045594d6c8804f1f87e12d31b6acd0fb
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.0.3] - 2024-01-26
6
+
7
+ ### add
8
+ - add function of dunnet_test.
9
+
5
10
  ## [0.0.2] - 2024-01-23
6
11
 
7
12
  ### add
@@ -23,6 +23,28 @@ public class MultiComp {
23
23
  double[][] statistic = hypoth.calcTestStatistic(xi);
24
24
  return hypoth.executeTest(statistic, a * 0.5);
25
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
+ }
26
48
  /*********************************/
27
49
  /* interface define */
28
50
  /*********************************/
@@ -145,7 +167,6 @@ public class MultiComp {
145
167
  TDistribution tDist = new TDistribution(v);
146
168
  double t =
147
169
  tDist.inverseCumulativeProbability(p);
148
-
149
170
  return Math.sqrt(2) * t;
150
171
  }
151
172
  }
@@ -220,6 +241,127 @@ public class MultiComp {
220
241
  return sumSq / na;
221
242
  }
222
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
+ }
223
365
  }
224
366
  }
225
367
 
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 CHANGED
@@ -3,12 +3,15 @@ require 'num4anova.jar'
3
3
  require 'jfreechart-1.5.4.jar'
4
4
  require 'commons-math3-3.6.1.jar'
5
5
 
6
+ require_relative('dunnet')
7
+
6
8
  java_import 'MultiComp'
7
9
  # 多重比較を行う
8
10
  # (Apache commoms math3使用)
9
11
  module MultiCompLib
10
12
  # パラメトリック検定
11
13
  class ParametrixTestLib
14
+ include DunnetTestLib
12
15
  def initialize
13
16
  @paramTest = MultiComp::ParametrixTest.getInstance()
14
17
  end
@@ -26,7 +29,8 @@ module MultiCompLib
26
29
  # [26.4, 32.5, 31.3],
27
30
  # [24.5, 21.2, 22.4],
28
31
  # ]
29
- # paraTest.turkey_test(xi, a)
32
+ # paraTest = MultiCompLib::ParametrixTestLib.new
33
+ # paraTest.turkey_test(xi, 0.05)
30
34
  # =>
31
35
  # [
32
36
  # [false, false, false, true, false],
@@ -53,7 +57,8 @@ module MultiCompLib
53
57
  # [26.4, 32.5, 31.3],
54
58
  # [24.5, 21.2, 22.4],
55
59
  # ]
56
- # paraTest.bonferrono_test(xi, a)
60
+ # paraTest = MultiCompLib::ParametrixTestLib.new
61
+ # paraTest.bonferrono_test(xi, 0.05)
57
62
  # =>
58
63
  # [
59
64
  # [false, false, false, true, false],
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.2
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-23 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
@@ -64,6 +64,7 @@ files:
64
64
  - ext/num4anova/MultiComp.java
65
65
  - ext/num4anova/OneWayLayout.java
66
66
  - lib/commons-math3-3.6.1.jar
67
+ - lib/dunnet.rb
67
68
  - lib/jcommon-1.0.23.jar
68
69
  - lib/jfreechart-1.5.4.jar
69
70
  - lib/multicomp.rb