在nls中添加第三个拟合参数时遇到麻烦

时间:2016-04-28 08:49:38

标签: r curve-fitting nls

我在配方中添加另一个拟合参数时遇到了一些麻烦。 我正在使用1AA A123456B Edmund Australia Denmark ,France 2CS C435664C Grace Norway NULL 3TG G885595H Rae NULL Japan 来拟合函数,并在组中使用nlsLM包。 你可以看到下面的代码。

我也从其他问题中了解到有很多建议 当您在初始参数估计值中获得奇异梯度矩阵时,您可以改变起始值或尝试通过查找通常会导致麻烦的冗余参数来简化模型。

所以,我知道启动参数对于不得出plyr错误非常重要。 why-is-nls-giving-me-singular-gradient-matrix-at-initial-parameter-estimatessing-r-to-fit-a-curve-to-a-dataset-using-a-specific-equation

然后我开始以两个学期开始拟合我的数据;

singular gradient matrix at initial parameter estimates

enter image description here 它的概率分布函数probability distribution function。 PS。我将set.seed(12345) set =rep(rep(c("1","2","3","4"),each=21),times=1) time=rep(c(10,seq(100,900,100),seq(1000,10000,1000),20000),times=1) value <- replicate(1,c(replicate(4,sort(10^runif(21,-6,-3),decreasing=FALSE)))) data_prep <- data.frame(time, value,set) ## this is example data set > head(data_prep) # time value set #1 10 1.007882e-06 1 #2 100 1.269423e-06 1 #3 200 2.864973e-06 1 #4 300 3.155843e-06 1 #5 400 3.442633e-06 1 #6 500 9.446831e-06 1 sigma=17 d_step <- 1 Ps <- 0.5 f <- 1e9 formula = value~Ps*(1-exp(-2*f*time*exp(-d)))*1/(sqrt(2*pi*sigma))*exp(-(d-d_ave)^2/(2*sigma))*d_step 作为sigma^2。那没问题。

sigma

这是拟合线的结果

enter image description here

好的,当我使用library(minpack.lm)# load this packed library(plyr) # load this package for fitting get.coefs <- function(data_prep) { fit <- nlsLM(formula , data=data_prep,start=c(d_ave=43,d=42),trace=T,control = nls.lm.control(maxiter=100)) } fit <- dlply(data_prep, c("set"), .fun = get.coefs) # Fit data grouped by "set" # > fit # $`1` # Nonlinear regression model # model: value ~ Ps * (1 - exp(-2 * f * time * exp(-d))) * (1/(sqrt(2 #* pi * sigma) * exp(-(d - d_ave)^2/(2 * sigma))) * d_step) # data: data_prep # d_ave d # 55.71 41.34 # residual sum-of-squares: 1.249e-07 d_ave执行此过程时,我可以进行拟合。但是,当我想添加d参数作为拟合参数时;

sigma

我收到两个错误,第一个错误是

 get.coefs <- function(data_prep) {
      fit <- nlsLM(formula ,
                   data=data_prep,start=c(d_ave=43,d=42,sigma=17),trace=T,control = nls.lm.control(maxiter=100))
    }

fit <- dlply(data_prep, c("set"), .fun = get.coefs)   # Fit data grouped by "set"

和第二个,

Error in nlsModel(formula, mf, start, wts) : 
  singular gradient matrix at initial parameter estimates

我想稍后为拟合参数添加偶数In addition: Warning messages: 1: In sqrt(2 * pi * sigma) : NaNs produced 2: In sqrt(2 * pi * sigma) : NaNs produced 3: In sqrt(2 * pi * sigma) : NaNs produced 4: In sqrt(2 * pi * sigma) : NaNs produced 值,以查看它是如何通过拟合收敛的。但即使是三期拟合也不会收敛并产生错误。

任何建议或答案将不胜感激。 谁能指出我做错了什么?谢谢你的帮助

0 个答案:

没有答案