2013-06-30 5 views
6

どのようにloessを使用して黄土のフィットの結果はlowessと再現できますか?Rの黄色とRの低音機能をどのようにして同じ結果を得るには?

黄土コード

> data = data.frame(x=c(1,0.5,3,4,5,5.5,6,7), y=c(10, 25, 38, 44.5, 500, 550, 600, 705)) 
> fit = loess("y ~ x", data=data) 
> new_y = predict(fit, data$x) 
> new_y 
[1] 6.251022 28.272100 -2.840750 150.006042 481.927307 563.161187 640.825415 693.166150 

LOWESSコード

> new_fit = lowess(data, f=0.8) 
> new_fit 
$x 
[1] 0.5 1.0 3.0 4.0 5.0 5.5 6.0 7.0 

$y 
[1] -4.330119 38.931265 255.000000 400.000000 500.000000 550.241949 601.519903 704.247275 

結果は非常に異なっています。私は、の値を得ようとしています。xの値をyに設定しようとしています。

[1] -4.330119 38.931265 255.000000 400.000000 500.000000 550.241949 601.519903 704.247275 

どのように私は私のlowessコールloessフィット感とx値を持つpredictなどの新しいy値に非常に類似した結果を与えることを書き換えることができます。lowessを与えながらloess

[1] 6.251022 28.272100 -2.840750 150.006042 481.927307 563.161187 640.825415 693.166150 

を与えますか?ありがとう。

+0

同じですか?不当な要求ですか?私は近い有権者ではないが、衝動を理解している。 –

+0

@Dwin:明らかに、私が同じことを言うとき、私は似ているという意味です。 -2.8と255は類似していません。 – user248237dfsf

+0

2つの異なるノンパラメトリックスムーザーが、2つ以上のlog10の範囲を持つ小さなデータセットからすべての点で「同じ結果」を生成するとは、不合理だと思います。彼らは別の "シフトポイント"を選び、シフトポイントを選ぶことは悪名高く難しいです。 –

答えて

3

なぜこれが必要ですか?

一般的なケースではできないと思います。ここでは、ほぼ同じ結果が得られる特定の場合は、ですが、最後の値は、まだいくつかの理由で異なります。

fit1 <- loess(y~x,data=data,span=0.8,degree=1) 
predict(fit1) 
#[1] 19.08622 12.55692 37.93642 188.35019 401.53528 506.87040 591.41854 740.71060 

fit2 <- lowess(data$x,data$y,f=0.8,iter=0) 
fit2 

# $x 
# [1] 0.5 1.0 3.0 4.0 5.0 5.5 6.0 7.0 
# 
# $y 
# [1] 12.55692 19.08622 37.93642 188.35019 401.53528 506.87040 591.41854 741.12187 
#Note that lowess reorders by x. 
+0

しかし、それを 'loess'のデフォルト機能と似ているのですか?私は 'lowess'が速く、' loess'の式の特徴を使用していないので、これをやりたいです。単純な 'y〜x' – user248237dfsf

+0

多分、平等を要求するのではなく、あなたが好むもの。 –

+0

@DWin: 'loess'が自分のデータを処理しました。だから私はその機能を望んでいるが、速い。同様の答えを出さなければならないと仮定することは不合理ではありません...デフォルトが大きく違うのは混乱しています – user248237dfsf

1
data = data.frame(x=c(1,0.5,3,4,5,5.5,6,7), y=c(10, 25, 38, 44.5, 500, 550, 600, 705)) 
fit = loess("y ~ x", data=data) 
new_y = predict(fit, data$x) 
plot(data$x , new_y) 
lines(lowess(data, f=0.8)$x, lowess(data, f=0.8)$y) 
# Obviously lowess with f=0.8 is giving different smoothing 

が小さいF値

lines(lowess(data, f=0.8)$x, lowess(data, f=0.5)$y, col="red") 

enter image description here

に比較します
3

どうやらそれができない理由は、2つの関数がフードの中ではっきりしたアルゴリズムを使用しているということだけです。私が見つけることができる唯一の説明はBrian Ripleyです:

http://www.mail-archive.com/[email protected]/msg63623.html

"It is not possible: the algorithms differ considerably in their details. 

... 

In determining 'local' loess() uses a tricubic weighting, lowess() uses a 
uniform weighting (on reading the code)." 

ドキュメントがデフォルトに似ているようにspan/fパラメータを選択する方法、それは明確になりますが、他のすべてのパラメータがあるため明確な平滑化の二つの機能の間で相互変換できません使用されるアルゴリズム。

関連する問題