2017-03-07 9 views
1

私はこのテーブル有する(NumSucc =成功回数、NumberTrials =試行回数および度Probが成功の確率である):ExcelとScipyの累積二項分布p値の差は?

Gene NumSucc NumTrials Prob 
Gene1 16  26  0.9548 
Gene2 16  26  0.9548 
Gene3 12  21  0.9548 
Gene4 17  27  0.9548 
Gene5 17  27  0.9548 
Gene6 17  27  0.9548 
Gene7 8  15  0.9548 
Gene8 10  17  0.9548 

Iは、各行の累積二項分布のP値を求めています。私はExcelの列のADにこの正確なテーブルを入れ、その後、列Eに(例えば、行2のための)関数を入力すると:

=BINOMDIST(B2,C2,D2,1) 

出力テーブルは次のようになります

あるいは
Gene NumSucc NumTrials Prob Binomial 
Gene1 16 26 0.9548 9.68009E-08 
Gene2 16 26 0.9548 9.68009E-08 
Gene3 12 21 0.9548 1.40794E-07 
Gene4 17 27 0.9548 1.47463E-07 
Gene5 17 27 0.9548 1.47463E-07 
Gene6 17 27 0.9548 1.47463E-07 
Gene7 8 15 0.9548 1.79741E-06 
Gene8 10 17 0.9548 5.01334E-06 

、場合私はこのコードでscipyのダウンロードには、この正確なテーブルを置く:

import glob 
import os 
import scipy 
from scipy.stats.distributions import binom 
import sys 

def WriteBinomial(InputFile,output): 
    open_input_file = open(InputFile, 'r').readlines()[1:] 
    for line in open_input_file: 
     line = line.strip().split() 
     GeneName,num_succ,num_trials,prob = line[0],int(line[1]),int(line[2]),float(line[3]) 
     print GeneName + "\t" + str(num_succ) + "\t" + str(num_trials) + "\t" + str(prob) + "\t" + str((binom.cdf(num_succ-1, num_trials, prob))) 


WriteBinomial(sys.argv[1],sys.argv[2]) 

出力は次のとおりです。

GeneName NumSucc NumTrials Prob Binomial 
Gene1 16 26 0.9548 6.59829603211e-09 
Gene2 16 26 0.9548 6.59829603211e-09 
Gene3 12 21 0.9548 7.92014917046e-09 
Gene4 17 27 0.9548 1.06754559723e-08 
Gene5 17 27 0.9548 1.06754559723e-08 
Gene6 17 27 0.9548 1.06754559723e-08 
Gene7 8 15 0.9548 8.41770305586e-08 
Gene8 10 17 0.9548 2.93060582331e-07 

2人の方法で同じ結果が得られない理由を知っている人はいますか?

答えて

0

あなたのPythonコードには "num_succ-1"があり、Excel式には "B2-1"がありません。

パイソン - > "binom.cdf(num_succ-1、試行回数、PROB)" エクセル - > "= BINOMDIST(B2、C2、D2,1)"

以下のコードは、同じ出力を生成しなければなりません優れている。

import glob 
import os 
import scipy 
from scipy.stats.distributions import binom 
import sys 

def WriteBinomial(InputFile,output): 
    open_input_file = open(InputFile, 'r').readlines()[1:] 
    for line in open_input_file: 
     line = line.strip().split() 
     GeneName,num_succ,num_trials,prob = line[0],int(line[1]),int(line[2]),float(line[3]) 
     print GeneName + "\t" + str(num_succ) + "\t" + str(num_trials) + "\t" + str(prob) + "\t" + str((binom.cdf(num_succ, num_trials, prob))) 


WriteBinomial(sys.argv[1],sys.argv[2])