除了可以研究不同生物之間的親緣關係之外,不同生物之間的形態差異很多時候還代表了不同生物在分化之後在不一樣的環境下面適應的結果。所以如何量化分析形態上的差異,一直都是演化學和系統分類學研究的主要研究方向之一。其中一個方法可以將不同形狀量化成值的做法就是利用Geometric morphometric analysis

geomorph是一個R用來做geometric morphometrics分析的package,只要研究員有已經照好的照片(以2d的data為例,但是這個package也可以做3d的影像處理跟分析),就可以一條龍的從選擇landmarks到Procrustes analysis一直到PCA全部完成(link)。非常的方便!
因為我用的背景是Mavericks,想在這個背景之下執行geomorph需要的tcltk已經沒有OSX裡面,所以如果你是跟我一樣喜歡使用Xcode 5或是不小心已經update變成Mavericks,你需要先去下載安裝新的X11(XQuartz)才可以跑geomorph這個package。
安裝geomorph的方法就跟其它安裝R package的方法一樣,只要在R 輸入:
install.packages('geomorph');

接下來在R用Misc裡面的changing working directory找到放圖檔的資料夾就可以開始把選好的Landmarks存成.tps檔了!
先把geomorph這個package的所有functions叫到R裡面:
library(geomorph);
之後在R裡面輸入下面這一個指令:
digitize2d('DhsCR2.jpg', 9, 10, tpsfile = 'Dynastes.tps');

digitize2d是分析圖檔用的function。
filename.jpg是告訴R你要用哪一個圖檔分析。我的例子是DhsCR3.jpg這個圖檔。
第三個數字9是告知這個function這個圖中我要存9個landmarks。
第四個數字10是說我會告知這個程式10 minimeters在圖片裡面是多長。
最後一個是跟程式說執行完了之後把結果存成.tps檔,名稱叫做Dynastes.tps。
(我的例子總共分析15個.jpg檔,全部一起存在Dynastes.tps中)

一切順利的話圖檔就會在R開啓(如下圖):
1
接著我們要在那條黑色的scale bar前後各按一下(用滑鼠左鍵按,沒錯就是這麼簡單),告知R這兩個紅色圈圈之間代表長度10mm(R prompt出現scale bar 正不正確?你就按y之後按return跟它說對):
2
接下來就是一個landmark一個landmark的按。每按一個之後R prompt都會問你一次你點的landmark是不是你要的(這個例子都是):
3
另外一個例子,用不一樣的種類(DheE2):
5
全部都按完了之後,資料夾裡面就會出現儲存好的.tps檔了,可以用Wrangler打開來看裡面長什麼樣子:
4

等到將所有的.jpg圖檔都用digitize2d將landmarks的資訊存成.tps檔之後,就可以先對這些landmarks做procrustes analysis。首先用readland.tps這一個function將Dynastes.tps這個檔案叫進去R:
lms <- readland.tps('Dynastes.tps', specID = 'ID');
lms是之後要用的所有landmarks檔案我給它的名字,specID是跟R說每個個體的種名用tps檔案裡面的ID表示。

再來就是generalized procrustes analysis:
lms.gpa <- gpagen(lms);
下圖就會出現在R console:灰色的點是原始資料,黑色的點則是不同個體之間procrustes analysis之後的那個landmark的anchor:
6
設一下依照順序出現的species的顏色:
spid <- c('gold','gold','gold','gold','gold','gold','brown','brown','brown','brown','green','green','green','green','green');
這個例子用了6個ecu(金色gold),4個occ(棕色brown),及5個sep(綠色)物種的image data。
然後使用plotTangentSpace這個function就可以得到大家喜歡的geometric morphometric analysis的圖了!
lms.pca <- plotTangentSpace(lms.gpa$coords, label = NULL, group=spid);
7

在R console就打lms.pca,下面的表就會出現就可以知道每個PC解釋Data的百分比有多少:
8
相當的方便!PC1就解釋五十多百分比的變量,PC2二十多百分比!

最後就是對data做anova的分析看看有沒有顯著差異在各個不同種間:
lms.2d <- two.d.array(lms.gpa$coords);
procD.lm(lms.2d~spid);
下面的結果就會出現在R console(根據999個permutatios,如果想用不一樣的permutation number就在function裡面加上iter = ###的只是就好,不同種類有顯著的不同):
9
然後再做pairwise的比較:
lms.pd <- pairwiseD.test(lms.2d~spid);
就可以得到兩兩相比的結果(1: brown, 2: gold, 3: green:注意這邊結果會是alphabetical的用123排列):
10
ecu(gold)跟其它兩個種類很不一樣(P = 0.058, 0.015),occ跟sep就分不開來(P = 0.642)。

很方便的一個package!
當然還有更多新的分析可以參考作者自己的網頁:
http://www.geomorph.net/
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 airbugs 的頭像
    airbugs

    airbugs

    airbugs 發表在 痞客邦 留言(0) 人氣()