num4tststatistic 0.0.4-java → 0.2.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/Rakefile +2 -1
- data/ext/num4tststatistic/NonParametrixTest.java +55 -0
- data/ext/num4tststatistic/Outlier.java +167 -0
- data/ext/num4tststatistic/{TstStatistic.java → ParametrixTest.java} +69 -72
- data/lib/jcommon-1.0.23.jar +0 -0
- data/lib/jfreechart-1.5.4.jar +0 -0
- data/lib/num4tststatistic.rb +161 -66
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53537fb9aa34673abd7db4fd6de0bdf1c32094c719d91cbec7be5ee030c8df14
|
4
|
+
data.tar.gz: 6e1f38c4918b3476dca195f41b5182e6122e96b6e1f86886708a54b8c318fa48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8c31d24cde63ff7e098de9d56bac19e3cc11d33ba611b5de7ae63de768b7af010d303d96529533b6c793cf0a7f248c594e4dbf6dcb5cc6473c52b1725fd52ae
|
7
|
+
data.tar.gz: 2d05cd849ef9e963cfd93c23da369250e304976a7b0a92d27ec7625a0bc7496a2520226eb2d28cb7f98c09cca514e45e3c65d0ed11836328d4f55b367ad6db59
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,24 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## [0.2.1] - 2024-01-07
|
6
|
+
### add
|
7
|
+
- add function of errbar.
|
8
|
+
|
9
|
+
## [0.1.1] - 2023-12-27
|
10
|
+
|
11
|
+
### add
|
12
|
+
- add function of utest.
|
13
|
+
- add function of spearmanscorr.
|
14
|
+
- add function of kendallscorr.
|
15
|
+
- add function of ks2test.
|
16
|
+
|
17
|
+
### change
|
18
|
+
- chg function name from unCorrelation to pearsoCorrelation.
|
19
|
+
|
20
|
+
### delete
|
21
|
+
- del function of populationCorre.
|
22
|
+
|
5
23
|
## [0.0.4] - 2023-12-18
|
6
24
|
|
7
25
|
### add
|
data/Rakefile
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'rake/javaextensiontask'
|
2
2
|
|
3
|
+
jars = Dir.glob("lib/*.jar")
|
3
4
|
Rake::JavaExtensionTask.new(name='num4tststatistic') do | ext |
|
4
5
|
ext.release = '11'
|
5
|
-
ext.classpath =
|
6
|
+
ext.classpath = jars.map { |x| File.expand_path x }.join ":"
|
6
7
|
end
|
7
8
|
task :default => [:compile]
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import java.util.Arrays;
|
2
|
+
|
3
|
+
import org.apache.commons.math3.stat.inference.WilcoxonSignedRankTest;
|
4
|
+
import org.apache.commons.math3.stat.inference.MannWhitneyUTest;
|
5
|
+
import org.apache.commons.math3.stat.correlation.SpearmansCorrelation;
|
6
|
+
import org.apache.commons.math3.stat.correlation.KendallsCorrelation;
|
7
|
+
|
8
|
+
import org.apache.commons.math3.stat.inference.TestUtils;
|
9
|
+
public class NonParametrixTest {
|
10
|
+
private static NonParametrixTest nonParamTest = new NonParametrixTest();
|
11
|
+
public static NonParametrixTest getInstance() {
|
12
|
+
return nonParamTest;
|
13
|
+
}
|
14
|
+
|
15
|
+
// ウィルコクス符号付き順位検定
|
16
|
+
public double wilcoxon(double[] x, double[] y) {
|
17
|
+
int n = x.length;
|
18
|
+
WilcoxonSignedRankTest wilcox = new WilcoxonSignedRankTest();
|
19
|
+
double w = wilcox.wilcoxonSignedRank(x, y);
|
20
|
+
double e_w = n * (n + 1.0) / 4.0;
|
21
|
+
double var_w = n * (n + 1.0) * (2.0 * n + 1.0) / 24.0;
|
22
|
+
|
23
|
+
return (w - e_w) / Math.sqrt(var_w);
|
24
|
+
}
|
25
|
+
// マン・ホイットニーのU検定
|
26
|
+
public double utest(double[] x, double[] y) {
|
27
|
+
int n1 = x.length;
|
28
|
+
int n2 = y.length;
|
29
|
+
MannWhitneyUTest utest = new MannWhitneyUTest();
|
30
|
+
double u = utest.mannWhitneyU(x, y);
|
31
|
+
double e_u = n1 * n2 / 2.0;
|
32
|
+
double var_u = (n1 * n2 * (n1 + n2 + 1.0)) / 12.0;
|
33
|
+
|
34
|
+
return (u - e_u) / Math.sqrt(var_u);
|
35
|
+
}
|
36
|
+
// スピアマンの順位相関係数
|
37
|
+
public double spearmanscorr(double[] x, double[] y) {
|
38
|
+
SpearmansCorrelation speamans = new SpearmansCorrelation();
|
39
|
+
|
40
|
+
return speamans.correlation(x, y);
|
41
|
+
}
|
42
|
+
// ケンドールの順位相関係数
|
43
|
+
public double kendallscorr(double[] x, double[] y) {
|
44
|
+
KendallsCorrelation kendalls = new KendallsCorrelation();
|
45
|
+
|
46
|
+
return kendalls.correlation(x, y);
|
47
|
+
}
|
48
|
+
// コルモゴルフ・スミルノフ検定(2標本)
|
49
|
+
public boolean ks2test(double[] xi1, double[] xi2, double a) {
|
50
|
+
double p = TestUtils.kolmogorovSmirnovTest(xi1, xi2);
|
51
|
+
|
52
|
+
return (p < a) ? true : false;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
@@ -0,0 +1,167 @@
|
|
1
|
+
import org.jfree.chart.ChartFactory;
|
2
|
+
import org.jfree.chart.StandardChartTheme;
|
3
|
+
import org.jfree.chart.JFreeChart;
|
4
|
+
import org.jfree.chart.StandardChartTheme;
|
5
|
+
import org.jfree.chart.plot.CategoryPlot;
|
6
|
+
import org.jfree.data.statistics.BoxAndWhiskerCategoryDataset;
|
7
|
+
import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
|
8
|
+
import org.jfree.data.statistics.BoxAndWhiskerCalculator;
|
9
|
+
import org.jfree.data.statistics.BoxAndWhiskerItem;
|
10
|
+
import org.jfree.data.category.CategoryDataset;
|
11
|
+
import org.jfree.data.category.DefaultCategoryDataset;
|
12
|
+
import org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;
|
13
|
+
import org.jfree.chart.labels.BoxAndWhiskerToolTipGenerator;
|
14
|
+
import org.jfree.chart.plot.PlotOrientation;
|
15
|
+
import org.jfree.chart.plot.DatasetRenderingOrder;
|
16
|
+
import org.jfree.chart.axis.CategoryAxis;
|
17
|
+
import org.jfree.chart.axis.NumberAxis;
|
18
|
+
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
|
19
|
+
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
|
20
|
+
|
21
|
+
import org.jfree.chart.ChartUtils;
|
22
|
+
import java.io.File;
|
23
|
+
import java.io.IOException;
|
24
|
+
|
25
|
+
import java.util.Arrays;
|
26
|
+
import java.util.List;
|
27
|
+
import java.util.ArrayList;
|
28
|
+
|
29
|
+
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
|
30
|
+
public class Outlier {
|
31
|
+
private static Outlier outlier = new Outlier();
|
32
|
+
public static Outlier getInstance() {
|
33
|
+
return outlier;
|
34
|
+
}
|
35
|
+
public double grubbs(double[] xi, double xk) {
|
36
|
+
Grubbs g = new Grubbs();
|
37
|
+
|
38
|
+
return g.calcStatistics(xi, xk);
|
39
|
+
}
|
40
|
+
|
41
|
+
public void errbar(String dname, double[] xi) {
|
42
|
+
ChartPlot plot = new ErrorBarChartPlot();
|
43
|
+
JFreeChart chart = plot.createChart("エラーバー", dname, xi);
|
44
|
+
|
45
|
+
plot.writeJPEG("errbar.jpeg", chart, 800, 500);
|
46
|
+
|
47
|
+
}
|
48
|
+
/*********************************/
|
49
|
+
/* interface define */
|
50
|
+
/*********************************/
|
51
|
+
private interface ChartPlot {
|
52
|
+
JFreeChart createChart(String title, String dname, double[] xi);
|
53
|
+
default void writeJPEG(String fname, JFreeChart chart, int width, int height) {
|
54
|
+
File file = new File(fname);
|
55
|
+
try {
|
56
|
+
ChartUtils.saveChartAsJPEG(file, chart, width, height);
|
57
|
+
} catch (IOException e) {
|
58
|
+
e.printStackTrace();
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
private interface CreatePlot {
|
63
|
+
CategoryPlot createPlot(String dname, double[] xi);
|
64
|
+
}
|
65
|
+
/*********************************/
|
66
|
+
/* Class define */
|
67
|
+
/*********************************/
|
68
|
+
//
|
69
|
+
private class Grubbs {
|
70
|
+
private SummaryStatistics stat = new SummaryStatistics();
|
71
|
+
public double calcStatistics(double[] xi, double xk) {
|
72
|
+
Arrays.stream(xi).forEach(stat::addValue);
|
73
|
+
double m = stat.getMean(); // 平均
|
74
|
+
double sd = stat.getStandardDeviation();// 標準偏差
|
75
|
+
double min = stat.getMin();
|
76
|
+
double max = stat.getMax();
|
77
|
+
double t = 0.0;
|
78
|
+
|
79
|
+
if (xk == min) { t = (m - xk) / sd; }
|
80
|
+
if (xk == max) { t = (xk - m) / sd; }
|
81
|
+
return t;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
// error bar
|
85
|
+
private class ErrorBarChartPlot implements ChartPlot{
|
86
|
+
public JFreeChart createChart(String title, String dname, double[] xi) {
|
87
|
+
CategoryPlot plot = createPlot(dname, xi);
|
88
|
+
|
89
|
+
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
|
90
|
+
JFreeChart chart = new JFreeChart(title, plot);
|
91
|
+
|
92
|
+
ChartUtils.applyCurrentTheme(chart);
|
93
|
+
return chart;
|
94
|
+
}
|
95
|
+
private CategoryPlot createPlot(String dname, double[] xi) {
|
96
|
+
CreatePlot plotImpl = new ErrorBarPlot();
|
97
|
+
|
98
|
+
return plotImpl.createPlot(dname, xi);
|
99
|
+
}
|
100
|
+
public class ErrorBarPlot implements CreatePlot {
|
101
|
+
public CategoryPlot createPlot(String dname, double[] xi) {
|
102
|
+
BoxAndWhiskerRenderer renderer0 = new BoxAndWhiskerRenderer();
|
103
|
+
LineAndShapeRenderer renderer1 = new LineAndShapeRenderer(false, true);
|
104
|
+
|
105
|
+
renderer0.setDefaultToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
|
106
|
+
renderer0.setMaximumBarWidth(0.2);
|
107
|
+
renderer1.setDefaultToolTipGenerator(
|
108
|
+
new StandardCategoryToolTipGenerator());
|
109
|
+
|
110
|
+
CategoryPlot plot = new CategoryPlot();
|
111
|
+
plot.setOrientation(PlotOrientation.VERTICAL);
|
112
|
+
plot.mapDatasetToRangeAxis(0,0);
|
113
|
+
plot.mapDatasetToRangeAxis(1,0);
|
114
|
+
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
|
115
|
+
|
116
|
+
/*--- 横軸 ---*/
|
117
|
+
CategoryAxis categoryAxis = new CategoryAxis();
|
118
|
+
plot.setDomainAxis(categoryAxis);
|
119
|
+
|
120
|
+
/*--- 縦軸 ---*/
|
121
|
+
NumberAxis valueAxis = new NumberAxis();
|
122
|
+
valueAxis.setAutoRangeIncludesZero(false);
|
123
|
+
plot.setRangeAxis(valueAxis);
|
124
|
+
|
125
|
+
plot.setRenderer(0, renderer0);
|
126
|
+
plot.setDataset(0, createDataset0(dname, xi));
|
127
|
+
plot.setRenderer(1, renderer1);
|
128
|
+
plot.setDataset(1, createDataset1(dname, xi));
|
129
|
+
|
130
|
+
return plot;
|
131
|
+
}
|
132
|
+
private CategoryDataset createDataset0(String dname, double[] xi) {
|
133
|
+
DefaultBoxAndWhiskerCategoryDataset data =
|
134
|
+
new DefaultBoxAndWhiskerCategoryDataset();
|
135
|
+
List<Double> values = new ArrayList<Double>();
|
136
|
+
Arrays.stream(xi).forEach(values::add);
|
137
|
+
|
138
|
+
BoxAndWhiskerItem item =
|
139
|
+
BoxAndWhiskerCalculator.calculateBoxAndWhiskerStatistics(values);
|
140
|
+
|
141
|
+
data.add(item, dname, "dt1");
|
142
|
+
return data;
|
143
|
+
}
|
144
|
+
private CategoryDataset createDataset1(String dname, double[] xi) {
|
145
|
+
DefaultCategoryDataset data = new DefaultCategoryDataset();
|
146
|
+
SummaryStatistics stat = new SummaryStatistics();
|
147
|
+
List<Double> values = new ArrayList<Double>();
|
148
|
+
|
149
|
+
Arrays.stream(xi).forEach(stat::addValue);
|
150
|
+
Arrays.stream(xi).forEach(values::add);
|
151
|
+
|
152
|
+
BoxAndWhiskerItem item =
|
153
|
+
BoxAndWhiskerCalculator.calculateBoxAndWhiskerStatistics(values);
|
154
|
+
double minQ = ((Double)item.getMinOutlier()).doubleValue();
|
155
|
+
double min = stat.getMin();
|
156
|
+
double maxQ = ((Double)item.getMaxOutlier()).doubleValue();
|
157
|
+
double max = stat.getMax();
|
158
|
+
|
159
|
+
if (min < minQ) { data.addValue(min, dname, "dt1"); };
|
160
|
+
if (max > maxQ) { data.addValue(max, dname, "dt1"); };
|
161
|
+
return data;
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
167
|
+
|
@@ -1,10 +1,14 @@
|
|
1
1
|
import java.util.Arrays;
|
2
|
-
|
3
2
|
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
|
4
3
|
import org.apache.commons.math3.stat.correlation.PearsonsCorrelation;
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
public class ParametrixTest {
|
5
|
+
private static ParametrixTest paramTest = new ParametrixTest();
|
6
|
+
|
7
|
+
public static ParametrixTest getInstance() {
|
8
|
+
return paramTest;
|
9
|
+
}
|
10
|
+
// 正規母集団の母平均の検定量
|
11
|
+
public double populationMean(double[] xi, double m0) {
|
8
12
|
int n = xi.length;
|
9
13
|
SummaryStatistics stat = new SummaryStatistics();
|
10
14
|
|
@@ -13,20 +17,23 @@ public class TstStatistic {
|
|
13
17
|
double s2 = stat.getVariance();// 分散
|
14
18
|
return (m - m0) / Math.sqrt(s2 / n);
|
15
19
|
}
|
16
|
-
|
20
|
+
// 正規母集団の母分散の検定量
|
21
|
+
public double populationVar(double[] xi, double sig0) {
|
17
22
|
int n = xi.length;
|
18
23
|
SummaryStatistics stat = new SummaryStatistics();
|
19
24
|
Arrays.stream(xi).forEach(stat::addValue);
|
20
25
|
double s2 = stat.getVariance();// 分散
|
21
|
-
|
26
|
+
|
22
27
|
return (n - 1) * s2 / sig0;
|
23
28
|
}
|
24
|
-
|
29
|
+
// 母比率の検定量
|
30
|
+
public double populationRatio(int m, int n, double p0) {
|
25
31
|
double p = (double)m / (double)n;
|
26
|
-
|
27
32
|
return (p - p0) / Math.sqrt(p0 * (1-p0) / n);
|
28
33
|
}
|
29
|
-
|
34
|
+
// 2つの母平均の差の検定量
|
35
|
+
// (等分散性を仮定)
|
36
|
+
public double diffPopulationMean2EquVar(double[] xi1, double[] xi2) {
|
30
37
|
int n1 = xi1.length;
|
31
38
|
int n2 = xi2.length;
|
32
39
|
SummaryStatistics stat1 = new SummaryStatistics();
|
@@ -42,7 +49,9 @@ public class TstStatistic {
|
|
42
49
|
|
43
50
|
return (m1 - m2) / Math.sqrt((1.0 / n1 + 1.0 / n2) * s2);
|
44
51
|
}
|
45
|
-
|
52
|
+
// 2つの母平均の差の検定量
|
53
|
+
// (不等分散性を仮定)
|
54
|
+
public double diffPopulationMean2UnEquVar(double[] xi1, double[] xi2) {
|
46
55
|
int n1 = xi1.length;
|
47
56
|
int n2 = xi2.length;
|
48
57
|
SummaryStatistics stat1 = new SummaryStatistics();
|
@@ -57,7 +66,8 @@ public class TstStatistic {
|
|
57
66
|
|
58
67
|
return (m1 - m2) / Math.sqrt(s12 / n1 + s22 / n2);
|
59
68
|
}
|
60
|
-
|
69
|
+
// ウェルチ検定の為の自由度
|
70
|
+
public int df4welch(double[] xi1, double[] xi2) {
|
61
71
|
int n1 = xi1.length;
|
62
72
|
int n2 = xi2.length;
|
63
73
|
SummaryStatistics stat1 = new SummaryStatistics();
|
@@ -79,9 +89,10 @@ public class TstStatistic {
|
|
79
89
|
(
|
80
90
|
s14 / (n12 * (n1 - 1)) + s24 / (n22 * (n2 - 1))
|
81
91
|
)
|
82
|
-
|
92
|
+
);
|
83
93
|
}
|
84
|
-
|
94
|
+
// 対応のある2つの母平均の差の検定量
|
95
|
+
public double diffPopulationMean(double[] xi1, double[] xi2) {
|
85
96
|
int n = xi1.length;
|
86
97
|
SummaryStatistics stat = new SummaryStatistics();
|
87
98
|
|
@@ -90,10 +101,11 @@ public class TstStatistic {
|
|
90
101
|
}
|
91
102
|
double m = stat.getMean();
|
92
103
|
double s2 = stat.getVariance();// 分散
|
93
|
-
|
104
|
+
|
94
105
|
return (m - 0) / Math.sqrt(s2/n);
|
95
106
|
}
|
96
|
-
|
107
|
+
// 2つの母分散の差の検定量
|
108
|
+
public double diffPopulationVar(double[] xi1, double[] xi2) {
|
97
109
|
SummaryStatistics stat1 = new SummaryStatistics();
|
98
110
|
SummaryStatistics stat2 = new SummaryStatistics();
|
99
111
|
Arrays.stream(xi1).forEach(stat1::addValue);
|
@@ -103,34 +115,22 @@ public class TstStatistic {
|
|
103
115
|
double s22 = stat2.getVariance();// 分散
|
104
116
|
return s12 / s22;
|
105
117
|
}
|
106
|
-
|
118
|
+
// 2つの母比率の差の検定量
|
119
|
+
public double diffPopulationRatio(int m1, int n1, int m2, int n2) {
|
107
120
|
double p1 = (double)m1 / (double)n1;
|
108
121
|
double p2 = (double)m2 / (double)n2;
|
109
122
|
double p = (double)(m1 + m2) / (double)(n1 + n2);
|
110
123
|
|
111
124
|
return (p1 - p2) / Math.sqrt(p * (1 - p) * (1.0 / n1 + 1.0 / n2));
|
112
125
|
}
|
113
|
-
|
114
|
-
|
115
|
-
PearsonsCorrelation corel = new PearsonsCorrelation();
|
116
|
-
|
117
|
-
double r = corel.correlation(x, y);
|
118
|
-
|
119
|
-
return r * Math.sqrt(n - 2.0) / Math.sqrt(1.0 - r * r);
|
120
|
-
}
|
121
|
-
public static double populationCorre(double[] x, double[] y, double rth0) {
|
122
|
-
int n = x.length;
|
126
|
+
// ピアソン相関係数
|
127
|
+
public double pearsoCorrelation(double[] x, double[] y) {
|
123
128
|
PearsonsCorrelation corel = new PearsonsCorrelation();
|
124
129
|
|
125
|
-
|
126
|
-
|
127
|
-
return Math.sqrt(n-3.0) *
|
128
|
-
(
|
129
|
-
0.5 * Math.log((1.0 + r) / (1.0 - r))
|
130
|
-
- 0.5 * Math.log((1.0 + rth0) / (1.0 - rth0))
|
131
|
-
);
|
130
|
+
return corel.correlation(x, y);
|
132
131
|
}
|
133
|
-
|
132
|
+
// 適合度の検定量
|
133
|
+
public double fidelity(double[] fi, double[] pi) {
|
134
134
|
double[] e = new double[fi.length];
|
135
135
|
double t = 0.0;
|
136
136
|
SummaryStatistics stat = new SummaryStatistics();
|
@@ -145,52 +145,49 @@ public class TstStatistic {
|
|
145
145
|
}
|
146
146
|
return t;
|
147
147
|
}
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
double[] fa = new double[fij.length];
|
152
|
-
double[] fb = new double[fij[0].length];
|
148
|
+
// 独立性の検定量
|
149
|
+
public double independency(double[][] fij) {
|
150
|
+
Independency indep = new Independency(fij);
|
153
151
|
|
152
|
+
indep.calsCells();
|
153
|
+
double t = indep.calcStatistic();
|
154
|
+
|
155
|
+
return t;
|
156
|
+
}
|
157
|
+
private class Independency {
|
158
|
+
private double[] fa = null;
|
159
|
+
private double[] fb = null;
|
160
|
+
private double[][] fij = null;
|
161
|
+
private long n = 0;
|
162
|
+
public Independency(double[][] fij) {
|
163
|
+
fa = new double[fij.length];
|
164
|
+
fb = new double[fij[0].length];
|
165
|
+
this.fij = fij;
|
166
|
+
}
|
154
167
|
// 各セルの計算
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
168
|
+
public void calsCells() {
|
169
|
+
for (int i = 0; i < fij.length; i++) {
|
170
|
+
fa[i] = 0.0;
|
171
|
+
for (int j = 0; j < fij[i].length; j++) {
|
172
|
+
fa[i] += fij[i][j];
|
173
|
+
fb[j] += fij[i][j];
|
174
|
+
n += fij[i][j];
|
175
|
+
}
|
161
176
|
}
|
162
177
|
}
|
163
|
-
|
164
178
|
// 検定統計量計算
|
165
|
-
|
166
|
-
|
167
|
-
|
179
|
+
public double calcStatistic() {
|
180
|
+
double t = 0.0;
|
181
|
+
|
182
|
+
for (int i = 0; i < fij.length; i++) {
|
183
|
+
for (int j = 0; j < fij[i].length; j++) {
|
184
|
+
double f_e = n * fij[i][j] - fa[i] * fb[j];
|
168
185
|
|
169
|
-
|
186
|
+
t += f_e * f_e / (n * fa[i] * fb[j]);
|
187
|
+
}
|
170
188
|
}
|
189
|
+
return t;
|
171
190
|
}
|
172
|
-
|
173
|
-
return t;
|
174
|
-
}
|
175
|
-
public static double grubbs(double[] xi, double xk) {
|
176
|
-
SummaryStatistics stat = new SummaryStatistics();
|
177
|
-
|
178
|
-
Arrays.stream(xi).forEach(stat::addValue);
|
179
|
-
double m = stat.getMean(); // 平均
|
180
|
-
double sd = stat.getStandardDeviation();// 標準偏差
|
181
|
-
double min = stat.getMin();
|
182
|
-
double max = stat.getMax();
|
183
|
-
double t = 0.0;
|
184
|
-
|
185
|
-
if (xk == min) { t = (m - xk) / sd; }
|
186
|
-
if (xk == max) { t = (xk - m) / sd; }
|
187
|
-
return t;
|
188
|
-
}
|
189
|
-
public static double wilcoxon(double[] x, double[] y) {
|
190
|
-
WilcoxonSignedRankTest wilcox = new WilcoxonSignedRankTest();
|
191
|
-
|
192
|
-
return wilcox.wilcoxonSignedRank(x, y);
|
193
191
|
}
|
194
192
|
}
|
195
193
|
|
196
|
-
|
Binary file
|
Binary file
|
data/lib/num4tststatistic.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
require 'java'
|
2
2
|
require 'num4tststatistic.jar'
|
3
3
|
require 'commons-math3-3.6.1.jar'
|
4
|
+
require 'jfreechart-1.5.4.jar'
|
4
5
|
|
5
|
-
java_import '
|
6
|
+
java_import 'Outlier'
|
7
|
+
java_import 'ParametrixTest'
|
8
|
+
java_import 'NonParametrixTest'
|
6
9
|
|
7
10
|
# 検定統計量を計算
|
8
11
|
# (Apache commoms math3使用)
|
9
12
|
module Num4TstStatisticLib
|
10
|
-
class
|
13
|
+
class ParametrixTestLib
|
14
|
+
def initialize
|
15
|
+
@paramTest = ParametrixTest.getInstance()
|
16
|
+
end
|
11
17
|
# 正規母集団の母平均の検定量
|
12
18
|
#
|
13
19
|
# @overload populationMean(xi, m0)
|
@@ -16,12 +22,13 @@ module Num4TstStatisticLib
|
|
16
22
|
# @return [double] 検定統計量
|
17
23
|
# @example
|
18
24
|
# xi = [15.5, 15.7, 15.4, 15.4, 15.6, 15.4, 15.6, 15.5, 15.4]
|
19
|
-
# Num4TstStatisticLib.
|
25
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
26
|
+
# paraTest.populationMean(xi, 15.4)
|
20
27
|
# => 2.683
|
21
28
|
# @note
|
22
29
|
# 自由度(N-1)のt分布に従う
|
23
30
|
def populationMean(xi, m0)
|
24
|
-
return
|
31
|
+
return @paramTest.populationMean(xi.to_java(Java::double), m0)
|
25
32
|
end
|
26
33
|
# 正規母集団の母分散の検定量
|
27
34
|
#
|
@@ -32,26 +39,29 @@ module Num4TstStatisticLib
|
|
32
39
|
# @example
|
33
40
|
# xi = xi = [35.2, 34.5, 34.9, 35.2, 34.8, 35.1, 34.9, 35.2, 34.9, 34.8]
|
34
41
|
# sd = 0.4
|
35
|
-
# Num4TstStatisticLib.
|
42
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
43
|
+
# paraTest.populationVar(xi, sd*sd)
|
36
44
|
# => 2.906
|
37
45
|
# @note
|
38
46
|
# 自由度(N-1)の階2乗分布に従う
|
39
47
|
def populationVar(xi, sig0)
|
40
|
-
return
|
48
|
+
return @paramTest.populationVar(xi.to_java(Java::double), sig0)
|
41
49
|
end
|
42
50
|
# 母比率の検定量
|
51
|
+
#
|
43
52
|
# @overload populationRatio(m, n, p0)
|
44
53
|
# @param [int] m m値
|
45
54
|
# @param [int] n N値
|
46
55
|
# @param [double] p0 母比率
|
47
56
|
# @return [double] 検定統計量
|
48
57
|
# @example
|
49
|
-
#
|
58
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
59
|
+
# paraTest.populationRatio(29, 346, 0.12)
|
50
60
|
# => -2.071
|
51
61
|
# @note
|
52
62
|
# 標準正規分布 N(0,1*1)に従う
|
53
63
|
def populationRatio(m, n, p0)
|
54
|
-
return
|
64
|
+
return @paramTest.populationRatio(m, n, p0)
|
55
65
|
end
|
56
66
|
# 2つの母平均の差の検定量
|
57
67
|
# (等分散性を仮定)
|
@@ -63,12 +73,13 @@ module Num4TstStatisticLib
|
|
63
73
|
# @example
|
64
74
|
# xi1 = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
65
75
|
# xi2 = [180, 180, 235, 270, 240, 285, 164, 152]
|
66
|
-
# Num4TstStatisticLib.
|
76
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
77
|
+
# paraTest.diffPopulationMean2EquVar(xi1, xi2)
|
67
78
|
# => -1.765
|
68
79
|
# @note
|
69
80
|
# N1+N2-2のt分布に従う
|
70
81
|
def diffPopulationMean2EquVar(xi1, xi2)
|
71
|
-
return
|
82
|
+
return @paramTest.diffPopulationMean2EquVar(
|
72
83
|
xi1.to_java(Java::double), xi2.to_java(Java::double)
|
73
84
|
)
|
74
85
|
end
|
@@ -82,16 +93,18 @@ module Num4TstStatisticLib
|
|
82
93
|
# @example
|
83
94
|
# xi1 = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
84
95
|
# xi2 = [180, 180, 235, 270, 240, 285, 164, 152]
|
85
|
-
# Num4TstStatisticLib.
|
96
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
97
|
+
# paraTest.diffPopulationMean2UnEquVar(xi1, xi2)
|
86
98
|
# => -1.636
|
87
99
|
# @note
|
88
100
|
# df4welch関数で求めた自由度のt分布に従う
|
89
101
|
def diffPopulationMean2UnEquVar(xi1, xi2)
|
90
|
-
return
|
102
|
+
return @paramTest.diffPopulationMean2UnEquVar(
|
91
103
|
xi1.to_java(Java::double), xi2.to_java(Java::double)
|
92
104
|
)
|
93
105
|
end
|
94
106
|
# ウェルチ検定の為の自由度
|
107
|
+
#
|
95
108
|
# @overload df4welch(xi1, xi2)
|
96
109
|
# @param [Array] xi1 x1のデータ(double[])
|
97
110
|
# @param [Array] xi2 x2のデータ(double[])
|
@@ -99,10 +112,11 @@ module Num4TstStatisticLib
|
|
99
112
|
# @example
|
100
113
|
# xi1 = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
101
114
|
# xi2 = [180, 180, 235, 270, 240, 285, 164, 152]
|
102
|
-
# Num4TstStatisticLib.
|
115
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
116
|
+
# paraTest.df4welch(xi1, xi2)
|
103
117
|
# => 11
|
104
118
|
def df4welch(xi1, xi2)
|
105
|
-
return
|
119
|
+
return @paramTest.df4welch(
|
106
120
|
xi1.to_java(Java::double), xi2.to_java(Java::double)
|
107
121
|
)
|
108
122
|
end
|
@@ -115,12 +129,13 @@ module Num4TstStatisticLib
|
|
115
129
|
# @example
|
116
130
|
# xi1 = [37.1, 36.2, 36.6, 37.4, 36.8, 36.7, 36.9, 37.4, 36.6, 36.7]
|
117
131
|
# xi2 = [36.8, 36.6, 36.5, 37.0, 36.0, 36.5, 36.6, 37.1, 36.4, 36.7]
|
118
|
-
# Num4TstStatisticLib.
|
132
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
133
|
+
# paraTest.diffPopulationMean(xi1, xi2)
|
119
134
|
# => 2.283
|
120
135
|
# @note
|
121
136
|
# 自由度(N-1)のt分布に従う
|
122
|
-
|
123
|
-
return
|
137
|
+
def diffPopulationMean(xi1, xi2)
|
138
|
+
return @paramTest.diffPopulationMean(
|
124
139
|
xi1.to_java(Java::double), xi2.to_java(Java::double)
|
125
140
|
)
|
126
141
|
end
|
@@ -133,12 +148,13 @@ module Num4TstStatisticLib
|
|
133
148
|
# @example
|
134
149
|
# xi1 = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
135
150
|
# xi2 = [180, 180, 235, 270, 240, 285, 164, 152]
|
136
|
-
# Num4TstStatisticLib.
|
151
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
152
|
+
# paraTest.diffPopulationVar(xi1, xi2)
|
137
153
|
# => 0.4727
|
138
154
|
# @note
|
139
155
|
# 自由度(N1-1,N2-1)のF分布に従う
|
140
156
|
def diffPopulationVar(xi1, xi2)
|
141
|
-
return
|
157
|
+
return @paramTest.diffPopulationVar(
|
142
158
|
xi1.to_java(Java::double), xi2.to_java(Java::double)
|
143
159
|
)
|
144
160
|
end
|
@@ -151,50 +167,32 @@ module Num4TstStatisticLib
|
|
151
167
|
# @param [int] n2 N2値
|
152
168
|
# @return [double] 検定統計量
|
153
169
|
# @example
|
154
|
-
# Num4TstStatisticLib.
|
170
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
171
|
+
# paraTest.diffPopulationRatio(469, 1200, 308, 900)
|
155
172
|
# => 2.283
|
156
173
|
# @note
|
157
174
|
# 標準正規分布 N(0,1*1)に従う
|
158
175
|
def diffPopulationRatio(m1, n1, m2, n2)
|
159
|
-
return
|
176
|
+
return @paramTest.diffPopulationRatio(m1, n1, m2, n2)
|
160
177
|
end
|
161
|
-
#
|
178
|
+
# ピアソン相関係数
|
179
|
+
# (相関係数の検定)
|
162
180
|
#
|
163
|
-
# @overload
|
181
|
+
# @overload pearsoCorrelation(x, y)
|
164
182
|
# @param [Array] x xのデータ(double[])
|
165
183
|
# @param [Array] y yのデータ(double[])
|
166
|
-
# @return [double]
|
184
|
+
# @return [double] 相関係数
|
167
185
|
# @example
|
168
186
|
# x = [113, 64, 16, 45, 28, 19, 30, 82, 76]
|
169
187
|
# y = [31, 5, 2, 17, 18, 2, 9, 25, 13]
|
170
|
-
# Num4TstStatisticLib.
|
188
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
189
|
+
# paraTest.pearsoCorrelation(x, y)
|
171
190
|
# => 3.1035
|
172
|
-
|
173
|
-
|
174
|
-
def unCorrelation(x, y)
|
175
|
-
return TstStatistic.unCorrelation(
|
191
|
+
def pearsoCorrelation(x, y)
|
192
|
+
return @paramTest.pearsoCorrelation(
|
176
193
|
x.to_java(Java::double), y.to_java(Java::double)
|
177
194
|
)
|
178
195
|
end
|
179
|
-
# 母相関係数の検定量
|
180
|
-
#
|
181
|
-
# @overload populationCorre(x, y, rth0)
|
182
|
-
# @param [Array] x xのデータ(double[])
|
183
|
-
# @param [Array] y yのデータ(double[])
|
184
|
-
# @param [double] rth0 母相関係数
|
185
|
-
# @return [double] 検定統計量
|
186
|
-
# @example
|
187
|
-
# x = [2750, 2956, 2675, 3198, 1816, 2233, 2375, 2288, 1932, 2036, 2183, 2882]
|
188
|
-
# y = [249, 713, 1136, 575, 5654, 2107, 915, 4193, 7225, 3730, 472, 291]
|
189
|
-
# Num4TstStatisticLib.populationCorre(x, y, -0.3)
|
190
|
-
# => -2.107168
|
191
|
-
# @note
|
192
|
-
# 標準正規分布 N(0,1*1)に従う
|
193
|
-
def populationCorre(x, y, rth0)
|
194
|
-
return TstStatistic.populationCorre(
|
195
|
-
x.to_java(Java::double), y.to_java(Java::double), rth0
|
196
|
-
)
|
197
|
-
end
|
198
196
|
# 適合度の検定量
|
199
197
|
#
|
200
198
|
# @overload fidelity(fi, pi)
|
@@ -204,12 +202,13 @@ module Num4TstStatisticLib
|
|
204
202
|
# @example
|
205
203
|
# fi = [57, 33, 46, 14]
|
206
204
|
# pi = [0.4, 0.2, 0.3, 0.1]
|
207
|
-
# Num4TstStatisticLib.
|
205
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
206
|
+
# paraTest.fidelity(fi, pi)
|
208
207
|
# => 0.5389
|
209
208
|
# @note
|
210
209
|
# 自由度(n-1)の階2乗分布に従う
|
211
210
|
def fidelity(fi, pi)
|
212
|
-
return
|
211
|
+
return @paramTest.fidelity(fi.to_java(Java::double), pi.to_java(Java::double))
|
213
212
|
end
|
214
213
|
# 独立性の検定量
|
215
214
|
#
|
@@ -221,12 +220,109 @@ module Num4TstStatisticLib
|
|
221
220
|
# [57, 33, 46, 14],
|
222
221
|
# [89, 24, 75, 12],
|
223
222
|
# ]
|
224
|
-
# Num4TstStatisticLib.
|
223
|
+
# paraTest = Num4TstStatisticLib::ParametrixTestLib.new
|
224
|
+
# paraTest.independency(fij)
|
225
225
|
# => 8.5711
|
226
226
|
# @note
|
227
227
|
# 自由度(m-1)(n-1)の階2乗分布に従う
|
228
228
|
def independency(fij)
|
229
|
-
return
|
229
|
+
return @paramTest.independency(fij.to_java(Java::double[]))
|
230
|
+
end
|
231
|
+
end
|
232
|
+
class NonParametrixTestLib
|
233
|
+
def initialize
|
234
|
+
@nonParamTest = NonParametrixTest.getInstance()
|
235
|
+
end
|
236
|
+
# マン・ホイットニーのU検定
|
237
|
+
#
|
238
|
+
# @overload utest(x, y)
|
239
|
+
# @param [Array] x xのデータ(double[])
|
240
|
+
# @param [Array] y yのデータ(double[])
|
241
|
+
# @return [double] 検定統計量
|
242
|
+
# @example
|
243
|
+
# x = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
244
|
+
# y = [180, 180, 235, 270, 240, 285, 164, 152]
|
245
|
+
# nonParaTest = Num4TstStatisticLib::NonParametrixTestLib.new
|
246
|
+
# nonParaTest.utest(x, y)
|
247
|
+
# => 63.0
|
248
|
+
# @note
|
249
|
+
# 近似的に標準正規分布 N(0,1*1)に従う
|
250
|
+
def utest(x, y)
|
251
|
+
return @nonParamTest.utest(x.to_java(Java::double), y.to_java(Java::double))
|
252
|
+
end
|
253
|
+
# ウィルコクス符号付き順位検定
|
254
|
+
#
|
255
|
+
# @overload wilcoxontest(x, y)
|
256
|
+
# @param [Array] x xのデータ(double[])
|
257
|
+
# @param [Array] y yのデータ(double[])
|
258
|
+
# @return [double] 検定統計量
|
259
|
+
# @example
|
260
|
+
# x = [37.1, 36.2, 36.6, 37.4, 36.8, 36.7, 36.9, 37.4, 36.6, 36.7]
|
261
|
+
# y = [36.8, 36.6, 36.5, 37.0, 36.0, 36.5, 36.6, 37.1, 36.4, 36.7]
|
262
|
+
# nonParaTest = Num4TstStatisticLib::NonParametrixTestLib.new
|
263
|
+
# nonParaTest.wilcoxon(x, y)
|
264
|
+
# => 46.5
|
265
|
+
# @note
|
266
|
+
# 近似的に標準正規分布 N(0,1*1)に従う
|
267
|
+
def wilcoxon(x, y)
|
268
|
+
return @nonParamTest.wilcoxon(x.to_java(Java::double), y.to_java(Java::double))
|
269
|
+
end
|
270
|
+
# スピアマンの順位相関係数
|
271
|
+
#
|
272
|
+
# @overload spearmanscorr(x, y)
|
273
|
+
# @param [Array] x xのデータ(double[])
|
274
|
+
# @param [Array] y yのデータ(double[])
|
275
|
+
# @return [double] 相関係数
|
276
|
+
# @example
|
277
|
+
# x = [113, 64, 16, 45, 28, 19, 30, 82, 76]
|
278
|
+
# y = [31, 5, 2, 17, 18, 2, 9, 25, 13]
|
279
|
+
# nonParaTest = Num4TstStatisticLib::NonParametrixTestLib.new
|
280
|
+
# nonParaTest.spearmanscorr(x, y)
|
281
|
+
# => 0.745
|
282
|
+
# @note
|
283
|
+
# 無相関検定
|
284
|
+
def spearmanscorr(x, y)
|
285
|
+
return @nonParamTest.spearmanscorr(x.to_java(Java::double), y.to_java(Java::double))
|
286
|
+
end
|
287
|
+
# ケンドールの順位相関係数
|
288
|
+
#
|
289
|
+
# @overload kendallscorr(x, y)
|
290
|
+
# @param [Array] x xのデータ(double[])
|
291
|
+
# @param [Array] y yのデータ(double[])
|
292
|
+
# @return [double] 相関係数
|
293
|
+
# @example
|
294
|
+
# x = [113, 64, 16, 45, 28, 19, 30, 82, 76]
|
295
|
+
# y = [31, 5, 2, 17, 18, 2, 9, 25, 13]
|
296
|
+
# nonParaTest = Num4TstStatisticLib::NonParametrixTestLib.new
|
297
|
+
# nonParaTest.kendallscorr(x, y)
|
298
|
+
# => 0.592
|
299
|
+
# @note
|
300
|
+
# 無相関検定
|
301
|
+
def kendallscorr(x, y)
|
302
|
+
return @nonParamTest.kendallscorr(x.to_java(Java::double), y.to_java(Java::double))
|
303
|
+
end
|
304
|
+
# コルモゴルフ・スミルノフ検定(2標本)
|
305
|
+
#
|
306
|
+
# @overload ks2test(xi1, xi2)
|
307
|
+
# @param [Array] xi1 x1のデータ(double[])
|
308
|
+
# @param [Array] xi2 x2のデータ(double[])
|
309
|
+
# @param [double] xi2 x2のデータ(double[])
|
310
|
+
# @return [boolean] 検定結果(true:棄却域内 false:棄却域外)
|
311
|
+
# @example
|
312
|
+
# xi1 = [165, 130, 182, 178, 194, 206, 160, 122, 212, 165, 247, 195]
|
313
|
+
# xi2 = [180, 180, 235, 270, 240, 285, 164, 152]
|
314
|
+
# nonParaTest = Num4TstStatisticLib::NonParametrixTestLib.new
|
315
|
+
# nonParaTest.ks2test(xi1, xi2, 0.05)
|
316
|
+
# => false
|
317
|
+
# @note
|
318
|
+
# N1+N2-2のt分布に従う
|
319
|
+
def ks2test(xi1, xi2, a)
|
320
|
+
return @nonParamTest.ks2test(xi1.to_java(Java::double), xi2.to_java(Java::double), a)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
class OutlierLib
|
324
|
+
def initialize
|
325
|
+
@outlier = Outlier.getInstance()
|
230
326
|
end
|
231
327
|
# グラプス・スミルノフの外れ値の検定量
|
232
328
|
#
|
@@ -239,25 +335,24 @@ module Num4TstStatisticLib
|
|
239
335
|
# Num4TstStatisticLib.grubbs(xi, 2.2)
|
240
336
|
# => 2.3724
|
241
337
|
# @note
|
242
|
-
#
|
338
|
+
# 外れ値の検定に従う
|
243
339
|
def grubbs(xi, xk)
|
244
|
-
return
|
340
|
+
return @outlier.grubbs(xi.to_java(Java::double), xk)
|
245
341
|
end
|
246
|
-
#
|
342
|
+
# エラーバー出力
|
247
343
|
#
|
248
|
-
# @overload
|
249
|
-
# @param [
|
250
|
-
# @param [Array]
|
251
|
-
# @return [
|
344
|
+
# @overload errbar(dname, xi)
|
345
|
+
# @param [String] dname データ名
|
346
|
+
# @param [Array] xi xiのデータ(double[])
|
347
|
+
# @return [void] errbar.jpegファイルを出力
|
252
348
|
# @example
|
253
|
-
#
|
254
|
-
#
|
255
|
-
#
|
256
|
-
# => 99
|
349
|
+
# xi = [3.4, 3.5, 3.3, 2.2, 3.3, 3.4, 3.6, 3.2]
|
350
|
+
# Num4TstStatisticLib.grubbs("LDH", xi)
|
351
|
+
# => errbar.jpeg
|
257
352
|
# @note
|
258
|
-
#
|
259
|
-
def
|
260
|
-
return
|
353
|
+
# グラフは、jfreechartを使用
|
354
|
+
def errbar(dname, xi)
|
355
|
+
return @outlier.errbar(dname, xi.to_java(Java::double))
|
261
356
|
end
|
262
357
|
end
|
263
358
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: num4tststatistic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- siranovel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -61,8 +61,12 @@ files:
|
|
61
61
|
- Gemfile
|
62
62
|
- LICENSE
|
63
63
|
- Rakefile
|
64
|
-
- ext/num4tststatistic/
|
64
|
+
- ext/num4tststatistic/NonParametrixTest.java
|
65
|
+
- ext/num4tststatistic/Outlier.java
|
66
|
+
- ext/num4tststatistic/ParametrixTest.java
|
65
67
|
- lib/commons-math3-3.6.1.jar
|
68
|
+
- lib/jcommon-1.0.23.jar
|
69
|
+
- lib/jfreechart-1.5.4.jar
|
66
70
|
- lib/num4tststatistic.rb
|
67
71
|
homepage: http://github.com/siranovel/num4tststatistic
|
68
72
|
licenses:
|