nlsTracePlot возвращает «не является функцией» - как решить эту проблему? (R) - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть датафрейм, с

### create sample data
set.seed(1)
x = runif(n = 100, 0, 20)
beta1 = 2
beta2 = 1
beta3 = (1/2)

### Create sample data frame and vector
y = beta1 + beta2*x^(beta3) + rnorm(n = 100, 0, 0.01)
 data = as.data.frame(cbind(y,x))

 ### Fitting the data with nls()-function;
 fit1 = nls(
 y~vb1(x,beta1,beta2,beta3),
 data=data,start=list(beta1 = 0, beta2 = 1, beta3 = 1)
)

, где

 vb1 = function(x,beta1,beta2,beta3){
   beta1 + beta2*x^(beta3)
 }

В конце я хочу построить вывод:

 plot(y~x, col = 3)
 nlsTracePlot(fit1,vb1(x,beta1,beta2,beta3),legend="bottomright")

Однако, этовыдает следующую ошибку:

 3. stop(gettextf("'%s' is not a function, character or symbol",           deparse(FUN)), domain = NA)
 2. match.fun(fun)
 1. nlsTracePlot(fit1, vb1(x, beta1, beta2, beta3), legend = "bottomright")

Все работает отлично, пока я не попытаюсь построить ее с помощью функции выше.

1 Ответ

0 голосов
/ 22 сентября 2018

Если вы используете пакет FSA, вам нужно будет передать аргумент fun в необработанную функцию.Функция должна быть указана определенным образом.См. Документацию nlsTracePlot для получения дополнительной информации.

vb1 <- function(x, beta1, beta2, beta3){
  if (length(beta1) == 3) {
    beta2 <- beta1[2]
    beta3 <- beta1[3]
    beta1 <- beta1[1]
  }
  beta1 + beta2 * x^(beta3)
}

plot(y ~ x, col = 3)
nlsTracePlot(fit1, vb1, legend = "bottomright")

enter image description here

...