그래프에서 계곡을 찾는 방법?


10

나는 기본적으로 게놈의이 위치가 얼마나 잘 (또는 "깊게") 포함되어 있는지를 나타내는 기본적으로 긴 정수 목록 (수백만 값) 인 일부 게놈 범위 데이터를 조사하고 있습니다.

이 데이터에서 "밸리", 즉 주변 환경보다 "낮은"지역을 찾고 싶습니다.

내가 찾고있는 계곡의 크기는 50베이스에서 수천까지 다양합니다.

그 계곡을 찾기 위해 어떤 종류의 패러다임을 사용하고 싶습니까?

최신 정보

데이터의 일부 그래픽 예제 : 대체 텍스트 대체 텍스트

업데이트 2

계곡을 정의하는 것은 당연히 내가 겪고있는 질문 중 하나입니다. 이들은 나에게 명백한 것입니다. 대체 텍스트 대체 텍스트

그러나 좀 더 복잡한 상황이 있습니다. 일반적으로, 내가 고려하는 세 가지 기준이 있습니다. 1. 글로벌 평균과 관련하여 창에서 (평균? 최대?) 적용 범위. 2. 창 주변의 (...) 적용 범위. 창 3. 얼마나 큰 : 나는 짧은 기간에 대한 매우 낮은 범위를 참조하는 경우는, 재미 나는 오랜 기간 매우 낮은 범위를 보면 그것이 내가 짧은 기간에 대한 약간 낮은 범위를 보면 그것의, 또한 흥미로운 하지 정말 흥미로운 그러나 긴 스팬에 대해 약간 낮은 적용 범위를 볼 경우-.. 그래서 그것은 sapn의 길이와 적용 범위의 조합입니다. 더 길수록 커버리지가 높아지고 여전히 계곡으로 간주됩니다.

감사,

데이브


작은 데이터 샘플을 제공 할 수 있습니까?
Shane

@ 셰인 업데이트 참조
David B

@David 감사합니다. 두 대답 모두 암시 하듯이 관측 값을 정렬 한 이후 시계열 분석을 여기에 적용 할 수 있습니다.
Shane

이것은 당신이 찾고있는 것을 정확히 모른다면 대답하기가 어렵습니다. 캡처하려는 플롯의 점에 동그라미를 칠 수 있습니까? "밸리"는 무엇인가요? 얼마나 낮아야하고 무엇을 보려고합니까? 문제, 즉 임계 값 등을 몰라도 솔루션을 공식화하기는 어렵습니다.
Falmarri

@ Shane ♦ 감사합니다. 시계열 분석에 대한 경험이 없기 때문에 어디서부터 시작해야하는지 몇 가지 조언을 해 주실 수 있습니까?
David B

답변:


5

예를 들어 데이터의 이동 평균을 사용하여 일종의 Monte Carlo 접근 방식을 사용할 수 있습니다.

합리적인 크기의 창을 사용하여 데이터의 이동 평균을 가져옵니다 (얼마나 넓은지를 결정 하는가에 달려 있습니다).

데이터의 스루는 (물론) 평균이 낮으므로 이제 "낮음"을 정의하기 위해 "임계 값"을 찾아야합니다.

이를 위해 데이터 값을 무작위로 교환하고 (예 :을 사용하여 sample()) 교환 된 데이터의 이동 평균을 다시 계산하십시오.

이 마지막 구절을 합리적으로 많은 횟수 (> 5000)로 반복하고이 시험의 모든 평균을 저장하십시오. 따라서 기본적으로 시행 당 한 줄씩 5000 줄의 행렬이 있으며 각 줄에는 해당 시행의 이동 평균이 포함됩니다.

이 시점에서 각 열에 대해 5 % (또는 1 % 또는 원하는) Quantile을 선택합니다. 즉, 무작위 데이터 평균의 5 %에 ​​불과한 값입니다.

이제 원본 데이터와 비교할 수있는 "신뢰 제한"(정확한 통계 용어인지 확실하지 않습니다)이 있습니다. 이 한계보다 낮은 데이터 부분을 찾으면 통과를 호출 할 수 있습니다.

물론, 이것이나 다른 수학적 방법으로는 생물학적 중요성을 알 수는 없지만, 잘 알고 있다고 확신합니다.

편집-예

require(ares) # for the ma (moving average) function

# Some data with peaks and throughs 
values <- cos(0.12 * 1:100) + 0.3 * rnorm(100) 
plot(values, t="l")

# Calculate the moving average with a window of 10 points 
mov.avg <- ma(values, 1, 10, FALSE)

numSwaps <- 1000    
mov.avg.swp <- matrix(0, nrow=numSwaps, ncol=length(mov.avg))

# The swapping may take a while, so we display a progress bar 
prog <- txtProgressBar(0, numSwaps, style=3)

for (i in 1:numSwaps)
{
# Swap the data
val.swp <- sample(values)
# Calculate the moving average
mov.avg.swp[i,] <- ma(val.swp, 1, 10, FALSE)
setTxtProgressBar(prog, i)
}

# Now find the 1% and 5% quantiles for each column
limits.1 <- apply(mov.avg.swp, 2, quantile, 0.01, na.rm=T)
limits.5 <- apply(mov.avg.swp, 2, quantile, 0.05, na.rm=T)

# Plot the limits
points(limits.5, t="l", col="orange", lwd=2)
points(limits.1, t="l", col="red", lwd=2)

이렇게하면 영역을 그래픽으로 찾을 수 있지만의 라인에서 무언가를 사용하여 쉽게 찾을 수 있습니다 which(values>limits.5).


분명히 이동 평균 이외의 것을 사용하여 동일한 접근 방식을 적용 할 수 있습니다. 이것은 단지 아이디어를 제공하는 것이 었습니다.
니코

+1 감사합니다, 니코 마지막으로, 이것은 전역 임계 값을 설정하고 계곡의 일부로 임계 값이 <<인 포인트를 정의하는 것과 같습니다. 샘플링 등은 임계 값을 설정하기 위해 의미있는 측정 값 (사 분위수)을 얻는 데 사용됩니다. 전체 점에 대해 단일 임계 값을 사용할 수없는 이유는, 충분한 시뮬레이션을 수행하면 직선 (읽기 및 노랑) 선이 표시됩니다. 또한 내가 틀렸다면 정정하십시오. 그러나 이것은 주변 환경을 고려하지 않지만 각 점의 절대 값을 검사합니다.
David B

@David B : 물론 전역 임계 값을 사용할 수 있으며 계산 시간을 절약 할 수 있습니다. 전 세계 평균의 1/3과 같은 것을 선택하는 것이 시작일 수 있습니다. 이 스와핑 프로세스는 이동 평균 이외의 다른 통계를 사용하는 경우 더 도움이 될 수 있습니다. 어쨌든 이동 평균은 주변을 고려할 것이며,이 예에서는 10 포인트의 창을 고려할 것입니다.
니코

4

나는이 데이터를 완전히 알지 못하지만 데이터가 (시간이 아니라 위치에 따라) 정렬되어 있다고 가정하면 시계열 방법을 사용하는 것이 좋습니다. 데이터에서 시간적 클러스터를 식별하는 방법은 많이 있습니다. 일반적으로 이들은 높은 값을 찾는 데 사용되지만 낮은 값을 함께 그룹화하는 데 사용할 수 있습니다. 카운트 데이터에서 질병 발생을 감지하는 데 사용되는 스캔 통계, 누적 합계 통계 (및 기타)에 대해 생각하고 있습니다. 이러한 방법의 예는 감시 패키지와 DCluster 패키지에 있습니다.


@cxr 답변 해 주셔서 감사합니다. 나는 한 번 봐 가지고 surveillanceDCluster ,하지만 당신은 좀 더 구체적으로하시기 바랍니다 수 있을까? 그것들은 비교적 큰 패키지이며 그들의 목표는 매우 구체적으로 보입니다. 어디서부터 시작해야할지 모르겠습니다.
David B

2

이에 대한 많은 옵션이 있지만 한 가지 좋은 옵션이 있습니다 . packagemsExtrema함수를 사용할 수 있습니다 .msProcess

편집하다:

재무 성과 분석에서 이러한 종류의 분석은 종종 "드롭 다운"개념을 사용하여 수행됩니다. PerformanceAnalytics패키지는 일부가 이 계곡을 찾기 위해 유용한 기능을 . 관측치를 시계열로 취급하는 경우 여기에서 동일한 알고리즘을 사용할 수 있습니다.

다음은 데이터에이를 적용 할 수있는 방법에 대한 몇 가지 예입니다 ( "날짜"는 관련이 없지만 주문에 사용 된 경우). zoo개체 의 첫 번째 요소는 데이터입니다.

library(PerformanceAnalytics)
x <- zoo(cumsum(rnorm(50)), as.Date(1:50))
findDrawdowns(x)
table.Drawdowns(x)
chart.Drawdown(x)

Shane에게 감사하지만, 이것은 지역 최소 점 (또는 최대 점)을 찾는 것 같습니다. 내 데이터 (생물학적 데이터)는 노이즈입니다.> 포인트 최소 자체는 중요하지 않지만 낮은 지역의 경우에는 신경 쓰지 않습니다.
David B

로컬 최대 및 최소 포인트가 있으면 차이를 쉽게 계산할 수 있습니다. 차이가 크거나 "지속 기간"인 경우를 알고 싶습니까? 이 시계열 데이터입니까?
Shane

@david 아마도이 기능을 반복적으로 사용할 수 있습니다. 이 기능을 사용하여 최소값을 식별하십시오. 해당 지점과 주변 지점을 삭제합니다 (예 : 일부 공차 수준 내의 x 지점). 응용 분야의 평평한 영역을 정의하는 공차 수준 (예 : + -10 카운트)을 선택할 수 있습니다. 새 데이터 세트에서 새로운 최소값을 찾으십시오. 작동합니까?

@shane 생각 나는 비유는 산악 지역의 계곡에 대한 비유입니다. 목표는 모든 계곡을 식별하는 것이며 문제는 일부 계곡이 '깊고', 일부는 산에 비해 '얕은'것입니다.

@Shane 시계열이 아니며 게놈 (염색체)을 따라 좌표입니다.
David B

2

의 일부 Bioconductor 의 패키지 (예를 들어, ShortRead , Biostrings , BSgenome , IRanges , genomeIntervals ) 예 : 게놈 위치 또는 범위 벡터, 처리를위한 청약 시설 칩 서열 과 풍부한 지역을 식별. 다른 답변에 관해서는, 일부 임계 값 기반 필터로 정렬 된 관측에 의존하는 모든 방법을 사용하여 특정 대역 내에서 낮은 신호를 분리 할 수 ​​있다는 데 동의합니다.

어쩌면 소위 "섬"을 식별하는 데 사용되는 방법을 볼 수도 있습니다

Zang, C, Schones, DE, Zeng, C, Cui, K, Zhao, K 및 Peng, W (2009). 히스톤 수정 ChIP-Seq 데이터로부터 농축 도메인을 식별하기위한 클러스터링 접근법 . 생물 정보학, 25 (15) , 1952-1958.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.