昔作ったこんな関数
ピアソンの積率相関係数が必要になって C# で作ったのが見つかったのでせっかくなので張ってみる。
計算式は http://aoki2.si.gunma-u.ac.jp/JavaScript/src/corr2.html を参考にしています。
//RSQ //ピアソンの積率相関係数の2乗 public static double RSQ(double[] inX, double[] inY) { double r = CORREF(inX, inY); return r * r; } //CORREF //ピアソンの積率相関係数 //http://aoki2.si.gunma-u.ac.jp/JavaScript/src/corr2.html public static double CORREF(double[] inX, double[] inY) { Debug.Assert (inX.Length == inY.Length); int i = 0; int n = inX.Length; double mx = 0; double my = 0; for (i = 0; i < n; i++) { mx += inX[i]; my += inY[i]; } mx /= n; my /= n; double vx = 0; double vy = 0; double vxy = 0; for (i = 0; i < n; i++) { vx += Math.Pow(inX[i]-mx, 2); vy += Math.Pow(inY[i]-my, 2); vxy += (inX[i]-mx)*(inY[i]-my); } vx /= n-1; vy /= n-1; vxy /= n-1; double sdx = Math.Sqrt(vx); double sdy = Math.Sqrt(vy); if (sdx*sdy == 0) {//計算不能 return double.NaN; } //ピアソンの積率相関係数 return vxy/sdx/sdy; }