package eu.choreos.vv.analysis;
import org.apache.commons.math.stat.inference.TestUtils;
import org.apache.commons.math.stat.regression.GLSMultipleLinearRegression;
import eu.choreos.vv.aggregations.AggregationFunction;
import eu.choreos.vv.data.LinearRegressionSample;
import eu.choreos.vv.data.ExperimentReport;
public class LinearRegression extends Analyzer {
private AggregationFunction function;
public LinearRegression(AggregationFunction function) {
this.function = function;
}
@Override
public void analyse(ExperimentReport report) throws Exception {
GLSMultipleLinearRegression regression = new GLSMultipleLinearRegression();
System.out.println(report.getName());
LinearRegressionSample sample = new LinearRegressionSample(function);
sample.setSample(report);
regression.newSampleData(sample.getY(), sample.getX(),
sample.getOmega());
double[] beta = regression.estimateRegressionParameters();
for (int i = 0; i < sample.getX().length; i++) {
double[] observed = new double[sample.getX()[0].length];
for (int j = 0; j < observed.length; j++) {
observed[i] = sample.getX()[j][i];
}
if (TestUtils.tTest(0, observed, 0.05)) {
System.out.print(beta[i + 1]
+ report.getParameterLabels().get(i) + " + ");
}
System.out.println(beta[0]);
}
}
}