[R] picewise function in nls....

Ivan Krylov kry|ov@r00t @end|ng |rom gm@||@com
Thu Apr 18 13:20:39 CEST 2019


On Thu, 18 Apr 2019 10:36:10 +0000
akshay kulkarni <akshay_e4 using hotmail.com> wrote:

> fx <-   (x1 <= -2)*(x1^2) + (x1 > -2 && x1 < 2)*(x1^3) + (x1 > =
> 2)*(x1^4)
> 
> Can I include fx in an nls call  to create something like this:
> 
> NLS1 <- nls(y ~ a*(sin(x2) + fx), start = list(a = 2))   ?

For now, you can, since fx does not depend on any of the parameters you
optimize in the nls() call. (Actually, the model as presented should be
solveable by lm(y ~ I(sin(x2) + fx) + 0), since it is linear in its
only parameter.)

If you make fx a function and use ifelse() to provide different
outcomes depending on a condition in a vectorized fashion, you would
make it easier to add new parameters later, should the need arise:

fx <- function(x1, x2)
	ifelse(x1 <= -2, EXPR_IF_TRUE..., EXPR_IF_FALSE...)

NLS1 <- nls(y ~ a*(sin(x2) + fx(x1, x2)), ...)

-- 
Best regards,
Ivan



More information about the R-help mailing list