annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/fitting/ChiSquare.java @ 9646:0380717105ba

Implemented alternative fitting strategy for Log-Linear function.
author Gernot Belger <g.belger@bjoernsen.de>
date Mon, 02 Dec 2019 17:56:15 +0100
parents
children
rev   line source
9646
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
2 * Software engineering by
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
5 *
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
9 */
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
10 package org.dive4elements.river.artifacts.model.fixings.fitting;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
11
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
12 import java.util.Arrays;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
13
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
14 import org.apache.commons.math3.exception.MathIllegalArgumentException;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
15 import org.apache.commons.math3.stat.descriptive.AbstractUnivariateStatistic;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
16 import org.apache.commons.math3.stat.descriptive.UnivariateStatistic;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
17
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
18 /**
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
19 * @author Gernot Belger
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
20 */
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
21 final class ChiSquare extends AbstractUnivariateStatistic {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
22
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
23 private final double[] observation;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
24
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
25 public ChiSquare(final double[] observation) {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
26 this.observation = observation;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
27 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
28
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
29 @Override
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
30 public UnivariateStatistic copy() {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
31 /* stateless, hence we can return this */
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
32 return this;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
33 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
34
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
35 @Override
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
36 public double evaluate(final double[] values, final int begin, final int length) throws MathIllegalArgumentException {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
37 test(values, begin, length, true);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
38
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
39 final double[] residualsWeights = new double[length];
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
40 Arrays.fill(residualsWeights, 0, length - 1, 1.0);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
41
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
42 double cost = 0;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
43
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
44 for (int i = begin; i < begin + length; i++) {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
45 final double residual = values[i + begin] - this.observation[i + begin];
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
46 // final double wresiduals = residual * FastMath.sqrt(residualsWeights[i]);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
47 cost += residualsWeights[i] * residual * residual;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
48 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
49
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
50 return cost;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
51 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
52 }

http://dive4elements.wald.intevation.org