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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6be725c6a9b20d5c4ca46f2543c96e293be67c9bcf2638816cb29331eadb8180
4
- data.tar.gz: d18160bcab51e0760a2e4b533be709235f06d18b2150bb05cc4a9ef66a96179f
3
+ metadata.gz: b89f71cba5d40084df7feae50644d8df12b9501f486f9bdd3a534d2dce73a4df
4
+ data.tar.gz: fc2f02a141dd85f32834cae5c44607fd601b5b1e13902bda51cbbd4f4bddc98a
5
5
  SHA512:
6
- metadata.gz: 1e9c798eaa8043b712da5940f361c8adffa82f4436cccc34843286baad3109d481354fea2a8f6f914f4f8205f2ff0393c31f47cdde589cdb408506257ba06491
7
- data.tar.gz: 9f257c671f62f84c224a03641d802d7f275a6d042c80d336f4a666283def61b53a169527c6ec854676ff3344da8e60bcb2a0e6716b8afa8e31d700172d91fed2
6
+ metadata.gz: c7334b33fa778de4dd19980df1f5bf5933ef0c35e9b068775ecec0a091613007c9b25b4952ad5cb7714be3950f9a4bf640d7916a488424b65afef75857232b04
7
+ data.tar.gz: d9924ebad4a9a5315453fadc8f3ba8eec7583ae2d02356294a5b53bf9acbbbf4d26fbad3f0b651f216c862da1763fc2339b00fd994061c2a0b3fd7433794dec7
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.0.2] - 2023-12-12
6
+
7
+ ### change
8
+ - chg Q-QPlot and kstest
9
+ - chg from one-side test to two side test.
10
+
5
11
  ## [0.0.1] - 2023-12-05
6
12
 
7
13
  ### Fixed
@@ -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 double m = 0.0;
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
- public JFreeChart createChart(String dname, double[] xi) {
79
+ private double[][] createData(double[] xi) {
80
+ int n = xi.length;
81
+ Arrays.sort(xi);
79
82
  Arrays.stream(xi).forEach(stat::addValue);
80
- m = stat.getMean(); // 平均
81
- sd = stat.getStandardDeviation();// 標準偏差
83
+ double sum = stat.getSum();
84
+ double[][] data = new double[n][2];
85
+ double p = 0.0;
82
86
 
83
- XYPlot plot = createPlot(dname, xi);
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[] xi) {
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, xi));
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[] xi) {
125
- double den = sd / Math.sqrt(xi.length);
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 < xi.length; i++) {
129
- double x = (xi[i] - m) / den;
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 data = new XYSeriesCollection();
147
+ XYSeriesCollection series = new XYSeriesCollection();
134
148
 
135
- data.addSeries(series);
136
- return data;
149
+ series.addSeries(cu);
150
+ return series;
137
151
  }
138
- private XYSeriesCollection createDataset1() {
139
- XYSeries series = new XYSeries("累積");
140
- NormalDistribution ndist = new NormalDistribution(0, 1);
141
-
142
- for (double p = 0.001; p < 1.0; p += 0.01) {
143
- double x = ndist.inverseCumulativeProbability(p);
144
-
145
- series.add(x, x * sd + m);
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
- XYSeriesCollection data = new XYSeriesCollection();
149
- data.addSeries(series);
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 series = new XYSeries(dname);
216
- for (int n = 0; n < xi.length; n++) {
217
- double x = (xi[n] - m) / den;
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
- p += xi[n] / sum;
220
- series.add(x, p);
239
+ cu.add(Math.min(x, y), p);
221
240
  }
222
- XYSeriesCollection data = new XYSeriesCollection();
241
+ XYSeriesCollection series = new XYSeriesCollection();
223
242
 
224
- data.addSeries(series);
225
- return data;
243
+ series.addSeries(cu);
244
+ return series;
226
245
  }
227
246
  private XYSeriesCollection createDataset1() {
228
- XYSeries series = new 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
- series.add(x, y);
252
+ cu.add(x, y);
234
253
  }
235
- XYSeriesCollection data = new XYSeriesCollection();
254
+ XYSeriesCollection series = new XYSeriesCollection();
236
255
 
237
- data.addSeries(series);
238
- return data;
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.1
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-05 00:00:00.000000000 Z
11
+ date: 2023-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake