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 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