我正在使用
statsmodels.stats.multitest.multipletests
功能
更正
p-values
我已存储在数据框中:
p_value_df = pd.DataFrame({"id": [123456, 456789], "p-value": [0.098, 0.05]})
for _, row in p_value_df.iterrows():
p_value = row["p-value"]
print(p_value)
results = multi.multipletests(
p_value,
alpha=0.05,
method="bonferroni",
maxiter=1,
is_sorted=False,
returnsorted=False,
)
print(results)
我真的想将tuple
输出的每个元素添加为
p_value_df
中的新列,但我有点卡住了。我尝试将结果转换为列表并使用
zip(*tuples_converted_to_list)
,但由于某些值是
floats
,这会引发错误。此外,我想拉动
array
元素,以便
array([False])
就是
False
。任何人都可以就执行此操作的策略提出任何建议吗?
listcomp 制作多重测试列表,将其传递给 DataFrame
p_value_df
加入它:
import statsmodels.stats.multitest as multi
def fn(pval):
return multi.multipletests(
pval, alpha=0.05, method="bonferroni",
maxiter=1, is_sorted=False, returnsorted=False,
)
l = [
[e[0] if isinstance(e, np.ndarray) and e.size == 1 else e
for e in fn(pval)] for pval in p_value_df["p-value"]
]
cols = ["reject", "pvals_corrected", "alphacSidak", "alphacBonf"]
out = p_value_df.join(pd.DataFrame(l, columns=cols))
输出:
print(out)
id p-value reject pvals_corrected alphacSidak alphacBonf
0 123456 0.098 False 0.098 0.05 0.05
1 456789 0.050 True 0.050 0.05 0.05