Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

C++ Program: t-test สำหรับเปรียบเทียบค่าเฉลี่ยสองกลุ่ม

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