스플라인을 사용하여 밀도 함수의 국소 극한값 찾기


15

확률 밀도 함수 (R의 density방법을 사용하여 찾음)에 대한 로컬 최대 값을 찾으려고합니다 . 많은 양의 데이터가 있기 때문에 간단한 "인접 이웃 둘러보기"방법을 사용할 수 없습니다 (이것은 주변 이웃에 대해 로컬 최대 값인지 확인하기 위해 포인트를 둘러 보는 방법). 또한 내결함성 및 기타 매개 변수를 사용하여 "이웃을 둘러보기"를 구축하는 것과 달리 스플라인 보간과 같은 것을 사용하고 1 차 미분의 근본을 찾는 것이 더 효율적이고 일반적인 것 같습니다.

그래서 내 질문 :

  1. 의 함수가 주어지면 splinefun어떤 방법으로 로컬 최대 값을 찾을 수 있습니까?
  2. 를 사용하여 반환 된 함수의 파생 상품을 찾는 쉬운 / 표준 방법이 있습니까 splinefun 있습니까?
  3. 확률 밀도 함수의 국소 최대 값을 찾는 더 나은 / 표준적인 방법이 있습니까?

참고로 아래는 밀도 함수의 도표입니다. 내가 작업하고있는 다른 밀도 함수는 형태가 비슷합니다. 나는 R이 처음이지만 프로그래밍에 익숙하지 않다고 말해야하므로 필요한 것을 달성하기위한 표준 라이브러리 또는 패키지가있을 수 있습니다. 밀도 함수

당신의 도움을 주셔서 감사합니다!!


왜 대량의 데이터가 '이웃을 둘러 보는'방법에 문제가되는지 잘 모르겠습니다. density()모든 데이텀의 밀도를 추정하지 않고 n 값 의 밀도를 추정 합니다. 여기서 n 은 기본값이 n = 512 인 사용자 지정 매개 변수입니다.
onestop

이것에 대한 내 n은 2 ^ 15이며 데이터는 포인트 수준에서 많은 차이가있는 것으로 보입니다. 나는 이웃 방법과 비슷한 것을 사용하여 최대 / 최소 파인더를 작성하려고 시도했지만 msExtrema {msProcess}허용 오차 설정을 사용하여 최대 값 중 일부만 식별 할 수있었습니다.
aaronlevin

2
의 코드를 보면 msExtrema, 그것을위한 간단한 래퍼 peaks로부터 splus2R당신이 로컬 최대가 아닌 로컬 최소값을 원하는 경우 직접 사용하여 더 나을 것 패키지. 기본값을 사용하면 span=3모든 로컬 최대 값을 찾지 못하는 이유를 알 수 없습니다 . 그리고 2 ^ 15 = 32768은 효율성이 큰 걱정거리가되기에 충분히 크지 않아야합니다.
onestop

splinefun에 의해 반환 된 함수에는 기본적으로 0 인 인수 "deriv"가 있습니다. 첫 번째 미분에 대해 deriv = 1을 설정하십시오.
Cyan

1
흠, peaks버그가있는 것 같습니다 : max.col기본 설정 인을 사용 ties.method = "random"하여 임의로 연결을 끊을뿐만 아니라 넥타이를 선언하기 위해 1e-5의 상대 허용 오차를 설정합니다. 전자는 혼란스럽고 후자는 분명히 당신이 원하는 것이 아닙니다. peaks()또한 strict문서화가 잘 안된 매개 변수를 취하고 함수 코드를 보면 아무것도하지 않습니다. 아, 사용자가 제공 한 소프트웨어 라이브러리의 기쁨! 프로그래밍에
익숙

답변:


14

당신이하고 싶은 것은 화학 측정에서 피크 검출이라고합니다. 이를 위해 사용할 수있는 다양한 방법이 있습니다. 여기서는 매우 간단한 접근 방식 만 보여줍니다.

require(graphics)
#some data
d <- density(faithful$eruptions, bw = "sj")

#make it a time series
ts_y<-ts(d$y)

#calculate turning points (extrema)
require(pastecs)
tp<-turnpoints(ts_y)
#plot
plot(d)
points(d$x[tp$tppos],d$y[tp$tppos],col="red")

모든 솔루션 중에서 가장 효과적이었습니다. 1. 후속 질문 : 전환점으로 공차를 토글하는 방법이 있습니까? 밀도 함수의 긴 꼬리 부분에서 많은 피크와 밸리를 발견했습니다. 2. 후속 질문 # 2 : 허용 오차를 결정하는 좋은 방법은 무엇입니까?
aaronlevin

ad 1. 나는 그렇게 생각하지 않습니다. 시계열의 임의성을 테스트하기위한 것이므로 함수에는 필요하지 않습니다. 피크의 관련성 / 의미를 직접 테스트 해 볼 수 있습니다. 예를 들어, 이웃에 대해 t- 테스트를 수행 할 수 있습니다 (이웃의 크기를 결정할 수있는 위치). 또는 (질량) 분광 분석법 또는 기타 분석 화학 분석법의 데이터 평가를 위해 R 패키지에서보다 복잡한 기능을 찾을 수 있습니다.
Roland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.