Я пытался согласовать сигмоидальную функцию с помощью функции nlsLM в R. Но я получил некоторые ошибки в R. Мои сценарии выглядят следующим образом:
aggfluxmet$Treatno <- 1 # i.e. treatno = 1 = "Control"
aggfluxmet$Treatno[which(aggfluxmet$Treat2 == "D 40%")] <- 2
aggfluxmet$Treatno[which(aggfluxmet$Treat2== "D 50%")] <- 3
aggfluxmet$Treatno[which(aggfluxmet$Treat2== "D 66%")] <- 4
aggfluxmet$Treatno <- as.factor(aggfluxmet$Treatno)
modsig <- function(a, b, d, temp){
return(a*exp(b*exp(d*temp)))}
modsig2 <- function(a, ftc, b, d, temp){
return(a[ftc]*exp(b*exp(d*temp)))}
# limit for temperatures to include:
Tlim <- 0 # means all data included
dat <- subset(aggfluxmet,!is.na(LM.flux) & !is.na(T_mean) & T_mean > Tlim)
model_level <- paste("modsig2_mean soil temperature vs LM.flux"," _by treat", sep="")
modx <- LM.flux ~ modsig2(a, b, d, ftc = Treatno, temp=T_mean)
start.l=list(a=1.06, b=-2.1, d=-0.18)
start.l$a <- rep(1,length(unique(dat$Treatno)))
modrun1 <- try(nlsLM(modx, data=dat, start=start.l, na.action=na.exclude,trace=TRUE,weights=(1/(LM.flux+0.49)),
control = nls.lm.control(ftol = sqrt(.Machine$double.eps),
ptol = sqrt(.Machine$double.eps), gtol = 0, diag = list(), epsfcn = 0,
factor = 100, maxfev = integer(), maxiter = 1000, nprint = 0)))
modrun1<-nls(modx,data=dat,start=start.l,na.action=na.exclude,trace=TRUE)
summary(modrun1)
И часть моих данных выглядит следующим образом:
obs CFlux chrontime Field_flag Treat2 LM.flux LM.flux.se LM.R2 Wind T_mean SWC_mean
51 0.816 (11/19/19 10:48:16) 1 A 1.2910607 0.001115148 0.9999015 NA 7.605 0.16955
214 0.553 (11/19/19 10:56:25) 1 D 40% 0.5863929 0.001460609 0.9993304 NA 7.605 0.16955
383 0.472 (11/19/19 10:59:48) 1 D 50% 0.5413015 0.001507698 0.9988531 NA 7.605 0.16955
552 0.773 (11/19/19 11:06:46) 1 D 66% 0.9137646 0.001720923 0.9994824 NA 7.605 0.16915
719 0.572 (11/19/19 11:14:38) 1 A 1.2863207 0.001228144 0.999866 NA 7.605 0.16955
Надеюсь, кто-то может помочь. Спасибо!