私は線+指数曲線をいくつかのデータに当てはめようとしています。最初に、人工データでこれを実行しようとしました。関数である: それが効果的に直線部を有する指数曲線、ならびに追加の水平シフトパラメータである(M)。ただし、Rの関数を使用すると、最初にデータを生成するために使用したのと同じパラメーターを使用しても、「初期パラメーター推定値での特異な勾配行列」エラーが発生します。
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)
ありがとう!