したがって、私は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が私の行列が実際に行列であるとは思われないということです。なぜどんなアイデア?
私は最初のエラーメッセージはかなり明確だと思います...あなたは何をツリーとして使用していますか、投稿できますか?コードは[ここ](https://github.com/liamrevell/phytools/blob/master/R/phyl.pca.R)で、Yの行数と 'Ntip(ツリー)'を比較するだけです。あなたの質問の第2の部分については、あなたの行列は数字だけを持つべきであり、例えば数字のペアではありません。 '138、101'。 NAsとNULLは別の問題かもしれませんが、行列を1番目に指定する必要があります。 – lrnzcig
こんにちは、私は木の詳細を投稿しました。それは、MicroraptorからConfuciusornisへの簡単な進歩を伴う非常に単純なものです。マトリックスについては、私がペアで行うのではない場合、それぞれの「脛骨」の数字が適切な「羽」の数字に対応するようにするにはどうすればよいですか?他の解決策がありますか? –
私の答えに私の編集を見てください。データフレーム全体で 'as.matrix'を使わないでください。数字列を文字列に変換しています... –