Почему я получил не числовой аргумент для бинарного оператора с NLS? - PullRequest
0 голосов
/ 07 марта 2019

У меня есть два вектора (пример):

x=c(100,98,60,30,28,30,20,10)
y=c(10,9.8,5,3,2,3.4,2.8,1)

Я бы хотел подогнать их под эту функцию:

и получите параметры подгонки a b c d enter image description here

Я использовал это:

     m<-nls(x~a/1+e^(-b*(y-c))  + d)

но я получил эту ошибку:

     Error in y - c : non-numeric argument to binary operator

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

x и y меняются местами, а e ^ (...) должно быть exp (...). Также я обнаружил, что установка d в ​​0 помогла.

d <- 0  # fix d at 0
st <- list(a = mean(y), b = 1/sd(x), c = mean(x))
fm <- nls(y ~ a/(1+exp(-b*(x-c))) + d, start = st)
fm

дает:

Nonlinear regression model
  model: y ~ a/(1 + exp(-b * (x - c)))
   data: parent.frame()
       a        b        c 
19.96517  0.02623 99.73842 
 residual sum-of-squares: 1.82

Number of iterations to convergence: 9 
Achieved convergence tolerance: 9.023e-06

При составлении графика это выглядит визуально хорошо:

plot(y ~ x)
lines(fitted(fm) ~ x, col = "red")

screenshot

0 голосов
/ 07 марта 2019

Я думаю, причина в том, что c считается оператором combine.Измените его на другой символ (например, c1).Конечно, вы также можете указать значимые начальные параметры, но я думаю, это был не ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...