t-test (Student's t-test) ใช้เปรียบเทียบค่าเฉลี่ยของสองกลุ่ม ว่าต่างกันอย่างมีนัยสำคัญหรือไม่
สูตร
t = (mean₁ - mean₂) / √(sd₁²/n₁ + sd₂²/n₂)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
float calc_mean(float arr[], int n) {
float sum = 0;
for (int i = 0; i < n; i++) sum += arr[i];
return sum / n;
}
float calc_deviation(float arr[], int n) {
float mean = calc_mean(arr, n);
float sum = 0;
for (int i = 0; i < n; i++)
sum += (arr[i] - mean) * (arr[i] - mean);
return sqrt(sum / (n - 1)); // Sample Standard Deviation
}
float calc_ttest(float arr1[], int n, float arr2[], int m) {
float mean1 = calc_mean(arr1, n);
float mean2 = calc_mean(arr2, m);
float sd1 = calc_deviation(arr1, n);
float sd2 = calc_deviation(arr2, m);
float t_test = (mean1 - mean2) / sqrt((sd1*sd1)/n + (sd2*sd2)/m);
return t_test;
}
int main() {
float arr1[] = {10, 20, 30, 40, 50};
int n = 5;
float arr2[] = {1, 29, 46, 78, 99};
int m = 5;
cout << calc_ttest(arr1, n, arr2, m) << endl;
return 0;
}
ผลลัพธ์
-1.09789
การตีความ
- t ≈ -1.10
- Degrees of freedom ≈ n + m - 2 = 8
- Critical value (α=0.05, two-tailed) ≈ 2.306
- |t| < Critical → ไม่ปฏิเสธ Null Hypothesis (ค่าเฉลี่ยไม่ต่างกันอย่างมีนัยสำคัญ)
การปรับปรุง
- ใช้
doubleแทนfloatสำหรับความแม่นยำ - คำนวณ Mean เพียงครั้งเดียวใน Deviation (Optimization)
- เพิ่มฟังก์ชัน p-value lookup