Grouped Data: มี Class Interval (ช่วงขอบเขต) และ Frequency (ความถี่) หา Standard Deviation
สูตร
Midpoint = (Lower + Upper) / 2
Mean = Σ(f×mid) / Σf
SD = √[ Σ(f×mid²) - Σf×Mean² ] / (Σf - 1)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
float calc_mean(float mid[], int freq[], int n) {
float sum = 0, freqSum = 0;
for (int i = 0; i < n; i++) {
sum += mid[i] * freq[i];
freqSum += freq[i];
}
return sum / freqSum;
}
float calc_deviation(float lower[], float upper[], int freq[], int n) {
float mid[n], sum = 0, freqSum = 0;
for (int i = 0; i < n; i++) {
mid[i] = (lower[i] + upper[i]) / 2;
sum += freq[i] * mid[i] * mid[i];
freqSum += freq[i];
}
float mean = calc_mean(mid, freq, n);
float sd = sqrt((sum - freqSum * mean * mean) / (freqSum - 1));
return sd;
}
int main() {
float lower[] = {50, 61, 71, 86, 96};
float upper[] = {60, 70, 85, 95, 100};
int freq[] = {9, 7, 9, 12, 8};
int n = 5;
cout << calc_deviation(lower, upper, freq, n) << endl;
return 0;
}
ผลลัพธ์
15.757
ตารางข้อมูล
| Class | Midpoint | Freq | f×mid | f×mid² |
|---|---|---|---|---|
| 50-60 | 55 | 9 | 495 | 27225 |
| 61-70 | 65.5 | 7 | 458.5 | 30031.75 |
| 71-85 | 78 | 9 | 702 | 54756 |
| 86-95 | 90.5 | 12 | 1086 | 98283 |
| 96-100 | 98 | 8 | 784 | 76832 |
| Sum | 45 | 3525.5 | 287127.75 |
Mean = 3525.5/45 = 78.344
SD = √[(287127.75 - 45×78.344²)/44] ≈ 15.757 ✓