0

.ab1 ファイルから抽出したシーケンス実行情報 (4 ヌクレオチド) があります。4 つのマルチピーク ガウス分布をデータに適合させたい (4 つの異なるヌクレオチドに対応) データは 5 つの列 (インデックス列と 4 つのヌクレオチド -A、T、からの読み取りに対応する他の 4 つの列) を持つ csv ファイルです。 G と C.

 x=data.frame(read.csv(file.choose()))
 smooth1=ksmooth(x$index,x$A,kernel="normal",bandwidth=2)
 smooth2=ksmooth(x$index,x$C,kernel="normal",bandwidth=2)
 smooth3=ksmooth(x$index,x$G,kernel="normal",bandwidth=2)
 smooth4=ksmooth(x$index,x$T,kernel="normal",bandwidth=2)
 dsmooth1=diff(smooth1$y)
 dsmooth2=diff(smooth2$y)
 dsmooth3=diff(smooth3$y)
 dsmooth4=diff(smooth4$y)
 locmax1<-sign(c(0,dsmooth1))>0 & sign(c(dsmooth1,0))<0
 locmax2<-sign(c(0,dsmooth2))>0 & sign(c(dsmooth2,0))<0
 locmax3<-sign(c(0,dsmooth3))>0 & sign(c(dsmooth3,0))<0
 locmax4<-sign(c(0,dsmooth4))>0 & sign(c(dsmooth4,0))<0
 plot(x$index,x$A,xlim=c(900,950))
 lines(smooth1)
 lines(smooth2,col="green")
 lines(smooth3,col="blue")
 lines(smooth4,col="red")
 points(smooth1$x[locmax1],smooth1$y[locmax1],cex=3,c=2)
 points(smooth2$x[locmax2],smooth2$y[locmax2],cex=3,c=2)
 points(smooth3$x[locmax3],smooth3$y[locmax3],cex=3,c=2)
 points(smooth4$x[locmax4],smooth4$y[locmax4],cex=3,c=2)

さらにピークを見つけるために、次を使用しました

peaks=function(x) {
   modes=NULL
   for ( i in 2:(length(x)-1) ){
   if ( (x[i] > x[i-1]) & (x[i] > x[i+1]) ) {
     modes=c(modes,i)
   }
   }
   if ( length(modes) == 0 ) {
   modes = 'This is a monotonic distribution'
   }
   return(modes)
   }

  x$A[peaks(x$A)] #similarly, for T,G and C

特定のポイントには複数のピークがあり、複数のガウス分布のピークを持つ位置を見つけるコードを記述する必要があります (複数のヌクレオチドからのシグナルに対応)。R でそれを行う方法はありますか?

4

1 に答える 1

1

基本的に、混合モデルをデータに当てはめています。つまり、4 つのガウス分布の混合です。それらについて読むことをお勧めします。これらを処理するには、ピークを平滑化して検出するよりも洗練された方法があります (これはカーネル幅に大きく依存する可能性があります。したがって、平滑化を行う場合は、感度分析を行い、異なるカーネルとカーネル幅で結果がどのように変化するかを確認する必要があります)。

R 用のmixtoolsパッケージが役立つはずです。

于 2014-12-17T08:24:06.650 に答える