num4normality 0.0.6-java → 0.0.7-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 +11 -0
- data/ext/num4normality/Normality.java +183 -39
- data/lib/num4normality.rb +42 -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: d445077e57757b20233ab78457bdd1b11a3b1851a8341ab7e28d778ef180d68d
|
4
|
+
data.tar.gz: 1e7b9c47b46bffbc4ae6dafa164b6f2b6d3c0707b6ad4478267740248b098498
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bb019e46c2b0deae1b6f2e2e5776926621620fd787903a3fec119bece63b04e64b979f3c5b3de08883a487fb6ec503d49f43c7acc229b1ab33134c24e5d1179
|
7
|
+
data.tar.gz: 8f60222acffc237d2961b909209182cdf9ef2e7fecad9248553be02853c9690cfeefef425f49a4ad5bdff5a0e733d3bd9a434b74b09ef934d94f2ac3f851345b
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,7 @@ import org.jfree.data.xy.XYSeriesCollection;
|
|
5
5
|
import org.jfree.data.xy.XYSeries;
|
6
6
|
|
7
7
|
import org.jfree.chart.plot.CombinedDomainXYPlot;
|
8
|
+
import org.jfree.chart.plot.CombinedRangeXYPlot;
|
8
9
|
import org.jfree.chart.plot.XYPlot;
|
9
10
|
import org.jfree.chart.axis.NumberAxis;
|
10
11
|
import org.jfree.chart.axis.ValueAxis;
|
@@ -44,10 +45,23 @@ public class Normality {
|
|
44
45
|
}
|
45
46
|
public static void qqksplot(String dname, double[] xi) {
|
46
47
|
ChartPlot plot = new QQKSChartPlot();
|
47
|
-
JFreeChart chart = plot.createChart("Q-Q and
|
48
|
+
JFreeChart chart = plot.createChart("Q-Q and コルモゴルフ・スミルノフ", dname, xi);
|
48
49
|
|
49
50
|
plot.writeJPEG("qqksplot.jpeg", chart, 1000, 800);
|
50
51
|
}
|
52
|
+
public static void ppplot(String dname, double[] xi) {
|
53
|
+
ChartPlot plot = new PPChartPlot();
|
54
|
+
JFreeChart chart = plot.createChart("正規P-Pプロット", dname, xi);
|
55
|
+
|
56
|
+
plot.writeJPEG("ppplot.jpeg", chart, 800, 500);
|
57
|
+
}
|
58
|
+
public static void ppksplot(String dname, double[] xi) {
|
59
|
+
ChartPlot plot = new PPKSChartPlot();
|
60
|
+
JFreeChart chart = plot.createChart("P-P and コルモゴルフ・スミルノフ", dname, xi);
|
61
|
+
|
62
|
+
plot.writeJPEG("ppksplot.jpeg", chart, 800, 500);
|
63
|
+
|
64
|
+
}
|
51
65
|
public static boolean kstest(double[] xi) {
|
52
66
|
KSTest ks = new KSTest();
|
53
67
|
|
@@ -104,14 +118,6 @@ public class Normality {
|
|
104
118
|
private static class QQChartPlot implements ChartPlot {
|
105
119
|
public JFreeChart createChart(String title, String dname, double[] xi) {
|
106
120
|
XYPlot plot = createPlot(dname, xi);
|
107
|
-
/*--- 横軸 ---*/
|
108
|
-
NumberAxis domainAxis = new NumberAxis("期待値");
|
109
|
-
|
110
|
-
plot.setDomainAxis(domainAxis);
|
111
|
-
domainAxis.setLowerMargin(0.03);
|
112
|
-
domainAxis.setUpperMargin(0.03);
|
113
|
-
domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
|
114
|
-
domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
|
115
121
|
|
116
122
|
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
117
123
|
return new JFreeChart(title, plot);
|
@@ -122,13 +128,10 @@ public class Normality {
|
|
122
128
|
return plotImpl.createPlot(dname, xi);
|
123
129
|
}
|
124
130
|
public static class QQPlot implements CreatePlot {
|
125
|
-
private DescriptiveStatistics stat = null;
|
126
|
-
private NormalDistribution ndist = null;
|
127
|
-
public QQPlot() {
|
128
|
-
stat = new DescriptiveStatistics();
|
129
|
-
ndist = new NormalDistribution(0, 1);
|
130
|
-
}
|
131
131
|
private double[][] createData(double[] xi) {
|
132
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
133
|
+
NormalDistribution ndist = new NormalDistribution(0, 1);
|
134
|
+
|
132
135
|
int n = xi.length;
|
133
136
|
Arrays.sort(xi);
|
134
137
|
Arrays.stream(xi).forEach(stat::addValue);
|
@@ -163,6 +166,15 @@ public class Normality {
|
|
163
166
|
plot.mapDatasetToRangeAxis(1,0);
|
164
167
|
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
|
165
168
|
|
169
|
+
/*--- 横軸 ---*/
|
170
|
+
NumberAxis domainAxis = new NumberAxis("期待値");
|
171
|
+
|
172
|
+
plot.setDomainAxis(domainAxis);
|
173
|
+
domainAxis.setLowerMargin(0.03);
|
174
|
+
domainAxis.setUpperMargin(0.03);
|
175
|
+
domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
|
176
|
+
domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
|
177
|
+
|
166
178
|
/*--- 縦軸 ---*/
|
167
179
|
NumberAxis valueAxis0 = new NumberAxis("観測値");
|
168
180
|
plot.setRangeAxis(valueAxis0);
|
@@ -208,15 +220,7 @@ public class Normality {
|
|
208
220
|
// コルモゴルフ・スミルノフ検定
|
209
221
|
private static class KSChartPlot implements ChartPlot {
|
210
222
|
public JFreeChart createChart(String title, String dname, double[] xi) {
|
211
|
-
/*--- 横軸 ---*/
|
212
|
-
NumberAxis domainAxis = new NumberAxis("期待値");
|
213
223
|
XYPlot plot = createPlot(dname, xi);
|
214
|
-
|
215
|
-
plot.setDomainAxis(domainAxis);
|
216
|
-
domainAxis.setLowerMargin(0.03);
|
217
|
-
domainAxis.setUpperMargin(0.03);
|
218
|
-
domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
|
219
|
-
domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
|
220
224
|
|
221
225
|
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
222
226
|
return new JFreeChart(title, plot);
|
@@ -227,11 +231,9 @@ public class Normality {
|
|
227
231
|
return plotImpl.createPlot(dname, xi);
|
228
232
|
}
|
229
233
|
public static class KSPlot implements CreatePlot {
|
230
|
-
private DescriptiveStatistics stat = null;
|
231
|
-
public KSPlot() {
|
232
|
-
stat = new DescriptiveStatistics();
|
233
|
-
}
|
234
234
|
private double[][] createData(double[] xi) {
|
235
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
236
|
+
|
235
237
|
int n = xi.length;
|
236
238
|
Arrays.sort(xi);
|
237
239
|
Arrays.stream(xi).forEach(stat::addValue);
|
@@ -264,6 +266,15 @@ public class Normality {
|
|
264
266
|
plot.mapDatasetToRangeAxis(1,0);
|
265
267
|
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
|
266
268
|
|
269
|
+
/*--- 横軸 ---*/
|
270
|
+
NumberAxis domainAxis = new NumberAxis("期待値");
|
271
|
+
plot.setDomainAxis(domainAxis);
|
272
|
+
|
273
|
+
domainAxis.setLowerMargin(0.03);
|
274
|
+
domainAxis.setUpperMargin(0.03);
|
275
|
+
domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
|
276
|
+
domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
|
277
|
+
|
267
278
|
/*--- 縦軸 ---*/
|
268
279
|
NumberAxis valueAxis0 = new NumberAxis("確率");
|
269
280
|
plot.setRangeAxis(valueAxis0);
|
@@ -307,36 +318,169 @@ public class Normality {
|
|
307
318
|
}
|
308
319
|
}
|
309
320
|
}
|
310
|
-
// Q-
|
321
|
+
// Q-Q and KSplot
|
311
322
|
private static class QQKSChartPlot implements ChartPlot {
|
312
|
-
private CreatePlot plot0 =
|
313
|
-
private CreatePlot plot1 =
|
314
|
-
public QQKSChartPlot() {
|
315
|
-
plot0 = new QQChartPlot.QQPlot();
|
316
|
-
plot1 = new KSChartPlot.KSPlot();
|
317
|
-
}
|
323
|
+
private CreatePlot plot0 = new QQChartPlot.QQPlot();
|
324
|
+
private CreatePlot plot1 = new KSChartPlot.KSPlot();
|
318
325
|
public JFreeChart createChart(String title, String dname, double[] xi) {
|
319
326
|
XYPlot plot = createPlot(dname, xi);
|
320
327
|
|
328
|
+
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
329
|
+
return new JFreeChart(title, plot);
|
330
|
+
}
|
331
|
+
private XYPlot createPlot(String dname, double[] xi) {
|
321
332
|
/*--- 横軸 ---*/
|
322
|
-
NumberAxis domainAxis =
|
333
|
+
NumberAxis domainAxis = new NumberAxis("期待値");
|
334
|
+
|
335
|
+
CombinedDomainXYPlot plot = new CombinedDomainXYPlot(domainAxis);
|
323
336
|
domainAxis.setLabel("期待値");
|
324
337
|
domainAxis.setLowerMargin(0.03);
|
325
338
|
domainAxis.setUpperMargin(0.03);
|
326
339
|
domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
|
327
340
|
domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
|
328
341
|
|
342
|
+
plot.add(plot0.createPlot(dname, xi), 1);
|
343
|
+
plot.add(plot1.createPlot(dname, xi), 1);
|
344
|
+
return plot;
|
345
|
+
}
|
346
|
+
|
347
|
+
}
|
348
|
+
// P-Pplot
|
349
|
+
private static class PPChartPlot implements ChartPlot {
|
350
|
+
public JFreeChart createChart(String title, String dname, double[] xi) {
|
351
|
+
XYPlot plot = createPlot(dname, xi);
|
352
|
+
|
329
353
|
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
330
354
|
return new JFreeChart(title, plot);
|
331
355
|
}
|
332
356
|
private XYPlot createPlot(String dname, double[] xi) {
|
333
|
-
|
357
|
+
CreatePlot plotImpl = new PPPlot();
|
334
358
|
|
335
|
-
|
336
|
-
plot.add(plot1.createPlot(dname, xi), 1);
|
337
|
-
return plot;
|
359
|
+
return plotImpl.createPlot(dname, xi);
|
338
360
|
}
|
361
|
+
public static class PPPlot implements CreatePlot {
|
362
|
+
private double[][] createData(double[] xi) {
|
363
|
+
DescriptiveStatistics stat = new DescriptiveStatistics();
|
364
|
+
NormalDistribution ndist = new NormalDistribution(0, 1);
|
339
365
|
|
366
|
+
int n = xi.length;
|
367
|
+
Arrays.sort(xi);
|
368
|
+
Arrays.stream(xi).forEach(stat::addValue);
|
369
|
+
double m = stat.getMean(); // 平均
|
370
|
+
double sd = stat.getStandardDeviation();// 標準偏差
|
371
|
+
double sum = stat.getSum();
|
372
|
+
double[][] data = new double[n][2];
|
373
|
+
double p = 0.0;
|
374
|
+
|
375
|
+
for (int i = 0; i < n; i++) {
|
376
|
+
p += xi[i] / sum;
|
377
|
+
double x = (xi[i] - m) / sd;
|
378
|
+
|
379
|
+
ndist.cumulativeProbability(x);
|
380
|
+
data[i][0] = ndist.cumulativeProbability(x);
|
381
|
+
data[i][1] = p;
|
382
|
+
}
|
383
|
+
return data;
|
384
|
+
}
|
385
|
+
public XYPlot createPlot(String dname, double[] xi) {
|
386
|
+
double[][] data = createData(xi);
|
387
|
+
XYItemRenderer renderer0 = new XYLineAndShapeRenderer(false, true);
|
388
|
+
XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
|
389
|
+
XYToolTipGenerator toolTipGenerator = new StandardXYToolTipGenerator();
|
390
|
+
|
391
|
+
renderer0.setDefaultToolTipGenerator(toolTipGenerator);
|
392
|
+
renderer0.setURLGenerator(null);
|
393
|
+
renderer1.setDefaultToolTipGenerator(toolTipGenerator);
|
394
|
+
renderer1.setURLGenerator(null);
|
395
|
+
|
396
|
+
XYPlot plot = new XYPlot();
|
397
|
+
plot.setOrientation(PlotOrientation.VERTICAL);
|
398
|
+
plot.mapDatasetToRangeAxis(0,0);
|
399
|
+
plot.mapDatasetToRangeAxis(1,0);
|
400
|
+
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
|
401
|
+
|
402
|
+
/*--- 横軸 ---*/
|
403
|
+
NumberAxis domainAxis = new NumberAxis("観測累積確率");
|
404
|
+
|
405
|
+
plot.setDomainAxis(0, domainAxis);
|
406
|
+
domainAxis.setLowerMargin(0.03);
|
407
|
+
domainAxis.setUpperMargin(0.03);
|
408
|
+
domainAxis.setLowerBound(0.0);
|
409
|
+
domainAxis.setUpperBound(1.0);
|
410
|
+
domainAxis.setTickUnit(new NumberTickUnit(0.1));
|
411
|
+
domainAxis.setNumberFormatOverride(new DecimalFormat("0.0#"));
|
412
|
+
/*--- 縦軸 ---*/
|
413
|
+
NumberAxis valueAxis0 = new NumberAxis("予測累積確率");
|
414
|
+
plot.setRangeAxis(valueAxis0);
|
415
|
+
valueAxis0.setLowerBound(0);
|
416
|
+
valueAxis0.setUpperBound(1);
|
417
|
+
valueAxis0.setTickUnit(new NumberTickUnit(0.1));
|
418
|
+
valueAxis0.setNumberFormatOverride(new DecimalFormat("0.0#"));
|
419
|
+
|
420
|
+
plot.setRenderer(0, renderer0);
|
421
|
+
plot.setDataset(0, createDataset0(dname, data));
|
422
|
+
|
423
|
+
plot.setRenderer(1, renderer1);
|
424
|
+
plot.setDataset(1, createDataset1(data));
|
425
|
+
return plot;
|
426
|
+
}
|
427
|
+
private XYSeriesCollection createDataset0(String dname, double[][] data) {
|
428
|
+
XYSeries cu = new XYSeries(dname);
|
429
|
+
|
430
|
+
for (int i = 0; i < data.length; i++) {
|
431
|
+
cu.add(data[i][0], data[i][1]);
|
432
|
+
}
|
433
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
434
|
+
|
435
|
+
series.addSeries(cu);
|
436
|
+
return series;
|
437
|
+
}
|
438
|
+
private XYSeriesCollection createDataset1(double[][] data) {
|
439
|
+
SimpleRegression simpleReg = new SimpleRegression(true);
|
440
|
+
XYSeries cu = new XYSeries("累積");
|
441
|
+
|
442
|
+
simpleReg.addData(data);
|
443
|
+
double a = simpleReg.getSlope();
|
444
|
+
double b = simpleReg.getIntercept();
|
445
|
+
|
446
|
+
for (double x = ChartPlot.CLASS_MIN; x < ChartPlot.CLASS_MAX; x += 0.01) {
|
447
|
+
double y = a * x + b;
|
448
|
+
|
449
|
+
cu.add(x, y);
|
450
|
+
}
|
451
|
+
XYSeriesCollection series = new XYSeriesCollection();
|
452
|
+
series.addSeries(cu);
|
453
|
+
return series;
|
454
|
+
}
|
455
|
+
|
456
|
+
}
|
457
|
+
}
|
458
|
+
// P-P and KSplot
|
459
|
+
private static class PPKSChartPlot implements ChartPlot {
|
460
|
+
private CreatePlot plot0 = new PPChartPlot.PPPlot();
|
461
|
+
private CreatePlot plot1 = new KSChartPlot.KSPlot();
|
462
|
+
public JFreeChart createChart(String title, String dname, double[] xi) {
|
463
|
+
XYPlot plot = createPlot(dname, xi);
|
464
|
+
|
465
|
+
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
466
|
+
return new JFreeChart(title, plot);
|
467
|
+
}
|
468
|
+
private XYPlot createPlot(String dname, double[] xi) {
|
469
|
+
/*--- 縦軸 ---*/
|
470
|
+
NumberAxis rangeAxis = new NumberAxis("予測累積確率");
|
471
|
+
CombinedRangeXYPlot plot = new CombinedRangeXYPlot(rangeAxis);
|
472
|
+
rangeAxis.setLowerMargin(0.03);
|
473
|
+
rangeAxis.setUpperMargin(0.03);
|
474
|
+
rangeAxis.setLowerBound(0.0);
|
475
|
+
rangeAxis.setUpperBound(1.0);
|
476
|
+
rangeAxis.setTickUnit(new NumberTickUnit(0.1));
|
477
|
+
rangeAxis.setNumberFormatOverride(new DecimalFormat("0.0#"));
|
478
|
+
|
479
|
+
plot.add(plot0.createPlot(dname, xi), 2);
|
480
|
+
plot.add(plot1.createPlot(dname, xi), 3);
|
481
|
+
|
482
|
+
return plot;
|
483
|
+
}
|
340
484
|
}
|
341
485
|
// KS検定
|
342
486
|
private static class KSTest {
|
data/lib/num4normality.rb
CHANGED
@@ -39,9 +39,51 @@ module Num4NormalityLib
|
|
39
39
|
def ksplot(dname, xi)
|
40
40
|
Normality.ksplot(dname, xi.to_java(Java::double))
|
41
41
|
end
|
42
|
+
# Q-Q and コルモゴルフ・スミルノフ検定プロット(1標本)
|
43
|
+
#
|
44
|
+
# @overload qqksplot(dname, xi)
|
45
|
+
# @param [String] dname データ名
|
46
|
+
# @param [Array] xi データ(double[])
|
47
|
+
# @return [void] qqksplot.jpegファイルを出力
|
48
|
+
# @example
|
49
|
+
# xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
|
50
|
+
# Num4NormalityLib.qqksplot("LDH", xi)
|
51
|
+
# => qqksplot.jpeg
|
52
|
+
# @note
|
53
|
+
# グラフは、jfreechartを使用
|
42
54
|
def qqksplot(dname, xi)
|
43
55
|
Normality.qqksplot(dname, xi.to_java(Java::double))
|
44
56
|
end
|
57
|
+
# P-Pプロット
|
58
|
+
#
|
59
|
+
# @overload ppplot(dname, xi)
|
60
|
+
# @param [String] dname データ名
|
61
|
+
# @param [Array] xi データ(double[])
|
62
|
+
# @return [void] ppplot.jpegファイルを出力
|
63
|
+
# @example
|
64
|
+
# xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
|
65
|
+
# Num4NormalityLib.ppplot("LDH", xi)
|
66
|
+
# => ppplot.jpeg
|
67
|
+
# @note
|
68
|
+
# グラフは、jfreechartを使用
|
69
|
+
def ppplot(dname, xi)
|
70
|
+
Normality.ppplot(dname, xi.to_java(Java::double))
|
71
|
+
end
|
72
|
+
# P-P and コルモゴルフ・スミルノフ検定プロット(1標本)
|
73
|
+
#
|
74
|
+
# @overload ppksplot(dname, xi)
|
75
|
+
# @param [String] dname データ名
|
76
|
+
# @param [Array] xi データ(double[])
|
77
|
+
# @return [void] ppplot.jpegファイルを出力
|
78
|
+
# @example
|
79
|
+
# xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
|
80
|
+
# Num4NormalityLib.ppksplot("LDH", xi)
|
81
|
+
# => ppksplot.jpeg
|
82
|
+
# @note
|
83
|
+
# グラフは、jfreechartを使用
|
84
|
+
def ppksplot(dname, xi)
|
85
|
+
Normality.ppksplot(dname, xi.to_java(Java::double))
|
86
|
+
end
|
45
87
|
# コルモゴルフ・スミルノフ検定(1標本)
|
46
88
|
#
|
47
89
|
# @overload kstest(xi)
|
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.7
|
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-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|