我正在尝试将一条线+指数曲线拟合到一些数据中。首先,我尝试在一些人工数据上做到这一点。功能是:
nls()
函数时,我得到了可怕的“初始参数估计时的奇异梯度矩阵”错误,即使我使用的参数与我最初用于生成数据的参数相同。我尝试了不同的算法,不同的起始值,并尝试使用
optim
最小化残差平方和,但都无济于事。我读过这可能的原因可能是公式的过度参数化,但我认为不是(是吗?)有人对这个问题有建议吗?或者这只是一个尴尬的模型?
一个简短的例子:
#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)
#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)
谢谢!