2012-07-19 24 views
5

私は、ポイントをプロットし、それらにラインを合わせて次の操作を行うことができます線形であるR内の点の集合を持っている場合は、その行を表示:今フィッティング対数曲線

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.401244, 0.844381, 1.18922, 1.93864, 2.76673, 3.52449, 4.21855, 5.04368, 5.80071) 

plot(x,y)  
Estimate = lm(y ~ x)  
abline(Estimate) 

を、対数カーブフィットがより適切であるように、私は次のように見える点のセットを持っている場合:

x=c(61,610,1037,2074,3050,4087,5002,6100,7015)   
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

私は次のようにxの値のログに対する標準回帰フィット感を得ることができます知っている:

logEstimate = lm(y ~ log(x)) 

しかし、どのようにしてそのlogEstimateを通常のスケーリングに変換し、以前の線形曲線に対して曲線をプロットするのですか?

答えて

10

ええと、私はあなたが「私の線形曲線に対して先の曲線をプロットする」ということをどういう意味かはっきりしていません。

(1)predictを使用します:

plot(x,y) 
xvec <- seq(0,7000,length=101) 
logpred <- predict(logEstimate,newdata=data.frame(x=xvec)) 
lines(xvec,logpred) 

(2)数値の係数値を抽出します。

coef(logEstimate) 
## (Intercept)  log(x) 
## 0.6183839 0.0856404 
curve(0.61838+0.08564*log(x),add=TRUE,col=2) 

(ここで

d <- data.frame(x,y) ## need to use data in a data.frame for predict() 
logEstimate <- lm(y~log(x),data=d) 

は、予測値を取得するための3つの方法があります3)with()マジックを使用してください(パラメータ推定名bの前後にバッククウォートが必要ですecause彼らは括弧が含まれている)

with(as.list(coef(logEstimate)), 
     curve(`(Intercept)`+`log(x)`*log(x),add=TRUE,col=4)) 

私がなぜ...

+0

ありがとうございます。曲線関数を使った2番目の方法は、まさに私が望むものです。データのフレーミングは正確に何を行い、予測は何をしますか?私はhelp()関数が私に語ったことから多くを得ていませんでした。 – user52291

+1

データフレームにデータを入れることで、Rが入力変数の位置を特定しやすくなるため、フィットされたオブジェクト(予測など)の将来の作業がより簡単になります。 'predict()'は予測します... –

8

は、私はあなたが何を意味するか正確にはわからないわからないが、たぶん、あなたが望むもの...

est1 <- predict(lm(y~x,data=d),newdata=data.frame(x=xvec)) 
plot(est1,logpred) 

ですいずれか...しかし、私は少し異なると思った。私はそれらのポイントに2つのモデルをフィットさせたいと思います.1つは線形、もうひとつは記録されています。次に、ポイントと、両方のモデルの関数形式をプロットします。ここではそのためのコードは次のとおりです。コメントであなたの2番目の質問に応えて

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

Estimate = lm(y ~ x) 
logEstimate = lm(y ~ log(x)) 

plot(x,predict(Estimate),type='l',col='blue') 
lines(x,predict(logEstimate),col='red') 
points(x,y) 

enter image description here


、線形回帰は、常にあなたの予測変数の線形結合を返さないが、それは必ずしもありませんそれが直線であることを意味します。あなたが収まる場合は、直線的にx増加すると、その後、yは明らかである、指数関数的に変化することを意味フィッティング

exp(y) = x 

と同じである

y = log(x) 

を:あなたのlog変換が本当に何を意味するのかについて考えてみて「直線」ではない。ただし、x軸を対数スケールで変換した場合、表示される行は直線になります。

+1

円滑な対数カーブが必要な場合は、 'newdata'という形式のpredictを使う必要があります。データが存在しない場合、結果は変です'x '命令を増やす...(ただし、基本的な考えは健全です) –

+0

合意。私は、正確さよりも単純さのために行くと思ったが、あなたは完全に正しい。 – nograpes

+0

ありがとうございます。これは、私が欲しかったものを私に与える(カーブ関数のように滑らかではないが)。私は、私はいつもラインを返すと思っていたので少し混乱しています。カーブを作って線が現れないというあなたのコードはどうですか? – user52291