/* $RCSfile$
* $Author$
* $Date$
* $Revision$
*
* Copyright (C) 2004-2008 Rajarshi Guha <rajarshi.guha@gmail.com>
*
* Contact: cdk-devel@lists.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.openscience.cdk.qsar.model.R;
/** A class that represents a summary of a linear regression model.
*
* This class essentially wraps the result of summar.lm. As with other
* backend classes this class should not be instantiated directly by the
* user, though the various fields may be accessed with the provided
* methods.
*
* @author Rajarshi Guha
* @cdk.require r-project
* @cdk.module qsar
* @cdk.githash
* @deprecated
*/
public class LinearRegressionModelSummary {
double[] residuals;
double[][] coeff; // rows - vars, cols - stats
double rsq, adjrsq, sigma;
int df;
int numdf, dendf;
double fstat;
String[] colNames;
String[] rowNames;
private double[][] vectorToMatrix(double[] v, int nrow, int ncol) {
double[][] m = new double[nrow][ncol];
for (int i = 0; i < ncol; i++) {
for (int j = 0; j < nrow; j++) {
m[j][i] = v[j + i*nrow];
}
}
return(m);
}
/**
* Constructor for an object that wraps the return value from summary.lm.
*
* This should not be instantiated directly. The class is meant to be instantiated
* from an R session
*
* @param residuals An array of residuals
* @param coeff An array of coeffs and associated statistics
* @param coeffColNames The names of the columns for the coefficient matrix
* @param coeffRowNames The names of the rows for the coefficient matrix
* @param sigma The residual error
* @param df The degrees of freedom
* @param rsq The R^2 value
* @param adjrsq The adjusted R^2 value
* @param fstat The value of the F-statistic
*/
public LinearRegressionModelSummary( double[] residuals , double coeff[],
double sigma, double rsq, double adjrsq, int df,
double[] fstat, String[] coeffRowNames, String[] coeffColNames) {
this.residuals = new double[residuals.length];
for (int i = 0; i < residuals.length; i++)
this.residuals[i] = residuals[i];
this.coeff = vectorToMatrix(coeff, coeff.length/4, 4);
this.colNames = new String[coeffColNames.length];
this.rowNames = new String[coeffRowNames.length];
for (int i = 0; i < coeffColNames.length; i++) this.colNames[i] = coeffColNames[i];
for (int i = 0; i < coeffRowNames.length; i++) this.rowNames[i] = coeffRowNames[i];
this.sigma = sigma;
this.df = df;
this.rsq = rsq;
this.adjrsq = adjrsq;
this.numdf = (int)fstat[1];
this.dendf = (int)fstat[2];
this.fstat = fstat[0];
}
/**
* Return the residuals of the fit.
*
* @return A 1-dimensional array of doubles containing the
* residuals of the fit
*/
public double[] getResiduals() {
return(this.residuals);
}
/**
* Returns the coefficients and associated statistics.
*
* This method will return the coefficients as well as the standard
* error in the coefficients, t-values and p-values corresponding to the
* t-values. Thus the return value is a 2D array of doubles, with rows equal
* to the number of coefficients (ie 1+num predictor variables) and 4 columns
* containing the estimated coefficients and the above statistics, in the
* order mentioned above.
*
* @return A 2-D array of doubles containing the estimated coefficients and
* associated statistics
*/
public double[][] getCoeff() {
return(this.coeff);
}
/**
* Returns the R^2 value.
*
* @return The R^2 value
*/
public double getRSQ() {
return(this.rsq);
}
/**
* Return the adjusted R^2 value.
*
* This statistic is generally a better indicator than plain R^2
*
* @return The adjusted R^2 value
*/
public double getAdjRSQ() {
return(this.adjrsq);
}
/**
* Return the residual standard error.
*
* This method returns the residual standard error and the associated degrees
* of freedom, in a 2 element array of doubles.
*
* @return A 2 element array of doubles containing the residual error and
* DoF
*/
public double[] getSigma() {
double[] ret = {this.sigma, this.df};
return( ret );
}
/**
* Returns the value of the F-statistic.
*
* @return The F-statistic
* @see #getFStatisticDF
*/
public double getFStatistic() {
return(this.fstat);
}
/**
* Returns the degrees of freedom (DoF) for which the F-statistic was calculated.
*
* @return A 2 element int[]. The first element is the DoF of the numerator
* and the second element is the DoF of the denominator
* @see #getFStatistic
*/
public int[] getFStatisticDF() {
int[] ret = {this.numdf, this.dendf};
return( ret );
}
}