我正致力于建立一个基于成对的系统发育树-- genes.Below的数据是我的数据子集(test.txt).The树不需要根据任何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))我的数字附在这里

我有个问题问他们是怎样的clustered.Since这对
17 AR ADRA1B
18 AR ADRA1A和
2 ADRA1B ADK
3 ADRA1A ADK应该紧密地聚集在一起,因为它们有一个共同的gene.so 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 column.The,这正是我想要的,但也应该有gene2列中的基因。

发布于 2014-02-17 22:51:40
在这个问题的例子中有一些解释的余地。我的答案只有在每个个体中只有两个基因的情况下才是有效的,每一行描述一个个体。但是,如果每一行都意味着gene1与gene2一起发生,那么在我看来,不能执行任何有用的集群。在这种情况下,我希望增加一列,说明它们常见的可能性,并且可能更喜欢主成分分析(PCA),但我远不是(层次结构)聚类方面的专家。
在使用dist函数之前,必须将数据转换为适当的格式:
# convert test data into suitable format
gene.names <- sort(unique(c(tab[,"gene1"],tab[,"gene2"])))
gene.matrix <- cbind(tab[,"ID"],matrix(0L,nrow=nrow(tab),ncol=length(gene.names)))
colnames(gene.matrix) <- c("ID",gene.names)
lapply(seq_len(nrow(tab)),function(x) gene.matrix[x,match(tab[x,c("gene1","gene2")],colnames(gene.matrix))]<<-1)所获得的gene.matrix具有如下形状:
ID ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ...
[1,] 1 0 1 0 0 0 1 0
[2,] 2 0 1 0 0 1 0 0
[3,] 3 0 1 0 1 0 0 0
[4,] 4 0 0 0 0 0 0 0
...因此,每一行代表一个观察(=个人),其中第一列标识个体,后续列中的每一列都包含1 (如果基因存在)和0 (如果缺失)。在此矩阵上,可以合理地应用dist函数(删除ID列):
d <- dist(gene.matrix[,-1],method="euclidean")
fit <- hclust(d, method="ward")
plot(as.phylo(fit))也许,读一读距离度量euclidean、manhattan等的差异是个好主意。例如,ID=1和ID=2的个体之间的欧几里得距离是:
euclidean_dist = sqrt((0-0)^2 + (1-1)^2 + (0-0)^2 + (0-0)^2 + (0-1)^2 + ...)而曼哈顿的距离是
manhattan_dist = abs(0-0) + abs(1-1) + abs(0-0) + abs(0-0) + abs(0-1) + ...https://stackoverflow.com/questions/21839012
复制相似问题