의견에서 @amoeba가 언급했듯이 PCA는 하나의 데이터 세트 만보 고 해당 변수의 주요 변동 (선형) 패턴, 해당 변수 간의 상관 또는 공분산 및 샘플 간의 관계 (행)를 보여줍니다 )를 데이터 세트에 추가하십시오.
하나의 종 데이터 세트와 잠재적 인 설명 변수로 일반적으로하는 일은 구속 된 안수에 적합하는 것입니다. PCA에서 주성분 인 PCA biplot의 축은 모든 변수의 최적 선형 조합으로 도출됩니다. 변수 pH가있는 토양 화학 데이터 세트에서 이것을 실행 한 경우,씨ㅏ2 +, TotalCarbon, 첫 번째 구성 요소가
0.5 × p H + 1.4 × Cㅏ2 ++ 0.1 × T o t a l C a r b o n
두 번째 구성 요소
2.7 × p H + 0.3 × Cㅏ2 +− 5.6 × T o t a l C a r b o n
이러한 구성 요소는 측정 된 변수에서 자유롭게 선택할 수 있으며 데이터 집합에서 가장 많은 양의 변동을 순차적으로 설명하고 각 선형 조합이 서로 직교 (비 상관) 인 변수를 선택할 수 있습니다.
제한된 안수에는 두 개의 데이터 세트가 있지만 원하는 첫 번째 데이터 세트 (위의 토양 화학 데이터)의 선형 조합을 자유롭게 선택할 수는 없습니다. 대신 첫 번째 변형을 가장 잘 설명하는 두 번째 데이터 세트에서 변수의 선형 조합을 선택해야합니다. 또한 PCA의 경우 하나의 데이터 세트가 응답 매트릭스이고 예측자가 없습니다 (응답을 예측 자체로 생각할 수 있음). 제한된 경우, 설명 변수 세트로 설명하려는 응답 데이터 세트가 있습니다.
어떤 변수가 반응인지는 설명하지 않았지만 일반적으로 환경 설명 변수를 사용하여 해당 종의 풍부도 또는 구성 (예 : 반응)의 변화를 설명하려고합니다.
제한된 버전의 PCA는 생태계에서 RDA (Redundancy Analysis)라고합니다. 이것은 종에 대한 기본 선형 반응 모델을 가정하며, 종이 반응하는 짧은 구배가있는 경우 적합하지 않거나 적합하지 않습니다.
PCA의 대안은 대응 분석 (CA)이라고하는 것입니다. 이것은 구속되지 않지만 기본 단봉 형 반응 모델을 가지고 있는데, 이는 종이 더 긴 구배를 따라 어떻게 반응하는지에 관해서는 다소 현실적인 것입니다. 또한 CA는 상대 풍부도 또는 구성을 모델링하고 PCA는 원시 풍부도를 모델링합니다.
제한적 또는 표준 대응 분석 (CCA) 으로 알려진 제한된 버전의 CA가 있으며, 표준 상관 분석으로 알려진보다 공식적인 통계 모델과 혼동하지 않아야합니다.
RDA와 CCA에서 목표는 설명 변수의 일련의 선형 조합으로 종 존재비 또는 조성의 변화를 모델링하는 것입니다.
설명에서 아내가 측정 한 다른 변수와 관련하여 노래기 종 구성의 변화 (또는 풍부도)를 설명하려는 것처럼 들립니다.
경고의 일부 단어; RDA와 CCA는 다변량 회귀입니다. CCA는 가중 다변량 회귀입니다. 회귀에 대해 배운 것은 모두 적용되며 다른 몇 가지 문제도 있습니다.
- 설명 변수의 수를 늘리면 제약 조건이 실제로 점점 줄어들고 종 구성을 최적으로 설명하는 구성 요소 / 축을 추출하지 않습니다.
- CCA를 사용하면 설명 요소의 수를 늘리면 CCA 플롯의 점 구성에 곡선의 인공물이 유도 될 위험이 있습니다.
- RDA와 CCA에 기반을 둔 이론은 공식적인 통계적 방법보다 잘 발달되지 않았다. 단계적 선택 (회귀의 선택 방법으로 선호하지 않는 모든 이유로 이상적이지 않음)을 사용하여 설명 할 변수를 합리적으로 선택할 수 있으며 순열 테스트를 사용해야합니다.
내 조언은 회귀와 같습니다. 가설이 무엇인지 미리 생각하고 이러한 가설을 반영하는 변수를 포함하십시오. 모든 설명 변수를 믹스에 넣지 마십시오 .
예
구속 안수
PCA
유지 관리에 도움이되고 이러한 종류의 안수 방법에 맞게 설계된 채식 패키지를 사용하여 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
또한 첫 번째 고유 값은 분산의 약 절반이며 처음 두 축을 사용하여 총 분산의 ~ 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
Biplot은 처음 두 가지 주요 구성 요소의 샘플 및 종의 점수에서 추출 할 수 있습니다.
> plot(pcfit)
여기에 두 가지 문제가 있습니다
- 안수는 본질적으로 데이터 세트에서 가장 풍부한 분류군이므로 세 종 (원래에서 가장 먼 종)으로 구성됩니다.
- 안수에는 강한 곡선의 아치가 있으며, 안수의 메트릭 특성을 유지하기 위해 두 가지 주요 구성 요소로 분류 된 길거나 지배적 인 단일 구배를 암시합니다.
CA
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()
)가 더 적절합니다.
제한된 안수; CCA
이제 첫 번째 종 데이터 세트의 패턴을 설명하는 데 사용할 두 번째 데이터 세트가있는 경우 제한된 안수를 사용해야합니다. 여기에서 종종 CCA를 선택하지만 RDA는 종 데이터를보다 잘 처리 할 수 있도록 데이터를 변환 한 후 RDA와 마찬가지로 대안입니다.
data(varechem) # load explanatory example data
cca()
함수를 재사용 하지만 두 가지 데이터 프레임 ( 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를 설명했습니다. 이 안수에서 모든 변수를 사용하는 데 따른 문제 중 하나는 표본 및 종 점수에서 아치형 구성을 만들었 기 때문에 순전히 너무 많은 상관 변수를 사용하는 인공물입니다.
이것에 대해 더 알고 싶다면 완전 채식 문서 나 다변량 생태 학적 데이터 분석에 관한 좋은 책을 확인하십시오 .
회귀와의 관계
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))
이 두 가지 접근 방식의 고유 값은 동일합니다.
> (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를 lm()
하지는 않지만 선형 모델 부품에는 QR 분해를 사용하고 PCA 부품에는 SVD를 사용합니다. 그러나 필수 단계는 동일합니다.