2013-06-30 4 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 

결과는 매우 다릅니다. 주어진 값이 xy에 맞는 새로운 값을 얻으려고합니다.

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

어떻게 lowess 전화 loess 적합하고 xpredict 새로운 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 개의 서로 다른 nonparametric smoother가 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

하지만 어떻게'황토'의 기본 기능과 비슷하게 만들 수 있습니까? 나는'lowess'가 더 빠르며'loess'의 방정식 특징을 사용하지 않기 때문에 이것을하고 싶습니다. 단순한'y ~ x' – user248237dfsf

+0

아마도 평등을 요구하는 대신에'황토'의 "특징"을 설명해야합니다. 당신이 선호하는 것. –

+0

@DWin :'황토'가 내 데이터에서 작동했습니다.그래서 그 기능을 원하지만 더 빠릅니다. 비슷한 대답을해야한다고 가정하는 것은 무리가 아닙니다 ... 기본값이 크게 다르다는 것은 혼란 스럽습니다. – 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

명백하게 그것이 할 수없는 이유는 두 함수가 두드러진 별개의 알고리즘을 사용한다는 것이고, 여기서 찾을 수있는 유일한 설명은 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 매개 변수를 선택하지만 다른 모든 매개 변수 때문에 별개의 스무딩의 두 가지 기능 사이의 상호 번역하지 않은하는 방법 알고리즘이 사용되었습니다.