母集団内で相互作用するさまざまな変数があります。基本的に、私はヤスデのインベントリを作成し、次のような地形の他の値を測定しています。
- 収集した標本の種類と量
- 動物がいるさまざまな環境
- pH
- 有機物の割合
- P、K、Mg、Ca、Mn、Fe、Zn、Cuの量
- Ca + Mg / K関係
基本的に、PCAを使用して、サンプルの変動性を駆動し、フォレスト(環境)を異なるものにする変数を決定します。「変数」にはどの変数を使用し、「個人」にはどの変数を使用すればよいですか?
母集団内で相互作用するさまざまな変数があります。基本的に、私はヤスデのインベントリを作成し、次のような地形の他の値を測定しています。
基本的に、PCAを使用して、サンプルの変動性を駆動し、フォレスト(環境)を異なるものにする変数を決定します。「変数」にはどの変数を使用し、「個人」にはどの変数を使用すればよいですか?
回答:
@amoebaがコメントで述べたように、PCAは1セットのデータのみを調べ、それらの変数の変動の主要な(線形)パターン、それらの変数間の相関または共分散、およびサンプル間の関係(行)データセット内。
種のデータセットと潜在的な説明変数のスイートを使用して通常行うことは、制約付きの順序に適合させることです。PCAでは、主成分、PCAバイプロットの軸は、すべての変数の最適な線形結合として導出されます。変数pH、、TotalCarbon を含む土壌化学のデータセットでこれを実行した場合、最初の成分は
そして2番目のコンポーネント
これらのコンポーネントは、測定された変数から自由に選択できます。選択されるのは、データセット内の最大の変動量を順次説明し、各線形の組み合わせが他のものと直交する(相関しない)ことです。
制約付きの順序では、2つのデータセットがありますが、最初のデータセット(上記の土壌化学データ)の線形結合を自由に選択することはできません。代わりに、最初のデータセットの変動を最もよく説明する2番目のデータセットの変数の線形結合を選択する必要があります。また、PCAの場合、1つのデータセットは応答行列であり、予測子はありません(応答をそれ自体を予測するものと考えることができます)。制約されたケースでは、一連の説明変数で説明したい応答データセットがあります。
どの変数が応答であるかを説明していませんが、通常、環境の説明変数を使用して、それらの種(つまり応答)の存在量または構成の変動を説明します。
PCAの制約バージョンは、生態学の分野で冗長分析(RDA)と呼ばれるものです。これは、種の基本的な線形応答モデルを想定しています。これは、種が応答する短い勾配がある場合に適切でないか、または適切であるだけです。
PCAに代わるものは、対応分析(CA)と呼ばれるものです。これには制約はありませんが、根底にある単峰性応答モデルがあります。これは、種がより長い勾配に沿ってどのように応答するかという点で、より現実的です。CAは相対的な存在量または組成をモデル化し、PCAは生の存在量をモデル化することにも注意してください。
制約付きまたは正規の対応分析(CCA)と呼ばれる制約付きバージョンのCAがあります。正規相関分析と呼ばれるより正式な統計モデルと混同しないでください。
RDAとCCAの両方で、目的は種の存在量または組成の変動を、説明変数の一連の線形結合としてモデル化することです。
説明から、妻はヤスデの種の組成(または存在量)の変動を、測定された他の変数の観点から説明したいと考えているようです。
警告の言葉; RDAとCCAは単なる多変量回帰です。CCAは、重み付けされた多変量回帰です。あなたが回帰について学んだことはすべて適用され、他にもいくつかの落とし穴があります:
だから私のアドバイスは回帰と同じです。事前に仮説を考え、それらの仮説を反映する変数を含めます。すべての説明変数をミックスに投入しないでください。
R のveganパッケージを使用してPCA、CA、CCAを比較する例を示します。これは、私が維持するのに役立ち、これらの種類の調整方法に適合するように設計されています。
library("vegan") # load the package
data(varespec) # load example data
## PCA
pcfit <- rda(varespec)
## could add `scale = TRUE` if variables in different units
pcfit
> pcfit
Call: rda(X = varespec)
Inertia Rank
Total 1826
Unconstrained 1826 23
Inertia is variance
Eigenvalues for unconstrained axes:
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
983.0 464.3 132.3 73.9 48.4 37.0 25.7 19.7
(Showed only 8 of all 23 unconstrained eigenvalues)
ビーガンはCanocoとは異なり、慣性を標準化しないため、分散の合計は1826であり、固有値は同じ単位であり、合計で1826になります。
> cumsum(eigenvals(pcfit))
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
982.9788 1447.2829 1579.5334 1653.4670 1701.8853 1738.8947 1764.6209 1784.3265
PC9 PC10 PC11 PC12 PC13 PC14 PC15 PC16
1796.6007 1807.0361 1816.3869 1819.1853 1821.5128 1822.9045 1824.1103 1824.9250
PC17 PC18 PC19 PC20 PC21 PC22 PC23
1825.2563 1825.4429 1825.5495 1825.6131 1825.6383 1825.6548 1825.6594
また、最初の固有値は分散の約半分であり、最初の2つの軸を使用して、分散全体の約80%を説明しています。
> head(cumsum(eigenvals(pcfit)) / pcfit$tot.chi)
PC1 PC2 PC3 PC4 PC5 PC6
0.5384240 0.7927453 0.8651851 0.9056821 0.9322031 0.9524749
バイプロットは、最初の2つの主成分のサンプルと種のスコアから描画できます。
> plot(pcfit)
ここには2つの問題があります
CAは、単峰性応答モデルにより長い勾配をより適切に処理し、生の存在量ではなく種の相対的構成をモデル化するため、これらの両方の点で役立ちます。
これを行うビーガン/ Rコードは、上記で使用したPCAコードに似ています
cafit <- cca(varespec)
cafit
> cafit <- cca(varespec)
> cafit
Call: cca(X = varespec)
Inertia Rank
Total 2.083
Unconstrained 2.083 23
Inertia is mean squared contingency coefficient
Eigenvalues for unconstrained axes:
CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8
0.5249 0.3568 0.2344 0.1955 0.1776 0.1216 0.1155 0.0889
(Showed only 8 of all 23 unconstrained eigenvalues)
ここでは、相対的な構成のサイト間のばらつきの約40%について説明します
> head(cumsum(eigenvals(cafit)) / cafit$tot.chi)
CA1 CA2 CA3 CA4 CA5 CA6
0.2519837 0.4232578 0.5357951 0.6296236 0.7148866 0.7732393
種と場所のスコアの共同プロットは、少数の種に支配されなくなった
> plot(cafit)
PCAとCAのどちらを選択するかは、データについて尋ねたい質問によって決まります。通常、種のデータでは、一連の種の違いに関心があることが多いため、CAを選択するのが一般的です。私たちは、環境変数のデータセットを持っている場合は、CAが不適切であるとPCAますので、水や土壌の化学的性質は、我々は(相関行列の使用、勾配に沿って単峰形で応答するものと期待していないと言うscale = TRUE
にrda()
なりコール)より適切な。
ここで、最初の種のデータセットのパターンを説明するために使用したい2番目のデータセットがある場合は、制約付きの順序を使用する必要があります。多くの場合、ここでの選択はCCAですが、RDAは代替となり、データの変換後のRDAは種データをより適切に処理できるようになります。
data(varechem) # load explanatory example data
cca()
関数を再利用しますが、2つのデータフレーム(X
種、およびY
説明変数/予測子変数)、または適合させたいモデルの形式をリストするモデル式を提供します。
すべての変数を含めるには、すべての変数を含めるためvarechem ~ ., data = varechem
の式として使用できるすべての変数を含めることができます。
ccafit <- cca(varespec ~ ., data = varechem)
> ccafit
Call: cca(formula = varespec ~ N + P + K + Ca + Mg + S + Al + Fe + Mn +
Zn + Mo + Baresoil + Humdepth + pH, data = varechem)
Inertia Proportion Rank
Total 2.0832 1.0000
Constrained 1.4415 0.6920 14
Unconstrained 0.6417 0.3080 9
Inertia is mean squared contingency coefficient
Eigenvalues for constrained axes:
CCA1 CCA2 CCA3 CCA4 CCA5 CCA6 CCA7 CCA8 CCA9 CCA10 CCA11
0.4389 0.2918 0.1628 0.1421 0.1180 0.0890 0.0703 0.0584 0.0311 0.0133 0.0084
CCA12 CCA13 CCA14
0.0065 0.0062 0.0047
Eigenvalues for unconstrained axes:
CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 CA9
0.19776 0.14193 0.10117 0.07079 0.05330 0.03330 0.01887 0.01510 0.00949
上記の序列のトリプロットは、plot()
メソッドを使用して生成されます
> plot(ccafit)
もちろん、今のタスクは、これらの変数のうちどれが実際に重要であるかを解明することです。また、13の変数だけを使用して、種の分散の約2/3を説明したことにも注意してください。この順序ですべての変数を使用する場合の問題の1つは、サンプルと種のスコアにアーチ型の構成を作成したことです。
これについて詳しく知りたい場合は、ビーガンのドキュメントまたは多変量生態データ分析に関する優れた本をチェックしてください。
RDAとのリンクを説明するのが最も簡単ですが、CCAはまったく同じですが、すべての行と列の双方向テーブルの限界合計が重みとして使用されます。
基本的に、RDAは、説明変数の行列によって与えられる予測子を使用して、各種(応答)の値(存在量など)に当てはめられた多重線形回帰からの当てはめられた値の行列にPCAを適用することと同等です。
Rではこれを次のように行うことができます
## centre the responses
spp <- scale(data.matrix(varespec), center = TRUE, scale = FALSE)
## ...and the predictors
env <- as.data.frame(scale(varechem, center = TRUE, scale = FALSE))
## fit a linear model to each column (species) in spp.
## Suppress intercept as we've centred everything
fit <- lm(spp ~ . - 1, data = env)
## Collect fitted values for each species and do a PCA of that
## matrix
pclmfit <- prcomp(fitted(fit))
これら2つのアプローチの固有値は同じです。
> (eig1 <- unclass(unname(eigenvals(pclmfit)[1:14])))
[1] 820.1042107 399.2847431 102.5616781 47.6316940 26.8382218 24.0480875
[7] 19.0643756 10.1669954 4.4287860 2.2720357 1.5353257 0.9255277
[13] 0.7155102 0.3118612
> (eig2 <- unclass(unname(eigenvals(rdafit, constrained = TRUE))))
[1] 820.1042107 399.2847431 102.5616781 47.6316940 26.8382218 24.0480875
[7] 19.0643756 10.1669954 4.4287860 2.2720357 1.5353257 0.9255277
[13] 0.7155102 0.3118612
> all.equal(eig1, eig2)
[1] TRUE
何らかの理由で軸のスコア(読み込み)を一致させることができませんが、これらは常にスケーリングされている(またはされていない)ため、ここでそれらがどのように行われているかを正確に調べる必要があります。
先ほどrda()
示したようにRDA viaは行いませんが、lm()
線形モデル部分にはQR分解を使用し、PCA部分にはSVDを使用します。ただし、基本的な手順は同じです。
fitted()