簡體   English   中英

系統發育樹

[英]Phylogenetic tree

我正在努力建立一個基於成對數據基因的系統發育樹。下面是我的數據子集(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列的基因

在此輸入圖像描述

在問題的例子中有一些解釋的余地​​。 我的答案只有在每個人中只有兩個基因並且每行描述一個人時才有效。 但是,如果每行意味着gene1gene2一起發生,我認為不能進行有用的聚類。 在那種情況下,我希望有一個額外的列說明它們常見的可能性,並且可能更喜歡主成分分析(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))

也許,讀一下距離測量euclideanmanhattan等之間的差異是一個好主意。例如, ID=1ID=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) + ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM