P値の補正
統計的検定を無造作に何回も繰り返すとき、P値を補正する必要があると言われておりますが、Pythonならそんなこともすぐできます。

from statsmodels.sandbox.stats.multicomp import multipletests
import scipy.stats as ss
ps = ss.ttest_ind(data[cols_0],data[cols_1],axis=1)[1]
cps = multipletests(ps, method='fdr_bh',alpha=0.01)
len(cps[1][cps[0]])

pandas.DataFrameになっているデータを使い、cols_0とcols_1の2群間でt検定を行って、FDR(Benjamini & Hochberg)でP値を補正しています。これで、cps[1]に補正されたP値が入ると、statsmodelsのドキュメントには書いてあるんですが、なぜか全部nan。。。
原因を究明したいところですが、人間ついつい楽をしたくなってしまうもので、Rに渡せばすぐです。

import rpy2.robjects as R
p_adjust = R.r['p.adjust'](R.FloatVector(ps),method='BH')
pvs = np.array(p_adjust)
len(pvs[pvs < 0.01])

それっぽい値もはいっているし、だいたい数も合っているのでいいんじゃないでしょうか。便利な物が多すぎると、ついつい甘えてしまうのは良くないとは思いつつ、世界に貢献したいと思っても、探すとすぐ出てきてしまう世の中なので、創作意欲が削られると言い訳してみたり。
スポンサーサイト
【2014/06/05 19:36】 | Python | トラックバック(0) | コメント(0) | page top↑
<<Pandas.DataFrameに行や列を追加する | ホーム | Pandas.read_csvでファイル読み込み>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/104-5a8ebf04
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |