具有嵌套函数的 nls2
nls2 with nested functions
我正在尝试使用 nls2
包查找参数。由于我尝试为其优化参数的公式非常复杂,我尝试使用我在使用 nls2
命令优化的公式中调用的函数:
library(nls2)
set.seed(20160227)
x <- seq(0,50,1)
y <- ((runif(1,10,20)*x)/(runif(1,0,10)+x))+rnorm(51,0,1)
a <- function(){
d+1
}
f1 <- function(){
y <- a()*x/(b+x)
}
st <- data.frame(d = c(-100,100),
b = c(-100,100))
nls2(f1,start = st, algorithm = "brute-force")
目前,这会引发错误
Error: object of type 'closure' is not subsettable
我发现了这个错误 here,但是当我为 b
和 d
赋值时,它起作用了:
a()*x/(b+x)
我假设问题是我尝试使用已经包含它们的函数来查找 b
和 d
?
最好的方法是什么?是否有可能或者我是否需要在 nls2
中定义整个复杂公式?
这里的 f1
和 a
都没有任何参数,因此在理解您要如何优化 f1
.
时遇到一些困难也就不足为奇了
nls2::nls2
(如 stats::nls
)期望 formula
作为第一个参数。该公式可以从您想要的任何函数构建,并且不必在调用中完全写下来。您可以执行以下操作:
a <- function(d){
d+1
}
f1 <- function(b,d,x){
y <- a(d)*x/(b+x)
}
然后像这样拟合模型:
nls2(y~f1(b,d,x), start = st, algorithm = "brute-force")
因为 x
没有提供 start
值,而且因为它的实际值可以在环境中找到,所以它不会优化 x
,只是 [=21] =] 和 d
。
我正在尝试使用 nls2
包查找参数。由于我尝试为其优化参数的公式非常复杂,我尝试使用我在使用 nls2
命令优化的公式中调用的函数:
library(nls2)
set.seed(20160227)
x <- seq(0,50,1)
y <- ((runif(1,10,20)*x)/(runif(1,0,10)+x))+rnorm(51,0,1)
a <- function(){
d+1
}
f1 <- function(){
y <- a()*x/(b+x)
}
st <- data.frame(d = c(-100,100),
b = c(-100,100))
nls2(f1,start = st, algorithm = "brute-force")
目前,这会引发错误
Error: object of type 'closure' is not subsettable
我发现了这个错误 here,但是当我为 b
和 d
赋值时,它起作用了:
a()*x/(b+x)
我假设问题是我尝试使用已经包含它们的函数来查找 b
和 d
?
最好的方法是什么?是否有可能或者我是否需要在 nls2
中定义整个复杂公式?
这里的 f1
和 a
都没有任何参数,因此在理解您要如何优化 f1
.
nls2::nls2
(如 stats::nls
)期望 formula
作为第一个参数。该公式可以从您想要的任何函数构建,并且不必在调用中完全写下来。您可以执行以下操作:
a <- function(d){
d+1
}
f1 <- function(b,d,x){
y <- a(d)*x/(b+x)
}
然后像这样拟合模型:
nls2(y~f1(b,d,x), start = st, algorithm = "brute-force")
因为 x
没有提供 start
值,而且因为它的实际值可以在环境中找到,所以它不会优化 x
,只是 [=21] =] 和 d
。