0

ベル型の分布を表す 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  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 が適切な名前かどうかはわかりません。シグマ値と呼ぶ人もいます。 )。この int 配列を取り、目的の SD と最大値を指定して最低境界と最高境界を出力する Java 関数を作成したいと考えています。私がこれまでに持っているものはあまりありません:

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

この投稿を確認しましたが、このライブラリでディストリビューション SD 用の関数を見つけることができませんでした。偏差値の計算方法を教えてください。ありがとう

4

2 に答える 2

3

標準偏差はギリシャ文字のシグマで表されるため、シグマ値は同じものに対する別の同じものです。標準偏差は分散の平方根です (シグマ スクエアとも呼ばれます)。分散は、分布の平均によって定義されます。

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 );
    }
}
于 2013-02-21T21:10:12.843 に答える
1

次の経験的標本分散から平方根を使用して SD を計算できます。

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

編集:ガウス分布を参照する場合、この密度は実際にはベル型ではありません!

于 2013-02-21T21:09:36.780 に答える