2016-08-25
Java覚書 ExcelのSLOPE関数をJava化してみる
回帰直線の傾きを求めるExcelのSLOPE関数をJavaで作成してみる。
public class Main { public static void main(String[] args) throws Exception { // y値のみで、かつ、int型 int y[] = new int[]{70,80,30,40,50,20}; slope(y); // x,y値で、かつ、float型 float[][] xy = { {2.5F,10.3F} , {3.0F,24.3F} , {3.2F,30.5F} , {5.0F,42.5F} , {6.1F,53.4F} , {8.9F,48.8F} }; slope(xy); } // 回帰直線の傾きを算出(int型 y値のみ渡す) static float slope(int val[]) { float[][] f = new float[val.length][2]; int i = 0; for(int v : val) { f[i][0] = (float)i; f[i][1] = (float)v; i++; } return slope(f); } // 回帰直線の傾きを算出(float型 x, y値を渡す) static float slope(float[][] val) { float sumX = 0; float sumY = 0; float sumXX = 0; float sumXY = 0; float n = val.length; for(int i = 0; i < val.length; i++){ float x = (float)val[i][0]; float y = (float)val[i][1]; sumX += x; sumY += y; sumXX += x*x; sumXY += x*y; } System.out.println("a : " + (float) (n*sumXY-sumX*sumY) / (float) (n*sumXX-sumX*sumX)); System.out.println("b : " + (float) (sumXX*sumY - sumXY*sumX) / (float) (n*sumXX - sumX*sumX)); return (float) (n*sumXY-sumX*sumY) / (float) (n*sumXX-sumX*sumX); } }