C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で共分散を計算するプログラムの作成方法

このチュートリアルでは、C++を使って共分散を求めるプログラムの作成方法について解説します。

ここでは、2組の数値データ(確率変数)が与えられ、それらの共分散を計算します。共分散とは、2つの変数がどの程度連動して変動するかを示す統計的な指標のことです。

共分散とは

共分散は、2つの変数の関係性を測るための統計量です。片方の変数が大きくなるときにもう片方も大きくなる傾向があれば正の値になり、逆の傾向があれば負の値になります。共分散は次の式で求められます。

cov(X, Y) = Σ(xi − x̄)(yi − ȳ) / (n − 1)

ここで、x̄とȳはそれぞれのデータセットの平均値、nはデータ数を表します。

サンプルコード

#include<bits/stdc++.h>
using namespace std;
// 平均値を求める関数
float mean(float arr[], int n){
    float sum = 0;
    for(int i = 0; i < n; i++)
    sum = sum + arr[i];
    return sum / n;
}
// 共分散を求める関数
float covariance(float arr1[], float arr2[], int n){
    float sum = 0;
    for(int i = 0; i < n; i++)
        sum = sum + (arr1[i] - mean(arr1, n)) * (arr2[i] - mean(arr2, n));
    return sum / (n - 1);
}
int main(){
    float arr1[] = {65.21, 64.75, 65.26, 65.76, 65.96};
    int n = sizeof(arr1) / sizeof(arr1[0]);
    float arr2[] = {67.25, 66.39, 66.12, 65.70, 66.64};
    int m = sizeof(arr2) / sizeof(arr2[0]);
    if (m == n)
        cout << covariance(arr1, arr2, m);
    return 0;
}

実行結果

-0.0580511

コードの解説

mean関数:配列内の全要素の合計を計算し、要素数で割ることで平均値を返します。

covariance関数:各データ点からそれぞれの平均値を差し引き、その偏差同士を掛け合わせた値をすべて合計します。最後に(n − 1)で割ることで標本共分散を求めます。この(n − 1)による除算は「不偏推定」と呼ばれる手法で、標本データから母集団の共分散をより正確に推定するために用いられます。

main関数:2つのfloat型配列を定義し、sizeof演算子を使って各配列の要素数を計算しています。両方の配列の要素数が一致している場合のみ、covariance関数を呼び出して結果を出力します。これは、共分散の計算には必ずペアとなる同数のデータが必要だからです。

結果の読み方

実行結果である-0.0580511という負の値は、この2つのデータセットの間に弱い負の相関があることを示しています。つまり、一方の値が増加すると、もう一方の値が減少する傾向があるということです。値の絶対値が小さいため、その関連性は比較的弱いと言えます。

  1. C++で線分の中点を求める方法とサンプルコード

    本記事では、C++を使って線分の中点(ミッドポイント)を求めるプログラムの作成方法を解説します。線分の始点Aと終点Bの2つの座標が与えられたとき、その中点を計算するアルゴリズムについて学びましょう。 問題の概要 始点A(x1, y1)と終点B(x2, y2)で構成される線分があります。この線分の中点を求めるのが課題です。 入力例 a(x1, y1) = (4, -5) b(x2, y2) = (-2, 6) 出力例 (1, 0.5) 計算の説明 (x1 + x2)/2 = (4 + (-2)) / 2 = 1 (y1 + y2)/2 = (-5 + 6) / 2 = 0.5 解決アプローチ:中

  2. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ