1

我有以下输入文件(Input.xls):

小鼠 No_neigh_mouse 人类 No_neigh_hum 交叉点 TotalGeneTested
GM20645 1 lnc3 2 1 8
GM20645 1 lnc2 1 0 8
GM20645 1 lnc1 2 1 8
GM26549 2 lnc3 2 1 8
GM26549 2 lnc2 1 1 8
GM26549 2 lnc1 2 1 8

我想:

  1. 计算每行的超几何 p 值(成功完成)
  2. 然后计算 p 值校正的 fdr(与 BH 相同)
  3. 将调整后的 p 值添加为最后一列。

我预期的输出文件将有四列。第一个是“Mouse”的值,第二个是“Human”的值,第三个是“Hypergeom-pvalue”,第四个是“Adjusted-pvalue”。我可以使用以下代码生成前 3 列:

output=open("Hypergeom.xls", "w")
output.write("Mouse\tHuman\tHypergeom-pvalue\tAdjusted-pvalue\n")
Input = pd.read_table("Input.xls", sep="\t")

for i in range (0, len(Input.index)):
    hyperg= scipy.stats.hypergeom.sf(Input.ix[i,4], Input.ix[i,5], Input.ix[i,1], Input.ix[i,3],1) #calculates hypergeom p value without a problem
    newline = Input.ix[i,0], Input.ix[i,2], str(hyper)
    output.write('\t'.join(newline)+'\n')
    output.close()

到这里为止,脚本工作正常,我得到以下输出文件(“Hypergeom.xls”):

Mouse Human Hypergeom-pvalue Adjusted-pvalue
GM20645 lnc3 0.25
GM20645 lnc2 1
GM20645 lnc1 0.25
GM26549 lnc3 0.464285714
GM26549 lnc2 0.25
GM26549 lnc1 0.464285714

然后我的目标是重新打开输出文件作为输入,然后根据使用 R 的用户之一建议的命令计算 fdr:如何在 Python 中实现 R 的 p.adjust

然后我的代码:

import rpy2.robjects as R
pvaluefile = pd.read_table("Hypergeom.xls", sep="\t")
pvalue_list = pvaluefile.ix[:,2].tolist()  #converts the value column series to a list
#Now, i try to apply the command from the SO link above
p_adjusted = R['p.adjust'](R.FloatVector(pvalue_list),method='BH')
for v in p_adjusted:
    print v

我在步骤 p_adjusted = R [...] 时遇到错误。错误是:TypeError:“模块”对象没有属性“ getitem

因此,我有两个问题:

  1. 我不知道如何通过克服这个错误来计算 fdr
  2. 如何将文件末尾的 fdr 列添加为第四列?
4

0 回答 0