num4anova 0.0.8-java → 0.0.9-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: c95aa4643ccb4e0c51bcead18e37bf5561ecadd7ea0fe67a1ed0ee332aab3229
4
- data.tar.gz: 47045f21d6b1774ebf1435c6397852b6f567bf69fe1d001091cd4aa164a0756e
3
+ metadata.gz: f5d31afc9315035a148a1b2a755ecc64422c64d82c548378c8f4ea3bb940d91d
4
+ data.tar.gz: 249a18fb9ec372037d32b1bafc4ba37d35916e8d3fe25a96fc576f627e8ab89b
5
5
  SHA512:
6
- metadata.gz: 5367576d7d8d9130c182eed316807b2b7393f3df7cabc9f95c441aced071b39f229e3f5e76a5307e619d399cafd27d4492e4d29049a0cd45475936df386ef647
7
- data.tar.gz: 3f23540f51ca938baa190c4b85a9e9aa6178d386ac0a66b7047cff877fb32b422d3f21ad7d42daa7a14ef4514901a8287f54b11b5b7fddef37e80d65f0c8fbe5
6
+ metadata.gz: de66c54f9facc61769f2a40c4b936bcc8a6e93cfe8eb1d2d185504b9d9e59cfd6dc45654a2ec7f26a6a72c7debfef00396058a1c0db405b47e4deed7963382be
7
+ data.tar.gz: 908b725baa8aa4b68102b66f65fb789cc496124283e210dfd0b7c05dac4c6e22701e3c2e5bcb16c6ec01631aa3b20a8e50908b994f3dfd78e8f5804dfb245391
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.0.9] - 2024-03-02
6
+
7
+ ### add
8
+ - add fuction of parallel_test.
9
+
5
10
  ## [0.0.6] - 2024-02-04
6
11
 
7
12
  ### add
@@ -0,0 +1,195 @@
1
+ import org.apache.commons.math3.distribution.FDistribution;
2
+
3
+ public class Ancova {
4
+ private static Ancova ancova = new Ancova();
5
+ public static Ancova getInstance() {
6
+ return ancova;
7
+ }
8
+ public boolean parallelTest(double[][][] xi, double a) {
9
+ HypothesisTest hypoth = new Parallettest();
10
+
11
+ double statistic = hypoth.calcTestStatistic(xi);
12
+ return hypoth.executeTest(statistic, a);
13
+ }
14
+ /*********************************/
15
+ /* interface define */
16
+ /*********************************/
17
+ private interface HypothesisTest {
18
+ double calcTestStatistic(double[][][] xi);
19
+ boolean executeTest(double statistic, double a);
20
+ }
21
+ /*********************************/
22
+ /* class define */
23
+ /*********************************/
24
+ // 回帰直線モデルの平行性の検定
25
+ private class Parallettest implements HypothesisTest {
26
+ private int n = 0;
27
+ private int m = 0;
28
+ public double calcTestStatistic(double[][][] xi) {
29
+ int sumn = calcSumn(xi);
30
+ double sumx = calcSumx(xi);
31
+ double sumy = calcSumy(xi);
32
+ n = xi.length - 1;
33
+ m = sumn - 2 * xi.length;
34
+
35
+ // 全変動
36
+ double sumx2 = calcSumx2(xi);
37
+ double sumy2 = calcSumy2(xi);
38
+ double sumyx = calcSumyx(xi);
39
+
40
+ double sumtx = sumx2 - sumx*sumx / sumn;
41
+ double sumty = sumy2 - sumy*sumy / sumn;
42
+ double sumtyx = sumyx - sumy*sumx / sumn;
43
+
44
+ // 水準間変動
45
+ double sumax = calcSumax(xi) - sumx*sumx / sumn;
46
+ double sumay = calcSumay(xi) - sumy*sumy / sumn;
47
+ double sumayx = calcSumayx(xi) - sumy*sumx / sumn;
48
+
49
+ // 水準内変動
50
+ double sumex = sumtx - sumax;
51
+ double sumey = sumty - sumay;
52
+ double sumeyx = sumtyx - sumayx;
53
+
54
+ double sumbx = calcbx(xi);
55
+ double sumnp = sumbx - sumeyx * sumeyx / sumex;
56
+ double sume2 = sumey - sumbx;
57
+
58
+ //
59
+ double vnp = sumnp / n;
60
+ double ve2 = sume2 / m;
61
+ return vnp / ve2;
62
+ }
63
+ public boolean executeTest(double statistic, double a) {
64
+ FDistribution fDist = new FDistribution(n, m);
65
+ double f = fDist.inverseCumulativeProbability(1.0 - a);
66
+
67
+ return (statistic >= f) ? true : false;
68
+ }
69
+ private int calcSumn(double[][][] xi) {
70
+ int sum = 0;
71
+
72
+ for(int i = 0; i < xi.length; i++) {
73
+ sum += xi[i].length;
74
+ }
75
+ return sum;
76
+ }
77
+ // 全変動
78
+ private double calcSumx(double[][][] xi) {
79
+ double sum = 0.0;
80
+
81
+ for (int i = 0; i < xi.length; i++) {
82
+ for (int j = 0; j < xi[i].length; j++) {
83
+ sum += xi[i][j][1];
84
+ }
85
+ }
86
+ return sum;
87
+ }
88
+ private double calcSumy(double[][][] xi) {
89
+ double sum = 0.0;
90
+
91
+ for (int i = 0; i < xi.length; i++) {
92
+ for (int j = 0; j < xi[i].length; j++) {
93
+ sum += xi[i][j][0];
94
+ }
95
+ }
96
+ return sum;
97
+ }
98
+ private double calcSumx2(double[][][] xi) {
99
+ double sum = 0.0;
100
+
101
+ for (int i = 0; i < xi.length; i++) {
102
+ for (int j = 0; j < xi[i].length; j++) {
103
+ sum += xi[i][j][1] * xi[i][j][1];
104
+ }
105
+ }
106
+ return sum;
107
+ }
108
+ private double calcSumy2(double[][][] xi) {
109
+ double sum = 0.0;
110
+
111
+ for (int i = 0; i < xi.length; i++) {
112
+ for (int j = 0; j < xi[i].length; j++) {
113
+ sum += xi[i][j][0] * xi[i][j][0];
114
+ }
115
+ }
116
+ return sum;
117
+ }
118
+ private double calcSumyx(double[][][] xi) {
119
+ double sum = 0.0;
120
+
121
+ for (int i = 0; i < xi.length; i++) {
122
+ for (int j = 0; j < xi[i].length; j++) {
123
+ sum += xi[i][j][0] * xi[i][j][1];
124
+ }
125
+ }
126
+ return sum;
127
+ }
128
+ // 水準間変動
129
+ private double calcSumax(double[][][] xi) {
130
+ double sum = 0.0;
131
+
132
+ for (int i = 0; i < xi.length; i++) {
133
+ double sumxi = 0.0;
134
+ for (int j = 0; j < xi[i].length; j++) {
135
+ sumxi += xi[i][j][1];
136
+ }
137
+ sum += sumxi * sumxi / xi[i].length;
138
+ }
139
+ return sum;
140
+
141
+ }
142
+ private double calcSumay(double[][][] xi) {
143
+ double sum = 0.0;
144
+
145
+ for (int i = 0; i < xi.length; i++) {
146
+ double sumyi = 0.0;
147
+ for (int j = 0; j < xi[i].length; j++) {
148
+ sumyi += xi[i][j][0];
149
+ }
150
+ sum += sumyi * sumyi / xi[i].length;
151
+ }
152
+ return sum;
153
+ }
154
+ private double calcSumayx(double[][][] xi) {
155
+ double sum = 0.0;
156
+
157
+ for (int i = 0; i < xi.length; i++) {
158
+ double sumxi = 0.0;
159
+ double sumyi = 0.0;
160
+ for (int j = 0; j < xi[i].length; j++) {
161
+ sumxi += xi[i][j][1];
162
+ sumyi += xi[i][j][0];
163
+ }
164
+ sum += sumxi * sumyi / xi[i].length;
165
+ }
166
+ return sum;
167
+ }
168
+ // 平行性の検定
169
+ private double calcbx(double[][][] xi) {
170
+ double sum = 0.0;
171
+
172
+ for (int i = 0; i < xi.length; i++) {
173
+ int n = xi[i].length;
174
+ double sumx = 0.0;
175
+ double sumy = 0.0;
176
+ double sumyx = 0.0;
177
+ double sumx2 = 0.0;
178
+ for (int j = 0; j < n; j++) {
179
+ sumx += xi[i][j][1];
180
+ sumy += xi[i][j][0];
181
+ sumyx += xi[i][j][1] * xi[i][j][0];
182
+
183
+ sumx2 += xi[i][j][1] * xi[i][j][1];
184
+
185
+ }
186
+ double wki = n * sumyx - sumy * sumx;
187
+ double wk = wki * wki / (n * (n * sumx2 - sumx * sumx));
188
+
189
+ sum += wk;
190
+ }
191
+ return sum;
192
+ }
193
+ }
194
+ }
195
+
data/lib/num4anova.rb CHANGED
@@ -5,6 +5,7 @@ require 'commons-math3-3.6.1.jar'
5
5
 
6
6
  java_import 'OneWayLayout'
7
7
  java_import 'TwoWayLayout'
8
+ java_import 'Ancova'
8
9
  java_import 'java.util.HashMap'
9
10
  # 分散分析を行う
10
11
  # (Apache commoms math3使用)
@@ -218,5 +219,41 @@ module Num4AnovaLib
218
219
  return ret.to_a
219
220
  end
220
221
  end
222
+ # 共分散分析
223
+ class Num4AncovaLib
224
+ def initialize
225
+ @ancova = Ancova.getInstance()
226
+ end
227
+ # 回帰直線の平行性検定
228
+ #
229
+ # @overload parallel_test(xi, a)
230
+ # @param [array] xi データ(double[][][])
231
+ # @param [double] a 有意水準
232
+ # @return [boolean] 検定結果(boolean true:棄却域内 false:棄却域外)
233
+ # @example
234
+ # xi = [
235
+ # [
236
+ # [3,35], [5,38], [3,39],
237
+ # ],
238
+ # [
239
+ # [3,36], [3,39], [8,54],
240
+ # ],
241
+ # [
242
+ # [2,40], [2,45], [2,39],
243
+ # ],
244
+ # [
245
+ # [3,47], [4,52], [2,48],
246
+ # ],
247
+ # [
248
+ # [1,64], [2,80], [0,70],
249
+ # ],
250
+ # ]
251
+ # ancova = Num4AnovaLib::Num4AncovaLib.new
252
+ # ancova.parallel_test(xi, 0.05)
253
+ # => false
254
+ def parallel_test(xi, a)
255
+ @ancova.parallelTest(xi.to_java(Java::double[][]), a)
256
+ end
257
+ end
221
258
  end
222
259
 
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.8
4
+ version: 0.0.9
5
5
  platform: java
6
6
  authors:
7
7
  - siranovel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-04 00:00:00.000000000 Z
11
+ date: 2024-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -61,6 +61,7 @@ files:
61
61
  - Gemfile
62
62
  - LICENSE
63
63
  - Rakefile
64
+ - ext/num4anova/Ancova.java
64
65
  - ext/num4anova/MultiComp.java
65
66
  - ext/num4anova/OneWayLayout.java
66
67
  - ext/num4anova/TwoWayLayout.java