1
我試圖使用nls2
將"nlmrt
對象轉換爲"nls"
對象。但是,如果我明確寫出調用中的參數名稱,我只能做到這一點。我不能以編程方式定義參數名稱嗎?看到重複的例子:當我試圖將nlmrt對象轉換爲nls對象時,我在這裏做了什麼錯誤
library(nlmrt)
scale_vector <- function(vector, ranges_in, ranges_out){
t <- (vector - ranges_in[1, ])/(ranges_in[2, ]-ranges_in[1, ])
vector <- (1-t) * ranges_out[1, ] + t * ranges_out[2, ]
}
shobbs.res <- function(x) {
# UNSCALED Hobbs weeds problen -- coefficients are rescaled internally using
# scale_vector
ranges_in <- rbind(c(0, 0, 0), c(100, 10, 0.1))
ranges_out <- rbind(c(0, 0, 0), c(1, 1, 1))
x <- scale_vector(x, ranges_in, ranges_out)
tt <- 1:12
res <- 100*x[1]/(1+10*x[2]*exp(-0.1*x[3]*tt)) - y }
y <- c(5.308, 7.24, 9.638, 12.866, 17.069, 23.192, 31.443,
38.558, 50.156, 62.948, 75.995, 91.972)
st <- c(b1=100, b2=10, b3=0.1)
ans1n <- nlfb(st, shobbs.res)
print(coef(ans1n))
這工作:
library(nls2)
ans_nls2 <- nls2(y ~ shobbs.res(c(b1, b2, b3)) + y, start = coef(ans1n), alg = "brute")
然而,這迫使我硬編碼的參數名稱在調用nls2
。對於與我的實際代碼的原因,我想能像做
ans_nls2 <- nls2(y ~ shobbs.res(names(st)) + y, start = coef(ans1n), alg = "brute")
但這返回一個錯誤:
Error in vector - ranges_in[1, ] :
non-numeric argument to binary operator
是否有可能解決這個問題,而不必硬明確指定nls2
調用中參數的名稱?
偉大:)非常感謝幫助我的'R'非線性迴歸,你是最棒的! – DeltaIV