num4anova 0.0.15-java → 0.1.1-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: 81c39fe39ac94774f6ce94343e91c968190c63c510c9742d0a4b1e33c6f1a399
4
- data.tar.gz: 9ba93973bdf9ad7237dd02702b67cd493335659a9b9f9162976ecb703ae351db
3
+ metadata.gz: 6009791608b43ea842ca9f342766aeb1fdb94ad284fdc0383b18296d7d7ab62f
4
+ data.tar.gz: 77a8b66f94c9a06cbcd39182b901f806820e0a7703aa058aac30ce45f66b69d6
5
5
  SHA512:
6
- metadata.gz: c2d3ffd3cbf0bcb0c4955c64c587b48da9d878bb61ce5c3a2b547de4c6563bafbf6852aa032e378d318419e55d6583f4af6467a7456a598501d6acea5f2b9c91
7
- data.tar.gz: 7d97f9780f7d68f601810ac5ba5bcda923050b80e11fbff53b78017ceb61d954a788bb62f9a1dc85bc79c7e4fd0be857c538d6647d7506f91c6100295891238d
6
+ metadata.gz: 20c1fd861a8fb4d972970bb86e0ba4f814efb17ba4369c96dc2a8c513bca1a68ddc0abc0933ce0ed56e4d14cba44b08a1eaa519f39b851626135574a85f092f3
7
+ data.tar.gz: 8a0a1948f71bcdb53813b26b2406bfb026af2154bf7db5f9cfa33f04509abaabab1819f5cae9d0b7a85e3f0dfe48f6ae62ac1ff8a35d779880712c905195e409
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.1.1] - 2024-05-15
6
+ ### change
7
+ - chg module name to Num4MultiCompLib from MultiCompLib
8
+
9
+ ## [0.0.16] - 2024-04-16
10
+
11
+ ### add
12
+ - add fuction of bonferrono_test in friedman_test.
13
+
5
14
  ## [0.0.15] - 2024-04-13
6
15
 
7
16
  ### add
@@ -1,6 +1,11 @@
1
1
  import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
2
2
  import org.apache.commons.math3.distribution.FDistribution;
3
+ import org.apache.commons.math3.distribution.ChiSquaredDistribution;
3
4
  import java.util.Arrays;
5
+
6
+ import org.apache.commons.math3.stat.ranking.NaNStrategy;
7
+ import org.apache.commons.math3.stat.ranking.NaturalRanking;
8
+ import org.apache.commons.math3.stat.ranking.TiesStrategy;
4
9
  public class TwoWayLayout {
5
10
  private static TwoWayLayout twoWay = new TwoWayLayout();
6
11
  public static TwoWayLayout getInstance() {
@@ -18,16 +23,26 @@ public class TwoWayLayout {
18
23
  double[] statistic = twoway.calcTestStatistic(xij);
19
24
  return twoway.execute_test(statistic, a);
20
25
  }
26
+ public boolean friedmanTest(double[][] xij, double a) {
27
+ OneWayAnovaTest twoway = new FriedmanTest();
28
+
29
+ double statistic = twoway.calcTestStatistic(xij);
30
+ return twoway.execute_test(statistic, a);
31
+ }
21
32
  /*********************************/
22
33
  /* interface define */
23
34
  /*********************************/
24
35
  private interface TwoWayAnovaTest {
25
36
  double[] calcTestStatistic(double[][][] xij);
26
- boolean[] execute_test(double statistic[], double a);
37
+ boolean[] execute_test(double[] statistic, double a);
27
38
  }
28
39
  private interface TwoWay2AnovaTest {
29
40
  double[] calcTestStatistic(double[][] xij);
30
- boolean[] execute_test(double statistic[], double a);
41
+ boolean[] execute_test(double[] statistic, double a);
42
+ }
43
+ private interface OneWayAnovaTest {
44
+ double calcTestStatistic(double[][] xi);
45
+ boolean execute_test(double statistic, double a);
31
46
  }
32
47
  /*********************************/
33
48
  /* class define */
@@ -162,7 +177,7 @@ public class TwoWayLayout {
162
177
  }
163
178
  return sumDrift;
164
179
  }
165
- public boolean[] execute_test(double statistic[], double a) {
180
+ public boolean[] execute_test(double[] statistic, double a) {
166
181
  boolean[] ret = new boolean[3];
167
182
 
168
183
  ret[0] = evaluation(new FDistribution(an, en), statistic[0], a);
@@ -269,7 +284,7 @@ public class TwoWayLayout {
269
284
  return sumDrift;
270
285
  }
271
286
 
272
- public boolean[] execute_test(double statistic[], double a) {
287
+ public boolean[] execute_test(double[] statistic, double a) {
273
288
  boolean[] ret = new boolean[2];
274
289
 
275
290
  ret[0] = evaluation(new FDistribution(an, en), statistic[0], a);
@@ -282,5 +297,64 @@ public class TwoWayLayout {
282
297
  return (statistic >= r_val) ? true : false;
283
298
  }
284
299
  }
300
+ // フリードマンの検定
301
+ private class FriedmanTest implements OneWayAnovaTest{
302
+ private NaturalRanking naturalRanking;
303
+ private int n = 0;
304
+ private int k = 0;
305
+ public FriedmanTest() {
306
+ naturalRanking = new NaturalRanking(NaNStrategy.FIXED,
307
+ TiesStrategy.AVERAGE);
308
+ }
309
+ public double calcTestStatistic(double[][] xij) {
310
+ n = xij[0].length;
311
+ k = xij.length;
312
+ double[][] z = concatSample(xij);
313
+ double[][] ranks = calcRankij(z);
314
+ double[] sumRankXi = calcSumRankXi(ranks);
315
+ double kw = 0.0;
316
+
317
+ for(int i = 0; i < sumRankXi.length; i++) {
318
+ kw += sumRankXi[i] * sumRankXi[i];
319
+ }
320
+ return 12.0 / (n * k * (k + 1.0)) * kw - 3.0 * n * (k + 1.0);
321
+ }
322
+ public boolean execute_test(double statistic, double a) {
323
+ ChiSquaredDistribution chi2Dist = new ChiSquaredDistribution(k - 1);
324
+
325
+ double r_val = chi2Dist.inverseCumulativeProbability(1.0 - a);
326
+
327
+ return (r_val < statistic) ? true : false;
328
+ }
329
+ private double[][] concatSample(double[][] xi) {
330
+ double[][] z = new double[n][k];
331
+
332
+ for(int i = 0; i < k; i++) {
333
+ for(int j = 0; j < n; j++) {
334
+ z[j][i] = xi[i][j];
335
+ }
336
+ }
337
+ return z;
338
+ }
339
+ private double[][] calcRankij(double[][] z) {
340
+ double[][] ranks = new double[n][k];
341
+
342
+ for(int i = 0; i < n; i++) {
343
+ ranks[i] = naturalRanking.rank(z[i]);
344
+ }
345
+ return ranks;
346
+ }
347
+ private double[] calcSumRankXi(double[][] ranks) {
348
+ double[] sumRi = new double[k];
349
+
350
+ for(int i = 0; i < k; i++) {
351
+ sumRi[i] = 0.0;
352
+ for(int j = 0; j < n; j++) {
353
+ sumRi[i] += ranks[j][i];
354
+ }
355
+ }
356
+ return sumRi;
357
+ }
358
+ }
285
359
  }
286
360
 
data/lib/num4anova.rb CHANGED
@@ -157,12 +157,11 @@ module Num4AnovaLib
157
157
  # @param [array] xi データ(double[][])
158
158
  # @param [double] a 有意水準
159
159
  # @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
160
+ # @example
160
161
  # xi = [
161
- # [12.2, 18.8, 18.2],
162
- # [22.2, 20.5, 14.6],
163
- # [20.8, 19.5, 26.3],
164
- # [26.4, 32.5, 31.3],
165
- # [24.5, 21.2, 22.4],
162
+ # [12.2, 18.8, 18.2],
163
+ # [22.2, 20.5, 14.6, 20.8, 19.5, 26.3],
164
+ # [26.4, 32.5, 31.3, 24.5, 21.2, 22.4],
166
165
  # ]
167
166
  # oneWay = Num4AnovaLib::OneWayLayoutLib.new
168
167
  # oneWay.kruskalwallis_test(xi, 0.05)
@@ -236,6 +235,27 @@ module Num4AnovaLib
236
235
  def twoway2_anova(xij, a)
237
236
  ret = @twoWay.twoway2Anova(xij.to_java(Java::double[]), a)
238
237
  return ret.to_a
238
+ end
239
+ # フリードマン検定
240
+ #
241
+ # @overload friedman_test(xij, a)
242
+ # @param [array] xij データ(double[][])
243
+ # @param [double] a 有意水準
244
+ # @return [boolean] 検定結果(boolean true:棄却域内 false:棄却域外)
245
+ # @example
246
+ # xij = [
247
+ # [13.6, 15.6, 9.2],
248
+ # [22.3, 23.3, 13.3],
249
+ # [26.7, 28.8, 15.0],
250
+ # [28.0, 31.2, 15.8],
251
+ # ]
252
+ # twoWay = Num4AnovaLib::TwoWayLayoutLib.new
253
+ # twoWay.friedman_test(xij, 0.05)
254
+ # =>
255
+ # true
256
+ def friedman_test(xij, a)
257
+ ret = @twoWay.friedmanTest(xij.to_java(Java::double[]), a)
258
+ return ret
239
259
  end
240
260
  end
241
261
  # 共分散分析
@@ -8,7 +8,7 @@ require_relative('dunnet')
8
8
  java_import 'MultiComp'
9
9
  # 多重比較を行う
10
10
  # (Apache commoms math3使用)
11
- module MultiCompLib
11
+ module Num4MultiCompLib
12
12
  # パラメトリック検定
13
13
  class ParametrixTestLib
14
14
  include DunnetTestLib
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.15
4
+ version: 0.1.1
5
5
  platform: java
6
6
  authors:
7
7
  - siranovel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-13 00:00:00.000000000 Z
11
+ date: 2024-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -69,9 +69,9 @@ files:
69
69
  - lib/dunnet.rb
70
70
  - lib/jcommon-1.0.23.jar
71
71
  - lib/jfreechart-1.5.4.jar
72
- - lib/multicomp.rb
73
72
  - lib/num4anova.rb
74
- homepage: http://github.com/siranovel/num4varanly
73
+ - lib/num4multicomp.rb
74
+ homepage: http://github.com/siranovel/num4anova
75
75
  licenses:
76
76
  - MIT
77
77
  metadata: {}