num4anova 0.0.8-java → 0.0.9-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: 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