首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使pvalue和折叠变化计算效率更高

使pvalue和折叠变化计算效率更高
EN

Stack Overflow用户
提问于 2022-05-15 17:06:19
回答 1查看 26关注 0票数 1

我有一个像这样的数据文件:

代码语言:javascript
复制
      a     a     a     b     b     b
______________________________________
0     1     2     2     1     1     1
1     2     4     2     1     2     5
2     3     6     2     3     2     2
3     4     8     2     1     2     2
4     5    10     2     3     5     5
5     6    12     2     1     2     2
.     .     .     .     .     .     .     
.     .     .     .     .     .     .          
.     .     .     .     .     .     .     
8000  1    5      5     5     5     5 

它附带了6列(a和b各表示3个副本,因此它们具有相同的名称)和8001行。我希望计算a和b列中每一行的pvalue、折叠更改和fdr调整后的pvalue。

代码语言:javascript
复制
pvalues = pd.DataFrame()
fcvalues = pd.DataFrame()
qvalues = pd.DataFrame()


pvalue = [stats.ttest_ind(a = data['a'].iloc[i],b = data['b'].iloc[i])[1] for i in np.arange(data.shape[0])]

pvalues['a vs b'] = -np.log10(pvalue)

fold_change_values['a vs b'] = [np.mean((np.array(data['a'].iloc[i]) - np.array(data['b'].iloc[i])))
                                for i in np.arange(int_data.shape[0])]

qvalues['a vs b'] = fdrcorrection(pvalue)

这段代码的问题是需要21秒才能执行。你们有什么建议让这个更快更有效率吗?我刚开始编写代码,所以没有太多的经验可以提高代码的效率。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-15 18:24:15

如果我理解正确的话,你可以这样把它矢量化:

代码语言:javascript
复制
pvalues = pd.DataFrame()
fcvalues = pd.DataFrame()
qvalues = pd.DataFrame()

a_data = data['a'].to_numpy()
b_data = data['b'].to_numpy()

# T test for each row pair.
pvalue = stats.ttest_ind(a=a_data, b=b_data, axis=1)[1]

pvalues['a vs b'] = -np.log10(pvalue)

fold_change_values = pd.DataFrame()
# Mean difference for each row.
fold_change_values['a vs b'] = np.mean(a_data - b_data, axis=1)

qvalues['a vs b'] = fdrcorrection(pvalue)

这应该要快得多,因为它消除了列表理解中的.iloc索引和for循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72250453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档