package com.imsl.test.example.stat; import com.imsl.stat.*; import com.imsl.math.*; /** *
* Fits a nonlinear regression using finite differences for the derivatives.
* * In this example the nonlinear model * $$y = \theta_0 - \theta_0*\exp(\theta_1x) $$ * is fit to data. The derivatives are obtained by * finite differences. * * @see Code * @see Output */ public class NonlinearRegressionEx1 { public static void main(String args[]) throws Exception { NonlinearRegression.Function f = new NonlinearRegression.Function() { @Override public boolean f(double theta[], int iobs, double frq[], double wt[], double e[]) { double ydata[] = { 54.0, 50.0, 45.0, 37.0, 35.0, 25.0, 20.0, 16.0, 18.0, 13.0, 8.0, 11.0, 8.0, 4.0, 6.0 }; double xdata[] = { 2.0, 5.0, 7.0, 10.0, 14.0, 19.0, 26.0, 31.0, 34.0, 38.0, 45.0, 52.0, 53.0, 60.0, 65.0 }; boolean iend; int nobs = 15; if (iobs < nobs) { wt[0] = 1.0; frq[0] = 1.0; iend = true; e[0] = ydata[iobs] - theta[0] * Math.exp(theta[1] * xdata[iobs]); } else { iend = false; } return iend; } }; int nparm = 2; double theta[] = {60.0, -0.03}; NonlinearRegression regression = new NonlinearRegression(nparm); regression.setGuess(theta); double coef[] = regression.solve(f); System.out.println("The computed regression coefficients are {" + coef[0] + ", " + coef[1] + "}"); int rank = regression.getRank(); System.out.println("The computed rank is " + rank); double dfe = regression.getDFError(); System.out.println("The degrees of freedom for error are " + dfe); double sse = regression.getSSE(); System.out.println("The sums of squares for error is " + sse); double r[][] = regression.getR(); new PrintMatrix("R from the QR decomposition ").print(r); } }