num4normality 0.0.1-java → 0.0.2-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 +4 -4
- data/CHANGELOG.md +6 -0
- data/ext/num4normality/Normality.java +66 -47
- 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: b89f71cba5d40084df7feae50644d8df12b9501f486f9bdd3a534d2dce73a4df
|
4
|
+
data.tar.gz: fc2f02a141dd85f32834cae5c44607fd601b5b1e13902bda51cbbd4f4bddc98a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7334b33fa778de4dd19980df1f5bf5933ef0c35e9b068775ecec0a091613007c9b25b4952ad5cb7714be3950f9a4bf640d7916a488424b65afef75857232b04
|
7
|
+
data.tar.gz: d9924ebad4a9a5315453fadc8f3ba8eec7583ae2d02356294a5b53bf9acbbbf4d26fbad3f0b651f216c862da1763fc2339b00fd994061c2a0b3fd7433794dec7
|
data/CHANGELOG.md
CHANGED
@@ -21,6 +21,7 @@ import java.io.IOException;
|
|
21
21
|
|
22
22
|
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
|
23
23
|
import org.apache.commons.math3.distribution.NormalDistribution;
|
24
|
+
import org.apache.commons.math3.stat.regression.SimpleRegression;
|
24
25
|
import java.util.Arrays;
|
25
26
|
import java.text.DecimalFormat;
|
26
27
|
public class Normality {
|
@@ -70,17 +71,33 @@ public class Normality {
|
|
70
71
|
// Q-Qplot
|
71
72
|
private static class QQPlot implements ChartPlot {
|
72
73
|
private DescriptiveStatistics stat = null;
|
73
|
-
private
|
74
|
-
private double sd = 0.0;
|
74
|
+
private NormalDistribution ndist = null;
|
75
75
|
public QQPlot() {
|
76
76
|
stat = new DescriptiveStatistics();
|
77
|
+
ndist = new NormalDistribution(0, 1);
|
77
78
|
}
|
78
|
-
|
79
|
+
private double[][] createData(double[] xi) {
|
80
|
+
int n = xi.length;
|
81
|
+
Arrays.sort(xi);
|
79
82
|
Arrays.stream(xi).forEach(stat::addValue);
|
80
|
-
|
81
|
-
|
83
|
+
double sum = stat.getSum();
|
84
|
+
double[][] data = new double[n][2];
|
85
|
+
double p = 0.0;
|
82
86
|
|
83
|
-
|
87
|
+
for (int i = 0; i < n; i++) {
|
88
|
+
p += xi[i] / sum;
|
89
|
+
double x =
|
90
|
+
ndist.inverseCumulativeProbability(p * (i + 1.0) / (n + 1.0));
|
91
|
+
|
92
|
+
data[i][0] = x;
|
93
|
+
data[i][1] = xi[i];
|
94
|
+
}
|
95
|
+
return data;
|
96
|
+
}
|
97
|
+
public JFreeChart createChart(String dname, double[] xi) {
|
98
|
+
double[][] data = createData(xi);
|
99
|
+
|
100
|
+
XYPlot plot = createPlot(dname, data);
|
84
101
|
/*--- 横軸 ---*/
|
85
102
|
NumberAxis domainAxis = new NumberAxis("標準正規分布");
|
86
103
|
|
@@ -93,7 +110,7 @@ public class Normality {
|
|
93
110
|
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
94
111
|
return new JFreeChart("正規性の検定", plot);
|
95
112
|
}
|
96
|
-
private XYPlot createPlot(String dname, double[]
|
113
|
+
private XYPlot createPlot(String dname, double[][] data) {
|
97
114
|
XYItemRenderer renderer0 = new XYLineAndShapeRenderer(false, true);
|
98
115
|
XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
|
99
116
|
XYToolTipGenerator toolTipGenerator = new StandardXYToolTipGenerator();
|
@@ -114,40 +131,40 @@ public class Normality {
|
|
114
131
|
plot.setRangeAxis(valueAxis0);
|
115
132
|
|
116
133
|
plot.setRenderer(0, renderer0);
|
117
|
-
plot.setDataset(0, createDataset0(dname,
|
134
|
+
plot.setDataset(0, createDataset0(dname, data));
|
118
135
|
|
119
136
|
plot.setRenderer(1, renderer1);
|
120
|
-
plot.setDataset(1, createDataset1());
|
137
|
+
plot.setDataset(1, createDataset1(data));
|
121
138
|
|
122
139
|
return plot;
|
123
140
|
}
|
124
|
-
private XYSeriesCollection createDataset0(String dname, double[]
|
125
|
-
|
126
|
-
XYSeries series = new XYSeries(dname);
|
141
|
+
private XYSeriesCollection createDataset0(String dname, double[][] data) {
|
142
|
+
XYSeries cu = new XYSeries(dname);
|
127
143
|
|
128
|
-
for (int i = 0; i <
|
129
|
-
|
130
|
-
|
131
|
-
series.add(x, xi[i]);
|
144
|
+
for (int i = 0; i < data.length; i++) {
|
145
|
+
cu.add(data[i][0], data[i][1]);
|
132
146
|
}
|
133
|
-
XYSeriesCollection
|
147
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
134
148
|
|
135
|
-
|
136
|
-
return
|
149
|
+
series.addSeries(cu);
|
150
|
+
return series;
|
137
151
|
}
|
138
|
-
private XYSeriesCollection createDataset1() {
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
152
|
+
private XYSeriesCollection createDataset1(double[][] data) {
|
153
|
+
SimpleRegression simpleReg = new SimpleRegression(true);
|
154
|
+
XYSeries cu = new XYSeries("累積");
|
155
|
+
|
156
|
+
simpleReg.addData(data);
|
157
|
+
double a = simpleReg.getSlope();
|
158
|
+
double b = simpleReg.getIntercept();
|
159
|
+
|
160
|
+
for (double x = -4.0; x < 4.0; x += 0.01) {
|
161
|
+
double y = a * x + b;
|
162
|
+
|
163
|
+
cu.add(x, y);
|
146
164
|
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
return data;
|
165
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
166
|
+
series.addSeries(cu);
|
167
|
+
return series;
|
151
168
|
}
|
152
169
|
}
|
153
170
|
// コルモゴルフ・スミルノフ検定
|
@@ -203,39 +220,41 @@ public class Normality {
|
|
203
220
|
return plot;
|
204
221
|
}
|
205
222
|
private XYSeriesCollection createDataset0(String dname, double[] xi) {
|
223
|
+
int n = xi.length;
|
206
224
|
Arrays.sort(xi);
|
207
225
|
DescriptiveStatistics stat = new DescriptiveStatistics();
|
208
226
|
Arrays.stream(xi).forEach(stat::addValue);
|
209
227
|
double m = stat.getMean(); // 平均
|
210
228
|
double sd = stat.getStandardDeviation();// 標準偏差
|
211
|
-
double den = sd / Math.sqrt(xi.length);
|
212
229
|
double sum = stat.getSum();
|
213
230
|
double p = 0.0;
|
214
231
|
|
215
|
-
XYSeries
|
216
|
-
for (int
|
217
|
-
double x = (xi[
|
232
|
+
XYSeries cu = new XYSeries(dname);
|
233
|
+
for (int i = 0; i < xi.length; i++) {
|
234
|
+
double x = (xi[i] - m) / sd;
|
235
|
+
p += xi[i] / sum;
|
236
|
+
double y =
|
237
|
+
ndist.inverseCumulativeProbability((i + 1.0) / (n + 1.0));
|
218
238
|
|
219
|
-
|
220
|
-
series.add(x, p);
|
239
|
+
cu.add(Math.min(x, y), p);
|
221
240
|
}
|
222
|
-
XYSeriesCollection
|
241
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
223
242
|
|
224
|
-
|
225
|
-
return
|
243
|
+
series.addSeries(cu);
|
244
|
+
return series;
|
226
245
|
}
|
227
246
|
private XYSeriesCollection createDataset1() {
|
228
|
-
XYSeries
|
247
|
+
XYSeries cu = new XYSeries("累積");
|
229
248
|
|
230
249
|
for (double x = -4; x < 4; x += 0.01) {
|
231
250
|
double y = ndist.cumulativeProbability(x);
|
232
251
|
|
233
|
-
|
252
|
+
cu.add(x, y);
|
234
253
|
}
|
235
|
-
XYSeriesCollection
|
254
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
236
255
|
|
237
|
-
|
238
|
-
return
|
256
|
+
series.addSeries(cu);
|
257
|
+
return series;
|
239
258
|
}
|
240
259
|
}
|
241
260
|
// タコスディーノ検定(歪度)
|
@@ -254,7 +273,7 @@ public class Normality {
|
|
254
273
|
}
|
255
274
|
|
256
275
|
public boolean test(double statistic, double a) {
|
257
|
-
double ua_2 = ndist.inverseCumulativeProbability(1.0 - a);
|
276
|
+
double ua_2 = ndist.inverseCumulativeProbability(1.0 - a / 2.0);
|
258
277
|
|
259
278
|
return (Math.abs(statistic) > cnvb2tob2p(ua_2))
|
260
279
|
? true : false;
|
@@ -285,7 +304,7 @@ public class Normality {
|
|
285
304
|
}
|
286
305
|
public boolean test(double statistic, double a) {
|
287
306
|
boolean ret = false;
|
288
|
-
double ua_2 = ndist.inverseCumulativeProbability(1.0 - a);
|
307
|
+
double ua_2 = ndist.inverseCumulativeProbability(1.0 - a / 2.0);
|
289
308
|
double b2p = cnvb2tob2p(statistic);
|
290
309
|
|
291
310
|
double r_val = ua_2 + Math.sqrt(6.0 / n) * (ua_2 * ua_2 - 1.0);
|
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.2
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- siranovel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|