num4normality 0.0.1-java → 0.0.2-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 +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
|