How to find correlation between two integer arrays in java

后端 未结 2 1892
长发绾君心
长发绾君心 2021-02-20 06:48

I am searching a lot but could not find exactly what i need till now. I have two integer arrayas int[] x and int[] y. I want to find simple linear

相关标签:
2条回答
  • 2021-02-20 07:09

    There is nothing in core Java. There are libraries out there you can use. Apache Commons has a statistical project, check PearsonCorrelation class.

    Sample code:

    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);
    }
    

    prints out 1.0

    0 讨论(0)
  • 2021-02-20 07:28

    Correlation is quite easy to compute manually:

    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;
      }
    
    0 讨论(0)
提交回复
热议问题