2013-02-21 43 views
0

我有一个int数组表示钟形分布,因此如果我使用索引作为x轴绘制数据并将这些值作为y值,我将获得这样的图形:在java中计算标准偏差间隔

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 

enter image description here

在上面的绿线图像示出了具有最大值的索引和绿色块表示从最大标准偏差(SD)(我不知道如果SD是正确的名字,我听说有人称它为西格马值)。我想写一个java函数,它接受这个int数组,并输出给定​​所需SD和最大值的最低和最高边界。我至今并不多:

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)); 
} 

我已经检查这个post但我还没有能够找到一个函数在这个库的分布SD。你能帮我弄清楚如何计算偏差?

s² = 1/(n-1) * sum_{i=1}^n (y_i - mean(y))^2 

编辑:这种密度其实不是钟形的,如果你指的是高斯分布感谢

+0

这是问题的差异是由平均分布的定义? – SJuan76 2013-02-21 21:01:48

+0

让我编辑问题 – 2013-02-21 21:02:52

+0

你看看Apache的分布数学软件包http://commons.apache.org/math/userguide/distribution.html? – 2013-02-21 21:06:16

回答

2

标准偏差由希腊字母sigma表示,所以sigma值对于同样的事情只是另一个相同的东西。标准偏差是方差的平方根(也称为西格玛平方)。

variance = sum(data | x^2)/n - average(data)^2 

我想创建一个名为分布类,像这样:

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); 
    } 
} 
+0

我不是很擅长统计数据,但是我想知道这个解决方案是否计算了平均偏差而不是最大偏差。 – 2013-02-21 21:30:26

+0

标准偏差总是使用平均值计算。你可以用(max - min)/ 4近似它,但这只是一个粗略的近似值,不应该用作标准偏差。 – chubbsondubs 2013-02-24 20:10:18

0

您可以从实证样本方差的平方根是计算SD!