4

s1mというタイトルのデータフレームにタンパク質間相互作用のデータがあります。DB と AD の各ペアは相互作用を行い、それをプロットすることもできます。

> head(s1m)
     DB_num AD_num
[1,]      2   8153
[2,]      7   3553
[3,]      8   4812
[4,]     13   7838
[5,]     24   3315
[6,]     24   6012

データのプロットは次のようになります。 http://i.imgur.com/RTaeJ5r.jpg

次に、このサイトで見つけたコードを使用して、塗りつぶされた等高線をプロットしました。

## compute 2D kernel density, see MASS book, pp. 130-131
require(MASS)
z <- kde2d(s1m[,1], s1m[,2], n=50)
plot(s1m, xlab="X label", ylab="Y label", pch=19, cex=.4)
filled.contour(z, drawlabels=FALSE, add=TRUE)

結果の画像(落書きを除く)が得られました: 結果

私の質問: 元のデータ フレームのデータの各行s1mに、等高線図の高さに対応する番号を付けて注釈を付ける必要があります (したがって、上の画像の落書き)。リスト z には探している値があると思いますが、よくわかりません。

最終的に、グループでタンパク質の相互作用を研究できるように、データが次のようになることを願っています。

         DB_num AD_num   height
    [1,]      2   8153        1
    [2,]      7   3553        1
    [3,]      8   4812        3
    [4,]     13   7838        6
    [5,]     24   3315        2
    [6,]     24   6012        etc.
4

1 に答える 1

3

これは、それぞれが割り当てられているビンではなく、実際の高さが必要な場合の 1 つのオプションです。

## dummy data
DF <- data.frame(DB_num = rnorm(10000), AD_num = rnorm(10000))

require("MASS")

kde <- kde2d(DF[,1], DF[,2], n = 50)

(この場合) 50 行と 50 列の行列であるkde2dコンポーネントとしての戻り値に注意してください。ここで、行はデータに対応し、列はデータに対応します。行列は単なるベクトルであり、データは列で満たされているため、これを利用してとの値をそれぞれ (ここで) スタックし、巻き戻すことができます。zxyxynn = 50kde$z

dd <- dim(kde$z)
res <- data.frame(DB_num = rep(kde$x, times = dd[1]),
                  AD_num = rep(kde$y, times = dd[2]),
                  height = as.numeric(kde$z))

これにより、

> head(res)
        DB_num      AD_num                                  height
1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484
2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229
3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190
4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235
5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503
6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471

ビンを取得するには、何をしたかに従う必要がありますfilled.contour。これは、経由でブレークを形成することです

nlevels <- 20 ## default
brks <- pretty(range(res$height), nlevels)

> brks
 [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
[16] 0.15 0.16

次に、次のようなものに基づいて、cutそれぞれをビンに割り当てるために使用しますheightbrks

res <- transform(res, bin = as.numeric(cut(height, brks)))

どちらが与える

> head(res)
        DB_num      AD_num                                  height bin
1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484   1
2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229   1
3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190   1
4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235   1
5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503   1
6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471   1

おそらく?cut、ビンの境界での動作を判断するために の詳細を確認する必要がありますが、それで十分に近づくことができます。

于 2013-07-22T20:52:17.210 に答える