I have linear regression code written in R and I have to do the same thing in Java. I used Apache Commons math library for this. I used the same data in R code and in Java code, but I got different intercept value. I could not figure out what stupid thing I have done in the code.
R Code:
test_trait <- c( -0.48812477 , 0.33458213, -0.52754476, -0.79863471, -0.68544309, -0.12970239, 0.02355622, -0.31890850,0.34725819 , 0.08108851)
geno_A <- c(1, 0, 1, 2, 0, 0, 1, 0, 1, 0)
geno_B <- c(0, 0, 0, 1, 1, 0, 0, 0, 0, 0)
fit <- lm(test_trait ~ geno_A*geno_B)
fit
R Output:
Call:
lm(formula = test_trait ~ geno_A * geno_B)
Coefficients:
(Intercept) geno_A geno_B geno_A:geno_B
-0.008235 -0.152979 -0.677208 0.096383
Java Code (includes EDIT1):
package linearregression;
import org.apache.commons.math3.stat.regression.SimpleRegression;
public class LinearRegression {
public static void main(String[] args) {
double[][] x = {{1,0},
{0,0},
{1,0},
{2,1},
{0,1},
{0,0},
{1,0},
{0,0},
{1,0},
{0,0}
};
double[]y = { -0.48812477,
0.33458213,
-0.52754476,
-0.79863471,
-0.68544309,
-0.12970239,
0.02355622,
-0.31890850,
0.34725819,
0.08108851
};
SimpleRegression regression = new SimpleRegression(true);
regression.addObservations(x,y);
System.out.println("Intercept: \t\t"+regression.getIntercept());
// EDIT 1 -----------------------------------------------------------
System.out.println("InterceptStdErr: \t"+regression.getInterceptStdErr());
System.out.println("MeanSquareError: \t"+regression.getMeanSquareError());
System.out.println("N: \t\t\t"+regression.getN());
System.out.println("R: \t\t\t"+regression.getR());
System.out.println("RSquare: \t\t"+regression.getRSquare());
System.out.println("RegressionSumSquares: \t"+regression.getRegressionSumSquares());
System.out.println("Significance: \t\t"+regression.getSignificance());
System.out.println("Slope: \t\t\t"+regression.getSlope());
System.out.println("SlopeConfidenceInterval: "+regression.getSlopeConfidenceInterval());
System.out.println("SlopeStdErr: \t\t"+regression.getSlopeStdErr());
System.out.println("SumOfCrossProducts: \t"+regression.getSumOfCrossProducts());
System.out.println("SumSquaredErrors: \t"+regression.getSumSquaredErrors());
System.out.println("XSumSquares: \t\t"+regression.getXSumSquares());
// EDIT1 ends here --------------------------------------------------
}
}
Java Output:
Intercept: -0.08732359363636362
Java Output of EDIT1:
Intercept: -0.08732359363636362
InterceptStdErr: 0.17268454347538026
MeanSquareError: 0.16400973355415271
N: 10
R: -0.3660108396736771
RSquare: 0.13396393475863017
RegressionSumSquares: 0.20296050132281976
Significance: 0.2982630977579106
Slope: -0.21477287227272726
SlopeConfidenceInterval: 0.4452137360615129
SlopeStdErr: 0.193067188937234
SumOfCrossProducts: -0.945000638
SumSquaredErrors: 1.3120778684332217
XSumSquares: 4.4
I will greatly appreciate your help. Thanks !