我在R中使用数字矩阵 M 非常大(每20列11000行)。在这个矩阵上,我进行了很多相关性测试
=>函数cor.test(M[i,], M[j,], method='spearman')
其中i和j是矩阵中的两行(测试所有可能的组合)。
您知道的问题是我做了太多测试以获得此测试返回的非常可靠的p值。
我克服这个限制的策略是通过我的矩阵M上的Bootstrap生成一个新的概率分布:我想从M生成100个随机矩阵来对这些矩阵进行多重相关并选择正确的截止值因为p值得到5%的FDR。
我的问题是:
提前感谢您提供的所有有用的答案。
答案 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)