2012-12-12 2 views
1

나는 롤링 medians을해야합니다. (러닝 medians) 3와 7의 연구와 그들을 음모. 나는 그것이 수렴 ​​할 때까지 smooth(x,"3R")을 반복하는 것을 알고있다. 그러나 나는 비교할 7의 중간 값을 내 변수로 입력하려고합니다 :롤링 medians

xR7 <- rollmedian(x,7) 
Age # at Age 
0 558 
1 513 
2 582 
3 604 
4 584 
5 566 
6 562 
7 524 
8 529 
9 430 
10 497 

수렴 시점을 어떻게 알 수 있습니까? 테스트가 있습니까?

답변

4

중위수를 반복적으로 사용하면 부드럽게 사라질 때까지 x 양 끝을 점차 먹어 버립니다. 끝에서 실행중인 중앙값에 값을 할당하는 데 필요한 규칙이 필요합니다. 한 가지 방법은 "복사"입니다. 첫 번째 유효 값을 처음으로 다시 복제하고 마지막 유효한 값을 마지막으로 복제하십시오.

대류를 확인하는 한 가지 방법은 상당히 엄격한 것으로서이 컨텍스트에서는 안전하지만 연속 반복이 정확히 동일 할 때만 중지하는 것입니다. identical을 사용하십시오.

이 다음 절차에 이르게 :

set.seed(17) 
x <- sin(seq(0, 2*pi, 2*pi/1000)) + rnorm(1001, 0.25) 
0 >= var((smooth(x,"3R") - rollmedianR(x, 3)), rep(0.0, length(x))) 

1 TRUE

때문에 :

library(zoo) 

rollmedianR <- function(x, k=3) { 
    n <- length(x) 
    k.low <- floor((k+1)/2) 
    k.high <- n + 1 - k.low 
    repeat { 
    y <- rollmedian(x, k, na.pad=TRUE) 
    y[1:k.low] <- y[k.low]; y[k.high:n] <- y[k.high] 
    if (identical(x, y)) break 
    x <- y 
    } 
    return(y) 
} 

테스트로,의 어떤 임의의 데이터에 smooth와 비교하자 차이의 차이는 없습니다. wo 결과, 그들은 동의한다. 좋은. (단,이 분산 테스트는 rollmedianR 내부에서 identical 대신 수렴을 확인하는 데 효과적입니다. 부동 소수점 오류에보다 견고합니다. 원칙적으로 수치 변경이 발생하지 않기 때문에 중앙값에서 고려해야 할 사항은 아닙니다. 단지있는 사본은 주위에 -하지만 다른 응용 프로그램에서 이러한 견고성을 갖는 것은 매우 중요하다)

플롯이 오래 실행 평균이 무엇을 보여줄 수 :

plot(x, col="Gray", cex=0.8) 
lines(rollmedianR(x,37), lwd=2, col="Red") 

Plot of data and a running median

.