Как согласовать функцию staircase()
с nls()
?
Обратите внимание, что параметры модели, т.е. функции staircase()
, представляют собой два вектора dx
и dy
, поэтому число параметров на самом деле length(dx)+length(dy)
;обратите внимание, что длина dx
и dy
должна быть одинаковой.
Количество значений параметров внутри dx
и dy
имеет порядок десятков, поэтому я не думаю, что целесообразно создавать прототип функции с таким количеством скалярных аргументов.
step_fn <- function(x, min = 0, max = 1) {
y <- x
y[x > min & x <= max] <- 1
y[x <= min] <- 0
y[x > max] <- 0
return(y)
}
staircase <- function(x, dx, dy) {
max <- cumsum(dx)
min <- c(0, max[1:(length(dx)-1)])
step <- cumsum(dy)
purrr::reduce(purrr::pmap(list(min, max, step), ~ ..3 * step_fn(x, min = ..1, max = ..2)), `+`)
}
xvalues <- seq(0, 50, by = 0.01)
set.seed(42)
plot(
x = xvalues,
y = staircase(xvalues, dx = sample(1:5, 10, replace = TRUE), dy = sample(5:20, 10, replace = TRUE)),
type = 'l', xlab = 'x', ylab = 'y'
)