为了简单起见,我提出以下方案:
Gene_1 Gene_2 Gene_3
Patient_1 220.43 12,959 12,311
Patient_2 270.27 12,870 13,234 miRNA_1 miRNA_2 miRNA_3
Patient_1 220.43 12,959 12,311
Patient_2 270.27 12,870 13,234Gene miRNA Correlation P-value Adjusted P-value
Gen_1 miRNA_1 0,959 0.00311 0.00014
Gen_1 miRNA_2 -0,039 0.00311 0.00014
Gen_1 miRNA_3 -0,344 0.00311 0.00014
Gen_2 miRNA_1 0,1333 0.00311 0.00014
Gen_2 miRNA_2 0,877 0.00311 0.00014
...交叉连接的结果(全部针对all)可能导致具有数十亿行的DataFrame。要给出所需空间的维数,撇开基因和miRNAs的列,考虑3亿行的小结果,需要300000000 *(浮动pt + 64位p值+ 64位调整后的p值)=5GB左右。
为了优化内存的使用,我分批进行计算,问题在于调整后的p值,因为我使用了Benjamini & Hochberg (1995)的方法,函数R的p.adjust (使用Python包装器)需要完整的p值数组,这使我的内存耗尽。
是否有任何方法,从另一个库或其他类似的统计方法,p-值调整成批?
我已经尝试过FastLSU技术来过滤掉一些没有意义的p值,但据我所知,当我得到每一行的调整p值时,我需要知道所有的p值。如果我能得到每一行调整后的p值,我的问题就会得到解决,因为我可以将批处理的结果下载到磁盘,告别复杂的情况。
如果有人能在这个问题上说点什么,我将非常感激。
发布于 2020-07-10 17:44:00
你能进一步解释一下你是如何成批计算的吗?整个p值数组本身不应该大到导致内存问题.因此,您的主要问题似乎是,您试图将交叉连接的DF保存在内存中,并进行所需的计算。因此,以下是我的想法:
在这里,我将解释第一个要点,我认为它至少可以让您在没有内存问题的情况下获得最终的数据帧:我首先尝试将这个问题变成一个嵌套的数据帧列循环,在这个循环中,您可以找到每个基因的get >所有miRNAs,然后在计算q值并使用截止值之后将其子集化。然后,您将只存储在内存中的对已达到您的Q值阈值。我不建议尝试使用所有这些数据创建一个联合的DF,因为这将占用太多的内存。我为下面的循环写了伪代码。我觉得这会帮助你耗尽记忆,但是它还是会很慢。如果内存仍然不足,是否有可用的群集?同时,并行化也会更好。你可以用python写它,但是你有火花吗?如果您将继续使用“大数据”,我将尝试访问您所在机构的集群,或者使用AWS或其他方式支付费用。
我要用基因来称呼你的DF : geneDF,DF和microRNA mirnaDF。请记住,这是python伪代码,而且非常混乱。如果你觉得对你有用的话,我可以把它清理干净。我写得更清楚了。
top_adjusted_pairs = pd.DataFrame(columns=['gene', 'miRNA', 'qval'])
for i in range(len(geneDF)):
# initialize array for the distances between all microRNAs with just gene X
miRNA_geneX_pvals = []*len(microRNAsDF)
geneCol = geneDF[i]
for j in range(len(mirnaDF)):
mirnaCol = mirnaDF[j]
# compute distances and write pvalue into array
pval = dist(geneCol, mirnaCol).pval
miRNA_geneX_pvals[j] = [miRNA.name, gene.name, pval]
# now that you have the array of distances between gene X and all miRNAs you can use multiple hypothesis correction.
qvals = adjust(miRNA_geneX_pvals['pval'])
# pick q-val cut off
top_mirna_geneX = miRNA_geneX_pvals[qvals<0.1]
top_adjusted_pairs.union(top_mirna_geneX)
```https://datascience.stackexchange.com/questions/77399
复制相似问题