【发布时间】:2014-02-17 20:50:08
【问题描述】:
我正在努力建立一个基于成对基因数据的系统发育树。下面是我的数据子集(test.txt)。树不必基于任何 DNA 序列构建,而只是把它当作文字。
ID gene1 gene2
1 ADRA1D ADK
2 ADRA1B ADK
3 ADRA1A ADK
4 ADRB1 ASIC1
5 ADRB1 ADK
6 ADRB2 ASIC1
7 ADRB2 ADK
8 AGTR1 ACHE
9 AGTR1 ADK
10 ALOX5 ADRB1
11 ALOX5 ADRB2
12 ALPPL2 ADRB1
13 ALPPL2 ADRB2
14 AMY2A AGTR1
15 AR ADORA1
16 AR ADRA1D
17 AR ADRA1B
18 AR ADRA1A
19 AR ADRA2A
20 AR ADRA2B
下面是我在 R 中的代码
library(ape)
tab=read.csv("test.txt",sep="\t",header=TRUE)
d=dist(tab,method="euclidean")
fit <- hclust(d, method="ward")
plot(as.phylo(fit))
这里附上我的图
我有一个关于它们如何聚集的问题。因为对
17 AR ADRA1B
18 AR ADRA1A
和
2 ADRA1B ADK
3 ADRA1A ADK
应该紧密聚集,因为它们有一个共同的基因。所以17和2应该在一起,18和3应该在一起。
如果我使用这种方法有误(欧几里得距离),我应该使用其他方法吗?
我是否应该将我的数据转换为行和列矩阵,其中gene1是x轴,gene2是y轴,每个单元格填充1或0?(基本上,如果它们成对意味着1,并且如果不是那么 0)
更新代码:
table=table(tab$gene1, tab$gene2)
d <- dist(table,method="euclidean")
fit <- hclust(d, method="ward")
plot(as.phylo(fit))
但是,在这里我只得到来自gene1而不是gene2列的基因。下图正是我想要的,但也应该有来自gene2列的基因
【问题讨论】:
-
我有点疑惑。如何在字符串上计算欧几里得距离?您的示例中的gene1 和gene2 列真的是字符串还是因子?如果它们是因子并且
dist计算因子水平上的欧几里得距离,我认为没有什么是合理的。 -
我不确定,但看起来您正在尝试基于给定分类单元中存在的基因的 union 进行聚类,而我认为 @ 987654329@ 将根据 each 基因的身份进行聚类——即如果分类单元 1 具有
gene1=A、gene2=B和分类单元 2 具有gene2=B、gene2=A,它们将不匹配完全... -
@Georg 这些是字符串,我正在寻找从该表中获取一些关系以进行一些聚类并构建树的方法。我同意不能使用欧几里得,我只是想给出一个例子,我想要什么。