我在配方中添加另一个拟合参数时遇到了一些麻烦。
我正在使用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-estimates,sing-r-to-fit-a-curve-to-a-dataset-using-a-specific-equation
然后我开始以两个学期开始拟合我的数据;
singular gradient matrix at initial parameter estimates
它的概率分布函数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
这是拟合线的结果
好的,当我使用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
值,以查看它是如何通过拟合收敛的。但即使是三期拟合也不会收敛并产生错误。
任何建议或答案将不胜感激。 谁能指出我做错了什么?谢谢你的帮助