2009年8月4日火曜日

共分散 (covariance)

公式

C言語での実装

式(3) を実装。ゼロ除算を防ぐために、nが0(0以下)の場合は0を返すようにする。
#include <stdio.h>
#include <math.h>

/* ---------------------------------------------
  共分散を計算する
  引数1: x データ1
  引数2: y データ2
  引数3: n xとyの要素数
  戻り値 共分散
 ---------------------------------------------*/
double covariance(double *x, double *y, int n)
{
    int i;
    double sum_x = 0.0, sum_y = 0.0;
    double avg_x, avg_y;
    double sumprod = 0.0;

    if ( n < 1 ) return 0.0;

    for (i = 0; i < n; i++) {
        sum_x += x[i]; /* xの和 */
        sum_y += y[i]; /* yの和 */
        sumprod += x[i] * y[i];
    }

    avg_x = sum_x / (double)n; /* xの平均 */
    avg_y = sum_y / (double)n; /* yの平均 */
    return sumprod / (double)n - avg_x * avg_y; /* 共分散 */
}


/* main */
int main(void)
{
    double x[] = {1.0, 2.0, 3.0};
    double y[] = {1.0, 2.0, 3.0};
    double cov;

    cov = covariance(x, y, 3);
    printf("共分散:%f\n", cov);

    return 0;
}
実行例
共分散:0.666667

0 件のコメント:

コメントを投稿