2017-06-27 5 views
-1

データポイントのセットにカーブをフィットしようとしましたが、成功しませんでした。だから私はあなたに尋ねる。指数回帰R(および負の値)

plot(time,val) # look at data 
exponential.model <- lm(log(val)~ a) # compute model 
fit <- exp(predict(exponential.model,list(Time=time))) # create the fitted curve 
plot(time,val)#plot it again 
lines(time, fit,lwd=2) # show the fitted line 

私の唯一の問題は、データに負の値が含まれているため、log(val)がNAを大きく生成してモデル計算がクラッシュすることです。 My Data 私のデータは必ずしも指数関数的に見えるとは限りませんが、とにかくフィット感を見たいと思っています。私はval = 27.1331 * exp(-time/2.88031)という素晴らしいプログラムですが、私が間違っていることは分かりません。 Rで計算したい。 データをシフトして負の値が残らないようにする考えがありましたが、結果は貧弱であり、間違っていると確信しています。

plot(time,val+20) # look at data 
exponential.model <- lm(log(val+20)~ a) # compute model 
fit <- exp(predict(exponential.model,list(Time=time))) # create the fitted curve 
plot(time,val)#plot it again 
lines(time, fit-20,lwd=2) # show the (BAD) fitted line 

My data with bad (shift)-fit

ありがとうございます!

+4

私はあなたが四角い穴に丸いペグを合わせようとしていると思います。それは明らかにデータのひどいモデルです。指数関数的なモデルになります。明らかに定期的なコンポーネントがあり、あなたがキャプチャしようとするべき自己相関がたくさんあり、適合しようとしているモデルはキャプチャされません。 – RoyalTS

+0

私は知っている、そのデータはexponetialモデルのように見えませんが、とにかくそれに合うことが可能でなければなりません。私が言ったように、val = 27.1331 * exp(-time/2.88031)は、私にはうってつけです。私がその結果を得ることができれば、私は大丈夫だろう。 – marco

答えて

0

私はいくつかのことを考え出し、満足のいく解決策を得ました。

exponential.model <- lm(log(val)~ a) # compute model 

log(val)項は値を再スケーリングしようとしているため、線形モデルを適用できます。これは私の価値には不可能なので、非線形モデル(nls)を使用する必要があります。

exponential.model <- nls(val ~ a*exp(b*time), start=c(b=-0.1,h=30)) 

これは私にとってうまくいきました。 satisfying fit

関連する問題