num4normality 0.0.2-java → 0.0.3-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: b89f71cba5d40084df7feae50644d8df12b9501f486f9bdd3a534d2dce73a4df
4
- data.tar.gz: fc2f02a141dd85f32834cae5c44607fd601b5b1e13902bda51cbbd4f4bddc98a
3
+ metadata.gz: a735c6ff8848bf8f8c56b7e1bc0b1794a5675ab93d3e9a13477cf8d3041b50d9
4
+ data.tar.gz: 87b102e787cd5835ce2c78ebf11e0abf8a2092462cbf9ff7fd73e06a3884d43b
5
5
  SHA512:
6
- metadata.gz: c7334b33fa778de4dd19980df1f5bf5933ef0c35e9b068775ecec0a091613007c9b25b4952ad5cb7714be3950f9a4bf640d7916a488424b65afef75857232b04
7
- data.tar.gz: d9924ebad4a9a5315453fadc8f3ba8eec7583ae2d02356294a5b53bf9acbbbf4d26fbad3f0b651f216c862da1763fc2339b00fd994061c2a0b3fd7433794dec7
6
+ metadata.gz: c808547090cef242d28bbfbc46243fc44726a69d22c18a03916f76ccb7e91b58b7c3a074f1fe7fd7a17c492da9978197358db941c20c1255fcd90773cc28e54d
7
+ data.tar.gz: ff78669f413ae51fae98f4fb683981b12793f2a93eaeb17438124e1ad3771b476a34955e4482bc669bcd4044ec31a95f08e9c0c93b89a802b03fe7d664d03c4c
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.0.3] - 2023-12-18
6
+
7
+ ### add
8
+ - add function of kstest.
9
+
10
+ ### change
11
+ - chg function name to ksplot from kstest.
12
+
5
13
  ## [0.0.2] - 2023-12-12
6
14
 
7
15
  ### change
@@ -24,6 +24,8 @@ import org.apache.commons.math3.distribution.NormalDistribution;
24
24
  import org.apache.commons.math3.stat.regression.SimpleRegression;
25
25
  import java.util.Arrays;
26
26
  import java.text.DecimalFormat;
27
+
28
+ import org.apache.commons.math3.stat.inference.TestUtils;
27
29
  public class Normality {
28
30
  public static void qqplot(String dname, double[] xi) {
29
31
  ChartPlot plot = new QQPlot();
@@ -31,13 +33,18 @@ public class Normality {
31
33
 
32
34
  plot.writeJPEG("qqplot.jpeg", chart, 800, 500);
33
35
  }
34
- public static void kstest(String dname, double[] xi) {
35
- ChartPlot plot = new KSTest();
36
+ public static void ksplot(String dname, double[] xi) {
37
+ ChartPlot plot = new KSPlot();
36
38
  JFreeChart chart = plot.createChart(dname, xi);
37
39
 
38
- plot.writeJPEG("kstest.jpeg", chart, 800, 500);
40
+ plot.writeJPEG("ksplot.jpeg", chart, 800, 500);
39
41
 
40
42
  }
43
+ public static boolean kstest(double[] xi) {
44
+ KSTest ks = new KSTest();
45
+
46
+ return ks.test(xi);
47
+ }
41
48
  public static boolean skewnesstest(double[] xi) {
42
49
  DAgostinosTest daigo = new SkewnessTest();
43
50
 
@@ -53,6 +60,10 @@ public class Normality {
53
60
 
54
61
 
55
62
  private interface ChartPlot {
63
+ /* フィールド */
64
+ static final double CLASS_MIN = -4.0;
65
+ static final double CLASS_MAX = 4.0;
66
+ /* メゾット */
56
67
  JFreeChart createChart(String dname, double[] xi);
57
68
  default void writeJPEG(String fname, JFreeChart chart, int width, int height) {
58
69
  File file = new File(fname);
@@ -104,8 +115,8 @@ public class Normality {
104
115
  plot.setDomainAxis(domainAxis);
105
116
  domainAxis.setLowerMargin(0.03);
106
117
  domainAxis.setUpperMargin(0.03);
107
- domainAxis.setLowerBound(-4);
108
- domainAxis.setUpperBound(4);
118
+ domainAxis.setLowerBound(ChartPlot.CLASS_MIN);
119
+ domainAxis.setUpperBound(ChartPlot.CLASS_MAX);
109
120
 
110
121
  ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
111
122
  return new JFreeChart("正規性の検定", plot);
@@ -157,7 +168,7 @@ public class Normality {
157
168
  double a = simpleReg.getSlope();
158
169
  double b = simpleReg.getIntercept();
159
170
 
160
- for (double x = -4.0; x < 4.0; x += 0.01) {
171
+ for (double x = ChartPlot.CLASS_MIN; x < ChartPlot.CLASS_MAX; x += 0.01) {
161
172
  double y = a * x + b;
162
173
 
163
174
  cu.add(x, y);
@@ -168,11 +179,7 @@ public class Normality {
168
179
  }
169
180
  }
170
181
  // コルモゴルフ・スミルノフ検定
171
- private static class KSTest implements ChartPlot {
172
- private NormalDistribution ndist = null;
173
- public KSTest() {
174
- ndist = new NormalDistribution(0, 1);
175
- }
182
+ private static class KSPlot implements ChartPlot {
176
183
  public JFreeChart createChart(String dname, double[] xi) {
177
184
  NumberAxis domainAxis = new NumberAxis("標準正規分布");
178
185
  XYPlot plot = createPlot(dname, xi);
@@ -230,13 +237,11 @@ public class Normality {
230
237
  double p = 0.0;
231
238
 
232
239
  XYSeries cu = new XYSeries(dname);
233
- for (int i = 0; i < xi.length; i++) {
240
+ for (int i = 0; i < n; i++) {
234
241
  double x = (xi[i] - m) / sd;
242
+
235
243
  p += xi[i] / sum;
236
- double y =
237
- ndist.inverseCumulativeProbability((i + 1.0) / (n + 1.0));
238
-
239
- cu.add(Math.min(x, y), p);
244
+ cu.add(x, p);
240
245
  }
241
246
  XYSeriesCollection series = new XYSeriesCollection();
242
247
 
@@ -244,7 +249,8 @@ public class Normality {
244
249
  return series;
245
250
  }
246
251
  private XYSeriesCollection createDataset1() {
247
- XYSeries cu = new XYSeries("累積");
252
+ NormalDistribution ndist = new NormalDistribution(0, 1);
253
+ XYSeries cu = new XYSeries("累積p");
248
254
 
249
255
  for (double x = -4; x < 4; x += 0.01) {
250
256
  double y = ndist.cumulativeProbability(x);
@@ -257,6 +263,23 @@ public class Normality {
257
263
  return series;
258
264
  }
259
265
  }
266
+ private static class KSTest {
267
+ public boolean test(double[] xi) {
268
+ double[] data = new double[xi.length];
269
+ Arrays.sort(xi);
270
+ DescriptiveStatistics stat = new DescriptiveStatistics();
271
+ Arrays.stream(xi).forEach(stat::addValue);
272
+ double m = stat.getMean(); // 平均
273
+ double sd = stat.getStandardDeviation();// 標準偏差
274
+ NormalDistribution ndist = new NormalDistribution(0, 1);
275
+
276
+ for (int i = 0; i < xi.length; i++) {
277
+ data[i] = (xi[i] - m) / sd;
278
+ }
279
+ boolean ret = TestUtils.kolmogorovSmirnovTest(ndist, data, 0.05);
280
+ return ret;
281
+ }
282
+ }
260
283
  // タコスディーノ検定(歪度)
261
284
  private static class SkewnessTest implements DAgostinosTest {
262
285
  private long n = 0;
data/lib/num4normality.rb CHANGED
@@ -16,7 +16,7 @@ module Num4NormalityLib
16
16
  # @param [Array] xi データ(double[])
17
17
  # @return [void] qqplot.jpegファイルを出力
18
18
  # @example
19
- # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209]
19
+ # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
20
20
  # Num4NormalityLib.qqplot("LDH", xi)
21
21
  # => qqplot.jpeg
22
22
  # @note
@@ -24,28 +24,41 @@ module Num4NormalityLib
24
24
  def qqplot(dname, xi)
25
25
  Normality.qqplot(dname, xi.to_java(Java::double))
26
26
  end
27
- # コルモゴルフ・スミルノフ検定
27
+ # コルモゴルフ・スミルノフ検定プロット(1標本)
28
28
  #
29
- # @overload kstest(dname, xi)
29
+ # @overload ksplot(dname, xi)
30
30
  # @param [String] dname データ名
31
31
  # @param [Array] xi データ(double[])
32
- # @return [void] kstest.jpegファイルを出力
32
+ # @return [void] ksplot.jpegファイルを出力
33
33
  # @example
34
- # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209]
35
- # Num4NormalityLib.kstest("LDH", xi)
34
+ # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
35
+ # Num4NormalityLib.ksplot("LDH", xi)
36
36
  # => kstest.jpeg
37
37
  # @note
38
38
  # グラフは、jfreechartを使用
39
- def kstest(dname, xi)
40
- Normality.kstest(dname, xi.to_java(Java::double))
39
+ def ksplot(dname, xi)
40
+ Normality.ksplot(dname, xi.to_java(Java::double))
41
41
  end
42
+ # コルモゴルフ・スミルノフ検定(1標本)
43
+ #
44
+ # @overload kstest(xi)
45
+ # @param [Array] xi データ(double[])
46
+ # @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
47
+ # @example
48
+ # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
49
+ # Num4NormalityLib.kstest(xi)
50
+ # => false
51
+ def kstest(xi)
52
+ Normality.kstest(xi.to_java(Java::double))
53
+ end
54
+
42
55
  # タコスディーノ検定(歪度)
43
56
  #
44
57
  # @overload skewnesstest(xi)
45
58
  # @param [Array] xi データ(double[])
46
59
  # @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
47
60
  # @example
48
- # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209]
61
+ # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
49
62
  # Num4NormalityLib.skewnesstest(xi)
50
63
  # => false
51
64
  def skewnesstest(xi)
@@ -57,7 +70,7 @@ module Num4NormalityLib
57
70
  # @param [Array] xi データ(double[])
58
71
  # @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
59
72
  # @example
60
- # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209]
73
+ # xi = [320, 240, 402, 325, 440, 286, 362, 281, 560, 212, 198, 209, 374]
61
74
  # Num4NormalityLib.kurtosistest(xi)
62
75
  # => false
63
76
  def kurtosistest(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.2
4
+ version: 0.0.3
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-12 00:00:00.000000000 Z
11
+ date: 2023-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake