Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 상관 계수 구하는 프로그램 작성하기

개요

이 튜토리얼에서는 C++을 사용하여 상관 계수(Correlation Coefficient)를 계산하는 프로그램을 작성하는 방법을 알아봅니다.

상관 계수는 두 변수 사이의 관계가 얼마나 강한지를 나타내는 통계적 지표입니다. 값의 범위는 -1부터 +1까지이며, +1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계를 의미합니다.

여기서는 두 개의 배열이 주어졌을 때, 해당 값들 사이의 관계 강도를 나타내는 상관 계수를 구하는 것이 목표입니다.

피어슨 상관 계수 공식

본 예제에서 사용되는 것은 가장 널리 쓰이는 피어슨 상관 계수(Pearson Correlation Coefficient)이며, 공식은 다음과 같습니다.

r = (n·ΣXY − ΣX·ΣY) / √[(n·ΣX² − (ΣX)²) × (n·ΣY² − (ΣY)²)]

C++ 구현 예제

#include<bits/stdc++.h>
using namespace std;

// 상관 계수를 반환하는 함수
float find_coefficient(int X[], int Y[], int n){
    int sum_X = 0, sum_Y = 0, sum_XY = 0;
    int squareSum_X = 0, squareSum_Y = 0;
    for (int i = 0; i < n; i++){
        sum_X = sum_X + X[i];
        sum_Y = sum_Y + Y[i];
        sum_XY = sum_XY + X[i] * Y[i];
        squareSum_X = squareSum_X + X[i] * X[i];
        squareSum_Y = squareSum_Y + Y[i] * Y[i];
    }
    float corr = (float)(n * sum_XY - sum_X * sum_Y)
                 / sqrt((n * squareSum_X - sum_X * sum_X)
                        * (n * squareSum_Y - sum_Y * sum_Y));
    return corr;
}

int main(){
    int X[] = {15, 18, 21, 24, 27};
    int Y[] = {25, 25, 27, 31, 32};
    int n = sizeof(X)/sizeof(X[0]);
    cout<<find_coefficient(X, Y, n);
    return 0;
}

코드 동작 원리

함수 내부에서는 반복문을 통해 다음 다섯 가지 값을 한 번에 누적 계산합니다.

  • sum_X: 배열 X 요소들의 합
  • sum_Y: 배열 Y 요소들의 합
  • sum_XY: X[i] × Y[i] 곱의 합
  • squareSum_X: X[i] 제곱의 합
  • squareSum_Y: Y[i] 제곱의 합

반복문이 끝나면 위에서 소개한 피어슨 상관 계수 공식에 대입하여 최종 결과를 계산한 뒤 반환합니다.

실행 결과

0.953463

결과값이 약 0.953으로 1에 매우 가까운 양수이므로, 두 배열 X와 Y 사이에는 매우 강한 양의 상관관계가 있다고 해석할 수 있습니다. 즉, X의 값이 증가할 때 Y의 값도 함께 증가하는 경향이 뚜렷하다는 의미입니다.