如何在DataFrame中筛选Sample_1与Sample_2弱相关性的Gene ID
实现思路与代码可用性说明
你提到的corrr代码无法直接实现需求
你给出的corrr::correlate(your_data, method = "pearson")只能计算数据框列与列之间的整体相关系数,最终只会输出Sample_1和Sample_2两个样本整体的皮尔逊相关值,完全无法对应到单个Gene ID的相关特征,因此不能直接用。
具体实现思路
首先先澄清前提:你提供的示例中每个基因仅对应Sample_1、Sample_2各1个表达值,单个基因的两组各1个数值无法单独计算相关系数,你所说的“两列数值无相关性/相关性较差”本质是指该基因的表达量偏离两个样本的整体线性相关趋势更远,属于离群点,你可以按以下步骤实现:
- 第一步:确定筛选规则,常用两种可二选一:
- 残差法:先拟合Sample_2对Sample_1的线性回归方程,计算每个基因对应点到回归线的残差绝对值,残差越大说明偏离整体相关趋势越远,符合“相关性差”的判定
- 倍数法:计算每个基因的表达倍数变化
FC = Sample_2 / Sample_1(0值可先加1做伪计数避免报错),FC偏离整体平均水平越多越符合要求
- 第二步:根据你设定的阈值(比如残差绝对值大于50,或者FC大于2/小于0.5),筛选出符合条件的行,提取对应的Gene ID即可
- 如果你实际的Sample_1、Sample_2是有多列重复的场景,每个基因可以对应两组各多个数值,则可以按行遍历每个基因,单独计算两组数值的皮尔逊/斯皮尔曼相关系数,筛选相关系数绝对值小于0.3(通常认为低于该值为弱相关/无相关)的行提取Gene ID即可,该场景可以用
apply系列函数按行计算,无需使用corrr包的列相关函数。
内容的提问来源于stack exchange,提问作者tedahes806
相关产品推荐
相关产品推荐

