num4normality 0.0.2-java → 0.0.3-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: 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