Author: celestin
Date: Sat May  5 05:10:22 2012
New Revision: 1334315

URL: http://svn.apache.org/viewvc?rev=1334315&view=rev
Log:
In o.a.c.m3.optimization.general.AbstractLeastSquaresOptimizer
  - deprecated guessParametersErrors()
  - created getSigma() which should be used instead (but is not strictly 
equivalent).

Modified:
    
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
    
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/special/Gamma.java
    
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java

Modified: 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java?rev=1334315&r1=1334314&r2=1334315&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
 (original)
+++ 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
 Sat May  5 05:10:22 2012
@@ -248,6 +248,9 @@ public abstract class AbstractLeastSquar
      * @throws NumberIsTooSmallException if the number of degrees of freedom 
is not
      * positive, i.e. the number of measurements is less or equal to the 
number of
      * parameters.
+     * @deprecated as of version 3.1, {@link #getSigma()} should be used
+     * instead. It should be emphasized that {@link #guessParametersErrors()} 
and
+     * {@link #getSigma()} are <em>not</em> strictly equivalent.
      */
     public double[] guessParametersErrors() {
         if (rows <= cols) {
@@ -263,6 +266,28 @@ public abstract class AbstractLeastSquar
         return errors;
     }
 
+    /**
+     * <p>
+     * Returns an estimate of the standard deviation of the parameters. The
+     * returned values are the square root of the diagonal coefficients of the
+     * covariance matrix, {@code sd(a[i]) ~= sqrt(C[i][i])}, where {@code a[i]}
+     * is the optimized value of the {@code i}-th parameter, and {@code C} is
+     * the covariance matrix.
+     * </p>
+     *
+     * @return an estimate of the standard deviation of the optimized 
parameters
+     * @throws org.apache.commons.math3.linear.SingularMatrixException
+     * if the covariance matrix cannot be computed.
+     */
+    public double[] getSigma() {
+        double[] sig = new double[cols];
+        double[][] cov = getCovariances();
+        for (int i = 0; i < sig.length; ++i) {
+            sig[i] = FastMath.sqrt(cov[i][i]);
+        }
+        return sig;
+    }
+
     /** {@inheritDoc} */
     @Override
     public PointVectorValuePair optimize(int maxEval,

Modified: 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/special/Gamma.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/special/Gamma.java?rev=1334315&r1=1334314&r2=1334315&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/special/Gamma.java
 (original)
+++ 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/special/Gamma.java
 Sat May  5 05:10:22 2012
@@ -325,4 +325,12 @@ public class Gamma {
 
         return trigamma(x + 1) + 1 / (x * x);
     }
+
+    public static double lanczos(final double x){
+        double sum = 0.0;
+        for (int i = LANCZOS.length - 1; i > 0; --i) {
+            sum = sum + (LANCZOS[i] / (x + i));
+        }
+        return sum + LANCZOS[0];
+    }
 }

Modified: 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java?rev=1334315&r1=1334314&r2=1334315&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java
 (original)
+++ 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java
 Sat May  5 05:10:22 2012
@@ -75,7 +75,7 @@ public class AbstractLeastSquaresOptimiz
     }
 
     @Test
-    public void testGuessParametersErrors() throws IOException {
+    public void testGetSigma() throws IOException {
         final StatisticalReferenceDataset dataset;
         dataset = StatisticalReferenceDatasetFactory.createKirby2();
         final AbstractLeastSquaresOptimizer optimizer;
@@ -85,12 +85,14 @@ public class AbstractLeastSquaresOptimiz
         final double[] w = new double[y.length];
         Arrays.fill(w, 1.0);
 
+        final int dof = y.length-a.length;
         optimizer.optimize(1, dataset.getLeastSquaresProblem(), y, w, a);
-        final double[] actual = optimizer.guessParametersErrors();
+        final double[] sig = optimizer.getSigma();
         final double[] expected = dataset.getParametersStandardDeviations();
-        for (int i = 0; i < actual.length; i++) {
+        for (int i = 0; i < sig.length; i++) {
+            final double actual = 
FastMath.sqrt(optimizer.getChiSquare()/dof)*sig[i];
             Assert.assertEquals(dataset.getName() + ", parameter #" + i,
-                                actual[i], expected[i], 1E-8 * expected[i]);
+                                actual, expected[i], 1E-8 * expected[i]);
         }
     }
 }


Reply via email to