関連情報
ホーム > 製品 > NAG数値計算ライブラリ > サンプルソースコード集 > ピアソンの積率相関係数と分散共分散行列の計算 (C言語/C++)

ピアソンの積率相関係数と分散共分散行列の計算

C言語によるサンプルソースコード
使用関数名:nag_corr_cov (g02bxc)

Keyword: ピアソン, 積率相関係数, 分散共分散行列, 計算

概要

本サンプルはピアソンの積率相関係数と分散共分散行列の計算を行うC言語によるサンプルプログラムです。 本サンプルは以下に示される観測値について平均、標準偏差、分散共分散行列、ピアソンの積率相関係数(Pearson product-moment correlation coefficients)の計算を行います。

分散共分散行列のデータ 

※本サンプルはNAG Cライブラリに含まれる関数 nag_corr_cov() のExampleコードです。本サンプル及び関数の詳細情報は nag_corr_cov のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本関数の詳細はnag_corr_cov のマニュアルページを参照)

このデータをダウンロード
nag_corr_cov (g02bxc) Example Program Data
3 3 w
  9.1231   3.7011   4.5230
  0.9310   0.0900   0.8870
  0.0009   0.0099   0.0999
  0.1300   1.3070   0.3700

3 3 w
  0.1300   1.3070   0.3700
  9.1231   3.7011   4.5230
  0.9310   0.0900   0.8870
  0.0009   0.0099   0.0999

3 3 u
  0.717   9.370   0.013
  1.119   0.133   9.700
 11.100  23.510  11.117
  0.900   9.013   8.710

3 3 w
  0.717  19.370   0.013
  1.119   0.133   9.700
 11.100  23.510  11.117
  0.900   9.013  78.710

3 3 u
  0.717  19.370   0.013
  1.119   0.133   9.700
 11.100   3.510  13.117
  0.900   0.013  78.710

3 3 w
  0.717  19.370   0.913
  1.119   0.133   9.700
 17.100  93.510  13.117
 30.900   0.013  78.710

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "w"は重みづけをすることを意味します)を指定しています。
  • 3行目に各観測値への重み(wt)を指定しています。
  • 4〜6行目は観測値(x)を指定しています。
  • 8行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "w"は重みづけをすることを意味します)を指定しています。
  • 9行目に各観測値への重み(wt)を指定しています。
  • 10〜12行目は観測値(x)を指定しています。
  • 14行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "u"は重みづけをしないことを意味します)を指定しています。
  • 15行目に各観測値への重み(wt)を指定しています。
  • 16〜18行目は観測値(x)を指定しています。
  • 20行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "w"は重みづけをすることを意味します)を指定しています。
  • 21行目に各観測値への重み(wt)を指定しています。
  • 22〜24行目は観測値(x)を指定しています。
  • 26行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "u"は重みづけをしないことを意味します)を指定しています。
  • 27行目に各観測値への重み(wt)を指定しています。
  • 28〜30行目は観測値(x)を指定しています。
  • 32行目に変数の数(m)、観測値の数(n)、重みづけをするかどうかを示すフラグ(w: "w"は重みづけをすることを意味します)を指定しています。
  • 33行目に各観測値への重み(wt)を指定しています。
  • 34〜36行目は観測値(x)を指定しています。

出力結果

(本関数の詳細はnag_corr_cov のマニュアルページを参照)

この出力例をダウンロード
nag_corr_cov (g02bxc) Example Program Results

Case 1 --- Using weights

Input data
   0.9   0.1   0.9   9.1
   0.0   0.0   0.1   3.7
   0.1   1.3   0.4   4.5

Sample means.
   0.5
   0.4
   0.6

Standard deviation.
   0.4
   0.6
   0.3

Correlation matrix.
   1.0000    -0.4932     0.9839  
  -0.4932     1.0000    -0.3298  
   0.9839    -0.3298     1.0000  

Variance matrix.
    0.197     -0.123      0.149  
   -0.123      0.316     -0.063  
    0.149     -0.063      0.117  

Sum of weights   17.3

Case 2 --- Using weights

Input data
   9.1   3.7   4.5   0.1
   0.9   0.1   0.9   1.3
   0.0   0.0   0.1   0.4

Sample means.
   1.3
   0.3
   1.0

Standard deviation.
   3.3
   1.4
   1.5

Correlation matrix.
   1.0000     0.9908     0.9903  
   0.9908     1.0000     0.9624  
   0.9903     0.9624     1.0000  

Variance matrix.
   10.851      4.582      5.044  
    4.582      1.971      2.089  
    5.044      2.089      2.391  

Sum of weights    1.8

Case 3 --- Not using weights

Input data
   1.1   0.1   9.7   0.7
  11.1  23.5  11.1   9.4
   0.9   9.0   8.7   0.0

Sample means.
   4.4
  10.9
   9.8

Standard deviation.
   5.8
  11.8
   1.2

Correlation matrix.
   1.0000     0.9193     0.9200  
   0.9193     1.0000     0.6915  
   0.9200     0.6915     1.0000  

Variance matrix.
   33.951     63.208      6.485  
   63.208    139.250      9.871  
    6.485      9.871      1.464  

Sum of weights    3.0

Case 4 --- Using weights

Input data
   1.1   0.1   9.7   0.7
  11.1  23.5  11.1  19.4
   0.9   9.0  78.7   0.0

Sample means.
  10.7
  22.7
  11.1

Standard deviation.
   1.9
   4.5
   1.8

Correlation matrix.
   1.0000     0.9985     0.0173  
   0.9985     1.0000     0.0716  
   0.0173     0.0716     1.0000  

Variance matrix.
    3.672      8.538      0.059  
    8.538     19.909      0.570  
    0.059      0.570      3.185  

Sum of weights   20.1

Case 5 --- Not using weights

Input data
   1.1   0.1   9.7   0.7
  11.1   3.5  13.1  19.4
   0.9   0.0  78.7   0.0

Sample means.
   4.4
   1.2
  33.8

Standard deviation.
   5.8
   2.0
  38.9

Correlation matrix.
   1.0000     0.9999    -0.4781  
   0.9999     1.0000    -0.4881  
  -0.4781    -0.4881     1.0000  

Variance matrix.
   33.951     11.567    -108.343  
   11.567      3.941    -37.687  
  -108.343    -37.687    1512.750  

Sum of weights    3.0

Case 6 --- Using weights

Input data
   1.1   0.1   9.7   0.7
  17.1  93.5  13.1  19.4
  30.9   0.0  78.7   0.9

Sample means.
  17.2
  86.3
  15.9

Standard deviation.
   4.2
  25.6
  13.7

Correlation matrix.
   1.0000    -0.0461     0.7426  
  -0.0461     1.0000    -0.7033  
   0.7426    -0.7033     1.0000  

Variance matrix.
   17.846     -4.989     43.123  
   -4.989    656.407    -247.692  
   43.123    -247.692    188.970  

Sum of weights   21.0

  • 3〜30行目にケース1(重みづけ使用)の計算結果が出力されています。
  • 5〜8行目に入力データが出力されています。
  • 10〜13行目に標本平均が出力されています。
  • 15〜18行目に標準偏差が出力されています。
  • 20〜23行目に相関行列が出力されています。
  • 25〜28行目に分散行列が出力されています。
  • 30行目に重みの合計が出力されています。
  • 32〜59行目にケース2(重みづけ使用)の計算結果が出力されています。
  • 34〜37行目に入力データが出力されています。
  • 39〜42行目に標本平均が出力されています。
  • 44〜47行目に標準偏差が出力されています。
  • 49〜52行目に相関行列が出力されています。
  • 54〜57行目に分散行列が出力されています。
  • 59行目に重みの合計が出力されています。
  • 61〜88行目にケース3(重みづけ使用せず)の計算結果が出力されています。
  • 63〜66行目に入力データが出力されています。
  • 68〜71行目に標本平均が出力されています。
  • 73〜76行目に標準偏差が出力されています。
  • 78〜81行目に相関行列が出力されています。
  • 83〜86行目に分散行列が出力されています。
  • 88行目に重みの合計が出力されています。
  • 90〜117行目にケース4(重みづけ使用)の計算結果が出力されています。
  • 92〜95行目に入力データが出力されています。
  • 97〜100行目に標本平均が出力されています。
  • 102〜105行目に標準偏差が出力されています。
  • 107〜110行目に相関行列が出力されています。
  • 112〜115行目に分散行列が出力されています。
  • 117行目に重みの合計が出力されています。
  • 119〜146行目にケース5(重みづけ使用せず)の計算結果が出力されています。
  • 121〜124行目に入力データが出力されています。
  • 126〜129行目に標本平均が出力されています。
  • 131〜134行目に標準偏差が出力されています。
  • 136〜139行目に相関行列が出力されています。
  • 141〜144行目に分散行列が出力されています。
  • 146行目に重みの合計が出力されています。
  • 148〜175行目にケース6(重みづけ使用)の計算結果が出力されています。
  • 150〜153行目に入力データが出力されています。
  • 155〜158行目に標本平均が出力されています。
  • 160〜163行目に標準偏差が出力されています。
  • 165〜168行目に相関行列が出力されています。
  • 170〜173行目に分散行列が出力されています。
  • 175行目に重みの合計が出力されています。

ソースコード

(本関数の詳細はnag_corr_cov のマニュアルページを参照)

※本サンプルソースコードはNAG数値計算ライブラリ(Windows, Linux, MAC等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
/* nag_corr_cov (g02bxc) Example Program.
 *
 * CLL6I261D/CLL6I261DL Version.
 *
 * Copyright 2017 Numerical Algorithms Group.
 *
 * Mark 26.1, 2017.
 */

#include <nag.h>
#include <stdio.h>
#include <nag_stdlib.h>
#include <nagg02.h>

#define X(I, J) x[(I) *tdx + J]
#define R(I, J) r[(I) *tdr + J]
#define V(I, J) v[(I) *tdv + J]
int main(void)
{
  Integer exit_status = 0, i, j, m, n, tdr, tdv, tdx, test;
  NagError fail;
  char w;
  double *r = 0, *std = 0, sw, *v = 0, *wmean = 0, *wt = 0, *wtptr, *x = 0;

  INIT_FAIL(fail);

  printf("nag_corr_cov (g02bxc) Example Program Results\n");

  /* Skip heading in data file */
  scanf("%*[^\n]");

  test = 0;
  while ((scanf("%ld%ld %c", &m, &n, &w) != EOF))
  {
    if (m >= 1 && n >= 1) {
      if (!(x = NAG_ALLOC(n * m, double)) ||
          !(r = NAG_ALLOC(m * m, double)) ||
          !(v = NAG_ALLOC(m * m, double)) ||
          !(wt = NAG_ALLOC(n, double)) ||
          !(wmean = NAG_ALLOC(m, double)) || !(std = NAG_ALLOC(m, double)))
      {
        printf("Allocation failure\n");
        exit_status = -1;
        goto END;
      }
      tdx = m;
      tdr = m;
      tdv = m;
    }
    else {
      printf("Invalid m or n.\n");
      exit_status = 1;
      return exit_status;
    }
    for (i = 0; i < n; i++)
      scanf("%lf", &wt[i]);
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++)
        scanf("%lf", &X(i, j));

    if (w == 'w')
      wtptr = wt;
    else
      wtptr = (double *) 0;

    /* nag_corr_cov (g02bxc).
     * Product-moment correlation, unweighted/weighted
     * correlation and covariance matrix, allows variables to be
     * disregarded
     */
    nag_corr_cov(n, m, x, tdx, (Integer *) 0, wtptr, &sw, wmean, std,
                 r, tdr, v, tdv, &fail);
    if (fail.code != NE_NOERROR) {
      printf("Error from nag_corr_cov (g02bxc).\n%s\n", fail.message);
      exit_status = 1;
      goto END;
    }

    if (wtptr)
      printf("\nCase %ld --- Using weights\n", ++test);
    else
      printf("\nCase %ld --- Not using weights\n", ++test);

    printf("\nInput data\n");
    for (i = 0; i < n; i++)
      printf("%6.1f%6.1f%6.1f%6.1f\n", X(i, 0), X(i, 1), X(i, 2), wt[i]);

    printf("\n");
    printf("Sample means.\n");
    for (i = 0; i < m; i++)
      printf("%6.1f\n", wmean[i]);
    printf("\nStandard deviation.\n");
    for (i = 0; i < m; i++)
      printf("%6.1f\n", std[i]);

    printf("\nCorrelation matrix.\n");
    for (i = 0; i < m; i++) {
      for (j = 0; j < m; j++)
        printf("  %7.4f  ", R(i, j));
      printf("\n");
    }

    printf("\nVariance matrix.\n");
    for (i = 0; i < m; i++) {
      for (j = 0; j < m; j++)
        printf("  %7.3f  ", V(i, j));
      printf("\n");
    }
    printf("\nSum of weights %6.1f\n", sw);
  END:
    NAG_FREE(x);
    NAG_FREE(r);
    NAG_FREE(v);
    NAG_FREE(wt);
    NAG_FREE(wmean);
    NAG_FREE(std);
  }
  return exit_status;
}


Results matter. Trust NAG.

Privacy Policy | Trademarks