2016-05-23 14 views
2

私は2つのベクトルXとy2を持っています。データに指数曲線を当てはめたいと思います。R nls指数曲線

スタックオーバーフロートピックで説明した多くのアプローチを試しましたが、それらはすべて私にまっすぐな直線を与えます。例えば私はこれを試してみました:

model.three <- lm(log(y2) ~ log(X)) 
plot(X,predict(model.three)) 
abline(model.three) 

私のデータを:

X <- seq(1:50) 
Y <- rnorm(50,mean=0,sd=1) 
y2 <- exp(X) 
y2 <- Y+y2 
+0

'log(y)〜log(x)'は、指数曲線ではなく、データに*べき乗*近似を与えます。主な問題は 'abline()'です。 –

答えて

1

は、あなたが探しているものを、このですか?

model.three <- lm(log(y2) ~ log(X)) 
plot(X,predict(model.three)) 

## Instead of abline(), use this: 

lines(model.three$fitted.values) 
+0

私はこれが古いと知っていますが、間違っています。指数関数的に最適化したい場合は、両方の変数のログをとらないでください。 –

1

あなたのデータはepsは、いくつかのノイズでY = exp(X) + epsでYとXの間の指数関数的な関係を表現します。 したがって、私は2つの間の線形関係を捕捉するために、log(Y)Xの間にモデルをフィッティング示唆する:

model.three <- lm(log(y2) ~ X) summary(model.three)

概要は予想通り捕捉関係があることを確認する(X用すなわち係数が非常にあります1に近い)。

リニアスケールでデータをプロットすることは役に立たないので、フィッティングした直線をablineでプロットすることをお勧めします。

注:正確に言うと、y2とexp(X)の関係をより正確に把握することができますが、データでは本質的に完全です。