2016-10-07 2 views
2

したがって、私はphytoolsパッケージのphyl.pca関数を使用しているデータセットで系統樹PCAを試してみようとしています。しかし、関数が受け入れる方法でデータを整理する際に問題があります。そして、それだけではありません:私は少し実験を行いました。私はそこにもっと多くの問題があることを知りました。私はそこに入るでしょう...データをペアにしてデータセットを作成し、それを行列に変換する

ここにデータフレームがあります)私が使用していること:

>all 
        Taxa Tibia Feather 
1   Microraptor 138 101 
2   Microraptor 139 114 
3   Microraptor 145 141 
4   Anchiornis 160 81 
5   Anchiornis 14 NA 
6  Archaeopteryx 134 82 
7  Archaeopteryx 136 71 
8  Archaeopteryx 132 NA 
9  Archaeopteryx 14 NA 
10 Scansoriopterygidae 120 85 
11 Scansoriopterygidae 116 NA 
12 Scansoriopterygidae 123 NA 
13   Sapeornis 108 NA 
14   Sapeornis 112 86 
15   Sapeornis 118 NA 
16   Sapeornis 103 NA 
17  Confuciusornis 96 NA 
18  Confuciusornis 107 30 
19  Confuciusornis 148 33 
20  Confuciusornis 128 61 

分類群は、ミクロラプトルは、最も基礎的であることと、その後孔子に至るために、進んで「木」と呼ばれる木()の中に配置されている:

>summary(tree) 

Phylogenetic tree: tree 

    Number of tips: 6 
    Number of nodes: 5 
    Branch lengths: 
    mean: 1 
    variance: 0 
    distribution summary: 
    Min. 1st Qu. Median 3rd Qu. Max. 
     1  1  1  1  1 
    No root edge. 
    Tip labels: Confuciusornis 
       Sapeornis 
       Scansoriopterygidae 
       Archaeopteryx 
       Anchiornis 
       Microraptor 
    No node labels. 

そして、関数:

"すべて" のデータフレームである

Error in phyl.pca(tree, all, method = "BM", mode = "corr") : 
number of rows in Y cannot be greater than number of taxa in your tree 

Y:3210

>phyl.pca(tree, all, method="BM", mode="corr") 

はこれが来ているエラーです。だから私は6つのtaxaを私の木に持っています(データフレーム内の6つの分類に一致します)が、私のデータフレームには20の行があります。

> all_agg <- aggregate(all[,-1],by=list(all$Taxa),mean,na.rm=TRUE) 

そして、これだ:だから私は、この機能を使用

   Group.1 Tibia Feather 
1   Anchiornis 153  81 
2  Archaeopteryx 136  77 
3  Confuciusornis 120  41 
4   Microraptor 141  119 
5   Sapeornis 110  86 
6 Scansoriopterygidae 120  85 

それは分類群の順序が変更されたことを少し奇妙だ...これはOKですが?

> all_agg_matrix <- as.matrix(all_agg) 
> all_agg_matrix 
       Group.1 Tibia Feather 
[1,]   "Anchiornis" "153" "81" 
[2,]  "Archaeopteryx" "136" "77" 
[3,]  "Confuciusornis" "120" "41" 
[4,]   "Microraptor" "141" "119" 
[5,]   "Sapeornis" "110" "86" 
[6,] "Scansoriopterygidae" "120" "85" 

をそしてphyl.pca機能を使用:

は、いずれにせよ、私は行列にそれを変換し

> phyl.pca(tree, all_agg_matrix, method = "BM", mode = "corr") 
[1] "Y has no names. function will assume that the row order of Y matches tree$tip.label" 
Error in invC %*% X : requires numeric/complex matrix/vector arguments 

ので、関数は中分類群を検討していることを今順序をすべて間違っています(しかし、私はそれを比較的簡単に修正できます)。問題はphyl.pcaが私の行列が実際に行列であるとは思われないということです。なぜどんなアイデア?

+0

私は最初のエラーメッセージはかなり明確だと思います...あなたは何をツリーとして使用していますか、投稿できますか?コードは[ここ](https://github.com/liamrevell/phytools/blob/master/R/phyl.pca.R)で、Yの行数と 'Ntip(ツリー)'を比較するだけです。あなたの質問の第2の部分については、あなたの行列は数字だけを持つべきであり、例えば数字のペアではありません。 '138、101'。 NAsとNULLは別の問題かもしれませんが、行列を1番目に指定する必要があります。 – lrnzcig

+0

こんにちは、私は木の詳細を投稿しました。それは、MicroraptorからConfuciusornisへの簡単な進歩を伴う非常に単純なものです。マトリックスについては、私がペアで行うのではない場合、それぞれの「脛骨」の数字が適切な「羽」の数字に対応するようにするにはどうすればよいですか?他の解決策がありますか? –

+0

私の答えに私の編集を見てください。データフレーム全体で 'as.matrix'を使わないでください。数字列を文字列に変換しています... –

答えて

0

もっと大きな問題があると思います。 phyl.pcaを含むと思われる大部分の系統発生方法は、形質が種レベルで固定されていると仮定する(すなわち種内変異を説明しない)。したがって、phyl.pcaを使用する場合は、種ごとに1つの値にデータを折りたたむ必要があります。

dd_agg <- aggregate(dd[,-1],by=list(dd$Taxa),mean,na.rm=TRUE) 

を経由して数値列を抽出し、phyl.pcaが正しくヒントでそれらを一致させることができるように適切に行にラベルを付ける:

dd_mat <- dd_agg[,-1] 
rownames(dd_mat) <- dd_agg[,1] 

をこれらの集約されたデータを使用して、私はあなたので、(ツリーを作ることができますあなたが考慮中の種バリエーションを取り、分析を行うために必要がある場合

library(phytools) 
tt <- rcoal(nrow(dd_agg),tip.label=dd_agg[,1]) 
phyl.pca(tt,dd_mat) 

あなたが旧姓かもしれない...私たちに1を与える)とphyl.pcaを実行しませんでしたもっと特殊化されたどこかに尋ねる。 [email protected]メーリングリスト...

+0

コメントありがとうございます!あなたの提案と新しい問題に応じて行われた変更の元の投稿を参照してください... –

+0

ありがとう!これは私の問題を解決したようです! –

0

ベン・ボルカーが投稿した答えは、マトリクスを作成してその機能を実行する前に、データ(「all」と呼ばれる)が種ごとに1つの値に集約されるように動作しているようです。それに従って:

> all_agg <- aggregate(all[,-1],by=list(all$Taxa),mean,na.rm=TRUE) 
> all_mat <- all_agg[,-1] 
> rownames(all_mat) <- all_agg[,1] 
> phyl.pca(tree,all_mat, method= "lambda", mode = "corr") 

回答ありがとうございました。特にBen! :)

関連する問題