java中标准差区间的计算
我有一个int数组,它表示钟形分布,因此如果我使用索引作为x轴,使用值作为y值来绘制数据,我将获得如下图形:java中标准差区间的计算,java,statistics,Java,Statistics,我有一个int数组,它表示钟形分布,因此如果我使用索引作为x轴,使用值作为y值来绘制数据,我将获得如下图形: index value 0 46 1 659 2 541 3 519 4 431 5 480 6 441 7 448 8 530 9 557 10 625 11 670 12 818 13 994 14 953 15 1139 16 1221 17 1226 18 1394 19 1772 20 2006 21 235
index value
0 46
1 659
2 541
3 519
4 431
5 480
6 441
7 448
8 530
9 557
10 625
11 670
12 818
13 994
14 953
15 1139
16 1221
17 1226
18 1394
19 1772
20 2006
21 2351
22 2590
23 2785
24 3164
25 3639
26 4304
27 4860
28 5539
29 6340
30 7799
31 9364
32 10912
33 13017
34 15571
35 18633
36 22181
37 26567
38 31027
39 36643
40 42486
41 49997
42 57444
43 65501
44 74261
45 83820
46 93841
47 104361
48 114911
49 125867
50 136503
51 148606
52 158489
53 168585
54 177544
55 185554
56 192791
57 200219
58 203626
59 206432
60 208801
61 207941
62 207363
63 205734
64 201727
65 197152
66 190431
67 182139
68 174938
69 165990
70 155895
71 146229
72 136247
73 126603
74 116665
75 106734
76 97147
77 87350
78 78454
79 70097
80 62644
81 55134
82 48509
83 42327
84 36758
85 32089
86 27850
87 23787
88 20226
89 17071
90 14624
91 12542
92 10511
93 8669
94 7150
95 6054
96 5069
97 4178
98 3390
99 2894
100 2291
101 1963
102 1711
103 1394
104 1191
105 969
106 924
107 802
108 711
109 604
110 562
111 608
112 613
113 633
114 639
115 591
116 662
117 594
118 580
119 626
120 610
121 633
122 605
123 617
124 608
125 558
126 564
127 573
128 521
129 474
130 487
131 475
132 477
133 459
134 439
135 428
136 391
137 355
138 345
139 342
140 353
141 347
142 304
143 302
144 291
145 247
146 234
147 217
148 219
149 187
150 178
151 166
152 147
153 115
154 139
155 118
156 125
157 131
158 108
159 103
160 86
161 99
162 85
163 77
164 68
165 66
166 70
167 57
168 35
169 42
170 45
171 41
172 37
173 37
174 32
175 46
176 37
177 34
178 23
179 40
180 27
181 30
182 33
183 39
184 41
185 51
186 50
187 36
188 31
189 32
190 31
191 24
192 33
193 24
194 30
195 34
196 35
197 32
198 39
199 46
200 6821
在上面的图片中,绿线显示了具有最大值的索引,绿色块表示与最大值的标准偏差(SD)(我不确定SD是否是正确的名称,我听到一些人称之为sigma值)。我想编写一个java函数,它接受这个int数组,并在给定所需SD和max值的情况下输出最低和最高边界。到目前为止,我所掌握的并不多:
public static void getIntervalMinMax(int [] input){
int max = 0;
for(int i=0; i<input.length; i++){
if(input[i]>max){
max = input[i];
}
}
int deviation = ??;
System.out.println("MIN: "+(max-deviation));
System.out.println("MAX: "+(max+deviation));
}
publicstaticvoid getIntervalMinMax(int[]输入){
int max=0;
对于(int i=0;imax){
最大值=输入[i];
}
}
整数偏差=??;
系统输出打印项次(“最小:”+(最大偏差));
系统输出打印项次(“最大:”+(最大+偏差));
}
我已经检查过了,但是我在这个库中找不到一个发行版SD的函数。你能帮我算出如何计算偏差吗?谢谢您可以使用经验样本方差的平方根计算SD,即:
s² = 1/(n-1) * sum_{i=1}^n (y_i - mean(y))^2
编辑:如果你指的是高斯分布,这个密度实际上不是钟形的 您可以使用经验样本方差的平方根计算SD,即:
s² = 1/(n-1) * sum_{i=1}^n (y_i - mean(y))^2
编辑:如果你指的是高斯分布,这个密度实际上不是钟形的 标准偏差用希腊字母sigma表示,因此对于同一事物,sigma值只是另一个相同的值。标准偏差是方差的平方根(也称为西格玛平方)。方差由分布的平均值定义:
variance = sum( data | x ^ 2 ) / n - average( data ) ^ 2
我将创建一个名为Distribution的类,如下所示:
public class Distribution {
private Double[] data;
private double max = Double.NaN;
private double min = Double.NaN;
private double variance = Double.NaN;
private double average = Double.NaN;
public getMax() {
if( max == Double.NaN ) {
calculateStats();
}
return max;
}
// each method getMin, getAverage, getVariance, etc would be written the same way as getMax().
private void calculateStats() {
min = Double.MAX_VALUE;
max = Double.MIN_VALUE;
average = 0;
variance = 0;
for( int i = 0; i < data.length; i++ ) {
double sample = data[i];
if( sample > max ) max = sample;
if( sample < min ) min = sample;
average += sample;
variance += sample * sample;
}
average = average / data.length;
variance = variance / data.length - average * average;
}
public double getStandardDeviation() {
if( variance == Double.NaN ) {
calculateStats();
}
return Math.sqrt( variance );
}
}
公共类分发{
私有双[]数据;
私有双最大值=double.NaN;
私有双最小值=double.NaN;
私人双方差=double.NaN;
私人双平均=double.NaN;
公共getMax(){
如果(max==Double.NaN){
calculateStats();
}
返回最大值;
}
//每个方法getMin、getAverage、getVariance等的编写方式都与getMax()相同。
私有计算属性(){
最小值=双最大值;
最大值=双最小值;
平均值=0;
方差=0;
对于(int i=0;i最大值)最大值=样本;
如果(样本<最小值)最小值=样本;
平均+=样本;
方差+=样本*样本;
}
平均值=平均值/数据长度;
方差=方差/数据长度-平均值*平均值;
}
公共双标准差(){
如果(方差==Double.NaN){
calculateStats();
}
返回数学sqrt(方差);
}
}
标准偏差用希腊字母sigma表示,因此对于同一事物,sigma值只是另一个相同的值。标准偏差是方差的平方根(也称为西格玛平方)。方差由分布的平均值定义:
variance = sum( data | x ^ 2 ) / n - average( data ) ^ 2
我将创建一个名为Distribution的类,如下所示:
public class Distribution {
private Double[] data;
private double max = Double.NaN;
private double min = Double.NaN;
private double variance = Double.NaN;
private double average = Double.NaN;
public getMax() {
if( max == Double.NaN ) {
calculateStats();
}
return max;
}
// each method getMin, getAverage, getVariance, etc would be written the same way as getMax().
private void calculateStats() {
min = Double.MAX_VALUE;
max = Double.MIN_VALUE;
average = 0;
variance = 0;
for( int i = 0; i < data.length; i++ ) {
double sample = data[i];
if( sample > max ) max = sample;
if( sample < min ) min = sample;
average += sample;
variance += sample * sample;
}
average = average / data.length;
variance = variance / data.length - average * average;
}
public double getStandardDeviation() {
if( variance == Double.NaN ) {
calculateStats();
}
return Math.sqrt( variance );
}
}
公共类分发{
私有双[]数据;
私有双最大值=double.NaN;
私有双最小值=double.NaN;
私人双方差=double.NaN;
私人双平均=double.NaN;
公共getMax(){
如果(max==Double.NaN){
calculateStats();
}
返回最大值;
}
//每个方法getMin、getAverage、getVariance等的编写方式都与getMax()相同。
私有计算属性(){
最小值=双最大值;
最大值=双最小值;
平均值=0;
方差=0;
对于(int i=0;i最大值)最大值=样本;
如果(样本<最小值)最小值=样本;
平均+=样本;
方差+=样本*样本;
}
平均值=平均值/数据长度;
方差=方差/数据长度-平均值*平均值;
}
公共双标准差(){
如果(方差==Double.NaN){
calculateStats();
}
返回数学sqrt(方差);
}
}
哪个是问题?让我编辑问题您查看了Apache发行版数学包了吗?哪个是问题?让我编辑问题您查看了Apache发行版数学包了吗?我不太擅长统计,但我想知道这个解决方案是否计算了与平均值的偏差,而不是与平均值的偏差最大标准偏差始终使用平均值计算。你可以用(max-min)/4来近似它,但这只是一个粗略的近似值,不应该用作标准差。我不太擅长统计,但我想知道这个解决方案是否计算平均值而不是最大值的偏差。标准差总是使用平均值来计算的。您可以使用(max-min)/4来近似它,但这只是一个粗略的近似值,不应该用作标准偏差。