2011-10-31 15 views
2

私は自分のデータセットに滑らかな曲線をフィットさせようとしています。私は以下のコードを使用して製造よりも良く、平滑化曲線があります:R:完全な平滑化曲線

x <- seq(1, 10, 0.5) 
y <- c(1, 1.5, 1.6, 1.7, 2.1, 
     2.2, 2.2, 2.4, 3.1, 3.3, 
     3.7, 3.4, 3.2, 3.1, 2.4, 
     1.8, 1.7, 1.6, 1.4) 
lo <- loess(y~x) 
plot(x,y) 
xv <- seq(min(x),max(x), (max(x) - min(x))/1000000) 
lines(xv, predict(lo,xv), col='blue', lwd=1) 

EDITS:

私は(必要はありません)格好良い生産するつもりはありません 私は平滑化の傾向を示して欲しいです... 関連するモデル式には関係ありません....式を回復する必要があります。

+1

方が良いとはどういう意味ですか?とにかくその質問はstats.stackexchange.com – Max

+0

百万平滑化された点をプロットするために適切です( 'seq(min(x)、max(x)、length.out = 1e6)'を使うことができます) 19点の間に... –

+0

点はポイントにもっとフィットすることを意味します。私は1e6未満を試しましたが、最適に近づくことができませんでした....私は黄色の代替を探しています。 – jon

答えて

5

問題がほとんど無意味です。 「ベスト」はあなたのスタディの目的によって異なるため、「最良の」適合線はありません。あらゆるデータポイントにフィットするように平滑化された線を生成することはかなり簡単です(たとえば、18次の多項式はデータに完全に適合しますが、ほとんど無意味です)。

引数を変更することによって、の平滑度のサイズをloessモデルと指定できます。スパンの大きい値が、カーブ滑らかに、スパンの値が小さいほど、より多くのそれは各ポイントにフィットします:

x <- seq(1, 10, 0.5) 
y <- c(1, 1.5, 1.6, 1.7, 2.1, 
    2.2, 2.2, 2.4, 3.1, 3.3, 
    3.7, 3.4, 3.2, 3.1, 2.4, 
    1.8, 1.7, 1.6, 1.4) 

xl <- seq(1, 10, 0.125) 
plot(x, y) 
lines(xl, predict(loess(y~x, span=0.25), newdata=xl)) 

enter image description here

:ここ

を値span=0.25でプロットしたものです


代替アプローチは、データにスプラインを当てることです。あなたは19ポイントを持っているので、X^18までの多項式はそれぞれブルズアイます(滑らか例えばlowessはない可能性が一方)

spl <- smooth.spline(x, y) 
plot(x, y) 
lines(predict(spl, xl)) 

enter image description here

+0

これは私に私の答えを与えます、おそらく私の質問はあなたが示唆したように鈍いです...答えに感謝し、答えに推測する – jon

+0

私も追加しましたあなたの場合に有用かもしれないスプラインを使用して代替のアプローチ。 – Andrie

+0

おっと、私はあなたのアップデートを見逃しました - 私の答えは以下のようになります –

4

スプラインは、各点を通過するように制約されますあなたのポイントの:

> xl=seq(0,10,len=100) 
> p=lm(y~poly(x,18)) 
> plot(x,y) 
> lines(xl,predict(p,newdata=data.frame(x=xl))) 

しかし、それは何の統計情報をすべて無視しています。曲線がポイントを通らないことを認めていること。そのことは、データに関してできる限り説明し、ノイズだけを残す少数のパラメータでモデルを見つけることについてです。曲線を使って点を描くのではなく、そのように描かれた曲線はデータ点の間ではほとんど意味がありません。

4

が補間された滑らかな線を探していると思いますが、Rの場合はおそらく補間スプラインを当てはめることで最も簡単でしょうか?他の答えが議論しているように、それは統計的な近似ではありませんが、滑らかな補間曲線が必要な多くの状況があります。私はあなたの専門用語が人々を捨てたかもしれないと思います。

スプラインは、多項式よりも数値的に安定しています。

x <- seq(1, 10, 0.5) 
y <- c(1, 1.5, 1.6, 1.7, 2.1, 
    2.2, 2.2, 2.4, 3.1, 3.3, 
    3.7, 3.4, 3.2, 3.1, 2.4, 
    1.8, 1.7, 1.6, 1.4) 

library(splines) 

isp <- interpSpline(x,y) 

xvec <- seq(min(x),max(x),length=200) ## x values for prediction 

png("isp.png") 
plot(x,y) 
## predict() produces a list with x and y components 
lines(predict(isp,xvec),col="red") 
dev.off() 

enter image description here

+0

+1 Snap ............ – Andrie

+1

材料の相違btw interpSplineとsmooth.spline? –

関連する問題