web-dev-qa-db-ja.com

java)で2つの整数配列間の相関を見つける方法

私はたくさん検索していますが、今まで必要なものを正確に見つけることができませんでした。私は2つの整数配列を持っていますint[] xおよびint[] y。これらの2つの整数配列間の単純な線形相関を見つけたいのですが、結果はdoubleとして返されます。 Javaで、これまたはコードスニペットを提供するライブラリ関数を知っていますか?

11

相関は非常に手動で計算するのは簡単です:

http://en.wikipedia.org/wiki/Correlation_and_dependence

  public static double Correlation(int[] xs, int[] ys) {
    //TODO: check here that arrays are not null, of the same length etc

    double sx = 0.0;
    double sy = 0.0;
    double sxx = 0.0;
    double syy = 0.0;
    double sxy = 0.0;

    int n = xs.length;

    for(int i = 0; i < n; ++i) {
      double x = xs[i];
      double y = ys[i];

      sx += x;
      sy += y;
      sxx += x * x;
      syy += y * y;
      sxy += x * y;
    }

    // covariation
    double cov = sxy / n - sx * sy / n / n;
    // standard error of x
    double sigmax = Math.sqrt(sxx / n -  sx * sx / n / n);
    // standard error of y
    double sigmay = Math.sqrt(syy / n -  sy * sy / n / n);

    // correlation is just a normalized covariation
    return cov / sigmax / sigmay;
  }
10
Dmitry Bychenko

コアJavaには何もありません。使用できるライブラリがあります。 Apache Commonsには 統計プロジェクト があります。チェック PearsonCorrelation クラス。

サンプルコード:

public static void main(String[] args) {
    double[] x = {1, 2, 4, 8};
    double[] y = {2, 4, 8, 16};
    double corr = new PearsonsCorrelation().correlation(y, x);

    System.out.println(corr);
}

1.0を出力します

7
Hamed Moghaddam