我有来自77名癌症患者的基因表达数据。我有一组来自患者的血液,一组来自患者肿瘤,一组来自患者的健康组织:
data1 <- ExpressionBlood
data2 <- ExpressionCancerTissue
data3 <- ExpressionHealtyTissue
如果肿瘤组织中的表达与我所有基因的血液表达相关,我想进行分析。这样做的最佳方式是什么?
答案 0 :(得分:3)
如果您熟悉python我会使用pandas。它使用&#34; DataFrames&#34;与R类似,因此您可以将概念应用于R。
假设您的data1
是一个格式如下的分隔文件:
GeneName | ExpValue |
gene1 300.0
gene2 250.0
然后,您可以将每种数据类型转换为DataFrame
:
dfblood = pd.read_csv('path/to/data1',delimiter='\t')
dftissue = pd.read_csv('path/to/data2',delimiter='\t')
dftumor = pd.read_csv('path/to/data3',delimiter='\t')
现在merge
将DataFrame合并为一个主人df
。
dftmp = pd.merge(dfblood,dftissue,on='GeneName',how='inner')
df = pd.merge(dftmp,dftumor,on='GeneName',how='inner')
重命名列,请注意确保正确的顺序。
df.columns = ['GeneName','blood','tissue','tumor']
现在,您可以使用简单的命令对数据进行标准化(如果还没有)。
df = df.set_index('GeneName') # allows you to perform computations on the entire dataset
df_norm = (df - df.mean()) / (df.max() - df.min())
您可以df_norm.corr()
生成以下结果。但此时,如果需要,您可以使用numpy执行更复杂的计算。
blood tissue tumor
blood 1.000000 0.395160 0.581629
tissue 0.395160 1.000000 0.840973
tumor 0.581629 0.840973 1.000000
HTH至少朝着正确的方向前进。
修改强>
如果您想使用Student T的对数倍更改,您可以使用numpy.log
import numpy as np
df[['blood','tissue','tumor']] = df[['blood','tissue','tumor']]+1
# +1 to avoid taking the log of 0
df_log = np.log(df[['blood','tissue','tumor']])
获取&#39;日志&#39;对每个基因进行折叠更改,这会将新列附加到df_log DataFrame。
df_log['logFCBloodTumor'] = df_log['blood'] - df_log['tumor']
df_log['logFCBloodTissue'] = df_log['blood'] - df_log['tissue']