num4normality 0.0.9-java → 0.0.11-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/ext/num4normality/Normality.java +57 -6
- data/lib/num4normality.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e05aa008cb138a008afea68e92fd7df22fa5155f709ac2649e11db122bc28e44
|
4
|
+
data.tar.gz: 011e3a5473bf128c2946cc23126b59ff977b3b4d937b24405baa655a8d7b6b3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fdb7fe9d57d14a3bd0a7584cbd0f19803f651799ab4d3cbdf14d1ed5f057d480cbf274ca086037adfd28402a991e7b07cdb4d13ec29e6b02fde5f6985dd0906
|
7
|
+
data.tar.gz: b311f196404a1bd3e37b084d3dcca33100e36ff1e8ea5df3fc9a986e56e7a008693e9c01993a74bbe26ad9afbdc5b5e5d9110900b78c7be3d2335e3c25f486bb
|
data/CHANGELOG.md
CHANGED
@@ -94,6 +94,12 @@ public class Normality {
|
|
94
94
|
|
95
95
|
return daigo.test(x, HypothesisTest.P);
|
96
96
|
}
|
97
|
+
public static boolean jbTest(double[] xi) {
|
98
|
+
HypothesisTest daigo = new JBTest();
|
99
|
+
double x = daigo.calcTestStatistic(xi);
|
100
|
+
|
101
|
+
return daigo.test(x, HypothesisTest.P);
|
102
|
+
}
|
97
103
|
/*********************************/
|
98
104
|
/* interface define */
|
99
105
|
/*********************************/
|
@@ -143,6 +149,7 @@ public class Normality {
|
|
143
149
|
return plotImpl.createPlot(dname, xi);
|
144
150
|
}
|
145
151
|
public static class QQPlot implements CreatePlot {
|
152
|
+
private double xbar = 0.0;
|
146
153
|
private double[][] createData(double[] xi) {
|
147
154
|
DescriptiveStatistics stat = new DescriptiveStatistics();
|
148
155
|
NormalDistribution ndist = new NormalDistribution(0, 1);
|
@@ -153,15 +160,18 @@ public class Normality {
|
|
153
160
|
double sum = stat.getSum();
|
154
161
|
double[][] data = new double[n][2];
|
155
162
|
double p = 0.0;
|
163
|
+
double sumx = 0.0;
|
156
164
|
|
157
165
|
for (int i = 0; i < n; i++) {
|
158
166
|
p += xi[i] / sum;
|
159
167
|
double x =
|
160
168
|
ndist.inverseCumulativeProbability(p * (i + 1.0) / (n + 1.0));
|
161
169
|
|
170
|
+
sumx += x;
|
162
171
|
data[i][0] = x;
|
163
172
|
data[i][1] = xi[i];
|
164
173
|
}
|
174
|
+
xbar = sumx / n;
|
165
175
|
return data;
|
166
176
|
}
|
167
177
|
public XYPlot createPlot(String dname, double[] xi) {
|
@@ -218,16 +228,35 @@ public class Normality {
|
|
218
228
|
XYSeries cu = new XYSeries("累積");
|
219
229
|
|
220
230
|
simpleReg.addData(data);
|
221
|
-
double a = simpleReg.getSlope();
|
222
|
-
double b = simpleReg.getIntercept();
|
223
|
-
|
224
231
|
for (double x = ChartPlot.CLASS_MIN; x < ChartPlot.CLASS_MAX; x += 0.01) {
|
225
|
-
|
226
|
-
|
227
|
-
cu.add(x, y);
|
232
|
+
cu.add(x, simpleReg.predict(x));
|
228
233
|
}
|
234
|
+
// 信頼区間
|
235
|
+
long n = simpleReg.getN();
|
236
|
+
double ve = simpleReg.getMeanSquareError();
|
237
|
+
double sxx = simpleReg.getXSumSquares();
|
238
|
+
TDistribution tDist = new TDistribution(n - 2);
|
239
|
+
double t = tDist.inverseCumulativeProbability(0.975);
|
240
|
+
XYSeries p05m = new XYSeries("P05-");
|
241
|
+
XYSeries p05p = new XYSeries("P05+");
|
242
|
+
|
243
|
+
for(int i = 0; i < n; i++) {
|
244
|
+
double x = data[i][0];
|
245
|
+
double residual = (x - xbar);
|
246
|
+
double interval = t * Math.sqrt(
|
247
|
+
(1 + 1.0 / n + residual * residual / sxx) * ve
|
248
|
+
);
|
249
|
+
double y01 = simpleReg.predict(x) - interval;
|
250
|
+
double y02 = simpleReg.predict(x) + interval;
|
251
|
+
|
252
|
+
p05m.add(x, y01);
|
253
|
+
p05p.add(x, y02);
|
254
|
+
}
|
255
|
+
|
229
256
|
XYSeriesCollection series = new XYSeriesCollection();
|
230
257
|
series.addSeries(cu);
|
258
|
+
series.addSeries(p05m);
|
259
|
+
series.addSeries(p05p);
|
231
260
|
return series;
|
232
261
|
}
|
233
262
|
}
|
@@ -644,5 +673,27 @@ public class Normality {
|
|
644
673
|
return a2 * (1.0 + 0.75 / n + 2.25 / (n * n));
|
645
674
|
}
|
646
675
|
}
|
676
|
+
// Jarque-Bera検定
|
677
|
+
private static class JBTest implements HypothesisTest {
|
678
|
+
private HypothesisTest skewness = null;
|
679
|
+
private HypothesisTest kurtosis = null;
|
680
|
+
public JBTest() {
|
681
|
+
skewness = new SkewnessTest();
|
682
|
+
kurtosis = new KurtosisTest();
|
683
|
+
}
|
684
|
+
public double calcTestStatistic(double[] xi) {
|
685
|
+
int n = xi.length;
|
686
|
+
double x1 = skewness.calcTestStatistic(xi);
|
687
|
+
double x2 = kurtosis.calcTestStatistic(xi);
|
688
|
+
|
689
|
+
return n / 6.0 * (x1 *x1 + x2 * x2 / 4.0);
|
690
|
+
}
|
691
|
+
public boolean test(double statistic, double a) {
|
692
|
+
ChiSquaredDistribution chi2Dist = new ChiSquaredDistribution(2);
|
693
|
+
double p = chi2Dist.cumulativeProbability(statistic);
|
694
|
+
|
695
|
+
return (p < a) ? true : false;
|
696
|
+
}
|
697
|
+
}
|
647
698
|
}
|
648
699
|
|
data/lib/num4normality.rb
CHANGED
@@ -145,6 +145,18 @@ module Num4NormalityLib
|
|
145
145
|
def adtest(xi)
|
146
146
|
Normality.adTest(xi.to_java(Java::double))
|
147
147
|
end
|
148
|
+
# Jarque-Bera検定
|
149
|
+
#
|
150
|
+
# @overload jbtest(xi)
|
151
|
+
# @param [Array] xi データ(double[])
|
152
|
+
# @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
|
153
|
+
# @example
|
154
|
+
# xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
|
155
|
+
# Num4NormalityLib.jbtest(xi)
|
156
|
+
# => false
|
157
|
+
def jbtest(xi)
|
158
|
+
Normality.jbTest(xi.to_java(Java::double))
|
159
|
+
end
|
148
160
|
end
|
149
161
|
end
|
150
162
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: num4normality
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- siranovel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05
|
11
|
+
date: 2024-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|