次の入力ファイル (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
私はしたいと思います:
- 各行のハイパージオム p 値を計算します (正常に実行されました)
- 次に、p 値補正の fdr (BH と同じ) を計算します。
- 調整された p 値を最後の列として追加します。
予想される出力ファイルには 4 つの列があります。1 番目は「Mouse」の値、2 番目は「Human」の値、3 番目は「Hypergeom-pvalue」、4 番目は「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") を取得します。
マウス ヒト Hypergeom-pvalue 調整済み-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 を利用するユーザーの 1 人によって提案されたコマンドに基づいて 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: 'module' オブジェクトに属性 ' getitem 'がありません
したがって、次の 2 つの問題があります。
- このエラーを克服して fdr を計算する方法がわかりません
- ファイルの最後に 4 番目の列として fdr 列を追加するにはどうすればよいですか?