0

截屏

我有一个文件,如随附的屏幕截图所示。有 61 个事件(峰),我想找出所有可能组合中每个峰与另一个峰(共现)发生的频率。该文件具有频率(峰值出现在 47 个样本中的次数)和概率(峰值出现的次数除以样本总数)。

然后我想使用公式 p(x,y) / p(x)*p(y) 找到互斥峰,其中 p(x,y) 是 x 和 y 同时出现的概率,p(x)是峰值 (x) 的概率,p(y) 是峰值 y 的概率。

解决此类问题的最佳方法是什么?我需要编写 Perl 脚本还是可以使用一些 R 函数?我是一名试图学习 Perl 和 R 的生物学家,所以我会很感激一些示例代码来解决这个问题。

4

2 回答 2

1

在下文中,我假设您交替调用的 p(xy) 和 p(x,y) 实际上应该是同时发生的概率(而不是次数) 。如果这不正确,只需从下面的第 2 行中删除除以。xynrow(X)

# As an example, create a sub-matrix of your data
X <- cbind(c(0,0,0,0,0,0), c(1,0,0,1,1,1), c(1,1,0,0,0,0))

num <- (t(X) %*% X)/nrow(X)              # The numerator of your expression   
means <- colMeans(X)                     # A vector of means of each column
denom <- outer(colMeans(X), colMeans(X)) # The denominator
out <- num/denom
#      [,1] [,2] [,3]
# [1,]  NaN  NaN  NaN
# [2,]  NaN 1.50 0.75
# [3,]  NaN 0.75 3.00

注意:结果中的NaNs 是 R 表示这些单元格“不是数字”的方式(因为它们都是 0 除以 0 的结果)。

于 2012-05-17T21:35:36.247 回答
1

如果没有适当的例子,你的问题并不完全清楚,但我认为这个结果符合你想要的,即“我想找出每个峰值与另一个峰值发生的频率(共现)”

library(igraph)
library(tnet)
library(bipartite)

#if you load your data in as a matrix e.g.

mat<-matrix(c(1,1,0,2,2,2,3,3,3,4,4,0),nrow=4,byrow=TRUE) # e.g.

 #     [,1] [,2] [,3]   #  your top line as columns  e.g.81_05  131_00 and peaks as rows
#[1,]    1    1    0
#[2,]    2    2    2
#[3,]    3    3    3
#[4,]    4    4    0

然后

pairs<-web2edges(mat,return=TRUE)
pairs<- as.tnet(pairs,type="weighted two-mode tnet")
peaktopeak<-projecting_tm(pairs, method="sum")
peaktopeak

#peaktopeak
#   i j w
#1  1 2 2 # top row here says peak1 and peak2 occurred together twice
#2  1 3 2
#3  1 4 2
#4  2 1 4
#5  2 3 6
#6  2 4 4
#7  3 1 6
#8  3 2 9
#9  3 4 6
#10 4 1 8
#11 4 2 8
#12 4 3 8  # peak4 occured with peak3 8 times

编辑:如果不发生互斥峰只是那些在与原始数据相同的列中不共享 1 的峰,那么您可以在peaktopeak. 例如,如果峰值 1 和 3 从未出现,它们将不会在同一行的 peaktopeak 中找到。

为了更容易查看,您可以:

peakmat <- tnet_igraph(peaktopeak,type="weighted one-mode tnet")
peakmat<-get.adjacency(peakmat,attr="weight")

例如:

#     [,1] [,2] [,3] [,4]
#[1,]    0    2    2    2
#[2,]    4    0    6    4
#[3,]    6    9    0    6
#[4,]    8    8    8    0 # zeros would represent peaks that never co occur. 

#In this case everything shares at least 2 co-occurrences 
#diagonals are 0 as saying  peak1 occurs with itself is obviously silly.
于 2012-05-17T21:53:42.840 回答