Keyword: ピアソン, 積率相関係数, 分散共分散行列, 計算
概要
本サンプルはピアソンの積率相関係数と分散共分散行列の計算を行うC言語によるサンプルプログラムです。 本サンプルは以下に示される観測値について平均、標準偏差、分散共分散行列、ピアソンの積率相関係数(Pearson product-moment correlation coefficients)の計算を行います。
※本サンプルはnAG Cライブラリに含まれる関数 nag_corr_cov() のExampleコードです。本サンプル及び関数の詳細情報は nag_corr_cov のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はnag_corr_cov のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
このデータをダウンロード |
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 のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
この出力例をダウンロード |
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等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
このソースコードをダウンロード |
/* 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; }