在R或Python

时间:2017-04-26 15:52:49

标签: r python

我在R中使用数字矩阵 M 非常大(每20列11000行)。在这个矩阵上,我进行了很多相关性测试

=>函数cor.test(M[i,], M[j,], method='spearman')其中i和j是矩阵中的两行(测试所有可能的组合)。

您知道的问题是我做了太多测试以获得此测试返回的非常可靠的p值。

我克服这个限制的策略是通过我的矩阵M上的Bootstrap生成一个新的概率分布:我想从M生成100个随机矩阵来对这些矩阵进行多重相关并选择正确的截止值因为p值得到5%的FDR。

我的问题是:

  1. 将矩阵随机化的最有效方法是什么?
  2. 由于时间很长(我想)如果解决方案可以并行化,那可能会很有用。
  3. 提前感谢您提供的所有有用的答案。

1 个答案:

答案 0 :(得分:0)

在python中,模块random中有一个函数random.sample()。如果您将 M 存储为行列表,则无需替换即可从矩阵n中随机抽样M

M_sample = random.sample(M,n)

但是,对于自举,您可能希望使用替换进行随机抽样。为此,您可以使用numpy.random.choice()

import numpy
M_sample = numpy.random.choice(M,n,replace=True)

在R中,我们使用sample()随机决定要采用的行索引,然后使用行访问从矩阵中获取行。从矩阵n中随机抽样M行而不进行替换,如下所示:

indices = sample(nrow(M), n,replace=FALSE)
M_sample = M[indices, ]

对于随替换的随机抽样,请将第一行替换为:

indices = sample(nrow(M), n,replace=TRUE)