グラフで谷を探す方法は?


10

私は、基本的に整数の長いリスト(数百万の値)であるゲノムカバレッジデータをいくつか調べています。各整数は、ゲノム内のこの位置がカバーされている(または「深い」)ことを示しています。

このデータで「谷」、つまり周囲の環境よりも大幅に「低い」領域を探したいのですが。

私が探している谷のサイズは、50塩基から数千の範囲であることに注意してください。

それらの谷を見つけるためにどのようなパラダイムを使用することをお勧めしますか?

更新

データのいくつかのグラフィカルな例: 代替テキスト 代替テキスト

アップデート2

谷とは何かを定義することは、もちろん私が苦労している問題の1つです。これらは私にとって明白なものです: 代替テキスト 代替テキスト

しかし、さらに複雑な状況がいくつかあります。一般に、私が検討する3つの基準があります。1.グローバル平均に対するウィンドウ内の(平均?最大?)カバレッジ。2.直接の周囲に関するウィンドウの(...)カバレッジ。3.ウィンドウどのように大規模である:私は短いスパンのために非常に低いカバレッジを見れば、それは私が短いスパンのために軽度の低カバレッジを見れば、それはだ、私は長いスパンのために非常に低いカバレッジを見れば、それはまた面白い、面白いですない本当に面白いです、ただし、長いスパンでカバレッジが少し低い場合-それはそうです。つまり、それは、sapnの長さとカバレッジの組み合わせです。それが長いほど、カバレッジを高くし、それでも谷と見なします。

おかげで、

デイブ


小さなデータサンプルを提供できますか?
シェーン

@Shaneが更新を参照
David B

@Davidありがとう。両方の回答が意味するように、観測を順序付けしたので、時系列分析をここで適用できます。
シェーン

これは、あなたが探しているものを正確に知らなければ答えるのが難しいのです。キャプチャしようとしているプロット上の点に丸を付けられますか?「谷」は何だと思いますか?それはどれくらい低くなければなりませんか、そしてあなたは何を返そうとしていますか?質問など、つまりしきい値などを知らずにソリューションを策定することは困難です。
Falmarri

@シェーン♦ありがとうございます。時系列分析の経験もないので、どこから始めればよいか、いくつかの指針を残してもらえますか?
David B

回答:


5

たとえば、データの移動平均を使用して、ある種のモンテカルロアプローチを使用できます。

適切なサイズのウィンドウを使用して、データの移動平均をとります(幅の決定はあなた次第だと思います)。

データのスルーは(もちろん)より低い平均を特徴とするため、「低」を定義する「しきい値」を見つける必要があります。

これを行うには、データの値をランダムに入れ替え(例:を使用sample())、入れ替えたデータの移動平均を再計算します。

この最後のパッセージをかなり高い回数(> 5000)繰り返し、これらの試行の平均をすべて保存します。したがって、基本的には、1つの試行あたり1つ、5000行の行列があり、各行にはその試行の移動平均が含まれます。

この時点で、各列に対して5%(または1%または必要なもの)の分位点を選択します。これは、ランダム化されたデータの平均値の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)


移動平均以外のものを使用して同じアプローチを適用できることは明らかですが、これは単にアイデアを与えるためのものでした。
nico 2010

+1ニコニコありがとうございます。正解かどうかを見てみましょう。最後に、これは基本的にグローバルしきい値を設定し、値<しきい値のポイントを谷の一部として定義するようなものです。サンプリングなどは、しきい値を設定するための意味のある尺度(変位値)を取得するために使用されます。ポイント全体に単一のしきい値を使用できないのはなぜですか。つまり、十分なシミュレーションを実行すると、直線(読み取りおよび黄色)が得られます。また、間違えた場合は修正してくださいが、周囲の環境は考慮せず、各点の絶対値を調べています。
David B

@David B:もちろん、グローバルしきい値を使用することもできます。これにより、計算時間を節約できます。グローバル平均の3分の1のようなものを選択することから始めると思います。このスワッピングプロセスは、移動平均以外の統計を使用する場合におそらく役立ちます。とにかく、移動平均は周囲を考慮に入れます。この例では、10ポ​​イントのウィンドウを考慮に入れます。
nico

4

私はこれらのデータを完全に無視していますが、データが(時間ではなく、位置によって)順序付けられていると仮定すると、時系列メソッドを使用することは理にかなっています。データ内の時間的クラスターを識別する方法はたくさんあります。通常、これらは高い値を見つけるために使用されますが、グループ化された低い値に対しても使用できます。私はここで、カウントデータの病気の発生を検出するために使用されるスキャン統計、累積合計統計(およびその他)について考えています。これらのメソッドの例は、監視パッケージとDClusterパッケージにあります。


@cxrご回答ありがとうございます。私が見ているsurveillanceとしDCluster ていますが、もう少し具体的に説明してくださいだろうか?どちらも比較的大きなパッケージであり、その目的はかなり具体的であるようです。どこから始めればいいのかわかりません。
David B

2

これには多くのオプションがありますが、1つの良いオプションがありますパッケージmsExtrema内の関数を使用できmsProcessます

編集:

財務パフォーマンス分析では、この種の分析は「ドローダウン」の概念を使用して実行されることがよくあります。PerformanceAnalyticsパッケージには、いくつか持っているこれらの谷を見つけるために、便利な機能を。観測を時系列として扱う場合、ここで同じアルゴリズムを使用できます。

これをデータに適用する方法の例をいくつか示します(「日付」は無関係ですが、順序付けにのみ使用されます)が、zooオブジェクトの最初の要素はデータになります。

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

シェーンさん、ありがとうございます。ただし、これは極小(または極大)、つまり領域内の単一の点を見つけるようです。私のデータ(他の生物学的データと同様)はうるさい>私は実際にはポイントの最小値自体については気にせず、低い大きな領域については気にしません。
David B

極大点と極小点がある場合、その差を簡単に計算できます。違いが大きさと「期間」の両方で大きいインスタンスを知りたいですか?この時系列データですか?
シェーン

@davidおそらく、この関数を繰り返し使用できます。関数を使用して最小値を識別します。そのポイントと周囲のポイントをドロップします(たとえば、ある許容レベル内のxポイント)。アプリケーションのフラット領域を定義する許容レベル(例:+-10カウント)を選択できます。新しいデータセットで新しい最小値を見つけます。うまくいきますか?

@shane頭に浮かぶのは、山岳地帯の谷のアナロジーです。私の目標はすべての谷を特定することであり、問​​題は山に比べて「深い」谷と「浅い」谷があります。

@Shane時系列ではなく、ゲノム(染色体)に沿って調整されます。
David B

2

一部のBioconductorのパッケージ(例えば、ShortReadBiostringsBSgenomeIRangesgenomeIntervalsゲノム位置またはカバレッジベクトルを扱うために)提供施設、例えばのためのChIP-seqのと濃縮された領域を同定します。他の回答については、いくつかのしきい値ベースのフィルターを使用して順序付けられた観測に依存する方法であれば、特定の帯域幅内の低信号を分離できることに同意します。

たぶん、いわゆる「島」を識別するために使用される方法を見ることができます

Zang、C、Schones、DE、Zeng、C、Cui、K、Zhao、K、and Peng、W(2009)。ヒストン修飾ChIP-Seqデータからの豊富なドメインの同定のためのクラスター化アプローチ。バイオインフォマティクス、25(15)、1952-1958。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.