[R] Optimisation with Normalisation Constraint
Hans W Borchers
hwborcher@ @end|ng |rom gm@||@com
Fri Jun 22 09:27:14 CEST 2018
One way will be to solve this as an ordinary optimization problem with
an equality constraint. Function `alabama::auglag` can do this:
library(alabama)
fn <- function(p) sum((df$y - p[1]*exp(-p[2]*df$x))^2)
heq <- function(p) sum(p[1]*exp(-p[2]*df$x)) - 5
# Start with initial values near first solution
sol <- auglag(c(4, 4), fn=fn, heq=heq)
Solution with myfit: 4.134 4.078
Solution with auglag: 4.126763 4.017768
The equality constraint is still fulfilled:
a <- sol$par[1]; lambda <- sol$par[2]
sum(a*exp(-lambda*df$x))
## [1] 5
Plot the differences of these two solutions:
plot(df$x, a*exp(-lambda*df$x) - predict(myfit), type='l')
Interestingly, the difference between 5 and `predict(myfit)` is *not*
just evenly spread across all 15 points.
More information about the R-help
mailing list