Như @amoeba đã đề cập trong các bình luận, PCA sẽ chỉ xem xét một bộ dữ liệu và nó sẽ hiển thị cho bạn các mẫu biến đổi (tuyến tính) chính trong các biến đó, mối tương quan hoặc hiệp phương sai giữa các biến đó và mối quan hệ giữa các mẫu (các hàng ) trong tập dữ liệu của bạn.
Những gì người ta thường làm với một tập dữ liệu loài và một bộ các biến giải thích tiềm năng là để phù hợp với một quy tắc bị ràng buộc. Trong PCA, các thành phần chính, các trục trên biplot PCA, được lấy làm tổ hợp tuyến tính tối ưu của tất cả các biến. Nếu bạn chạy dữ liệu này trên tập dữ liệu hóa học đất với các biến pH, , TotalCarbon, bạn có thể thấy rằng thành phần đầu tiên làC a2 +
0,5 × p H + 1,4 × C a2 ++ 0,1 × T o t a l C a r b o n
và thành phần thứ hai
2,7 × p H + 0,3 × C a2 +- 5,6 × T o t a l C a r b o n
Các thành phần này có thể tự do lựa chọn từ các biến được đo và được chọn là các biến giải thích tuần tự số lượng biến thể lớn nhất trong tập dữ liệu và mỗi kết hợp tuyến tính là trực giao (không tương thích với) các biến khác.
Trong một quy tắc bị ràng buộc, chúng tôi có hai bộ dữ liệu, nhưng chúng tôi không được tự do chọn bất kỳ kết hợp tuyến tính nào của tập dữ liệu đầu tiên (dữ liệu hóa học đất ở trên) mà chúng tôi muốn. Thay vào đó, chúng ta phải chọn kết hợp tuyến tính của các biến trong tập dữ liệu thứ hai giải thích rõ nhất sự thay đổi trong biến thứ nhất. Ngoài ra, trong trường hợp PCA, một bộ dữ liệu là ma trận phản hồi và không có dự đoán (bạn có thể nghĩ về phản hồi như dự đoán chính nó). Trong trường hợp bị ràng buộc, chúng tôi có một bộ dữ liệu phản hồi mà chúng tôi muốn giải thích với một bộ các biến giải thích.
Mặc dù bạn chưa giải thích biến nào là phản ứng, nhưng thông thường người ta muốn giải thích sự thay đổi về sự phong phú hoặc thành phần của các loài đó (tức là phản ứng) bằng cách sử dụng các biến giải thích về môi trường.
Phiên bản bị ràng buộc của PCA là một thứ gọi là Phân tích dư thừa (RDA) trong các vòng tròn sinh thái. Điều này giả định một mô hình phản ứng tuyến tính cơ bản cho loài, không phù hợp hoặc chỉ phù hợp nếu bạn có độ dốc ngắn dọc theo đó loài đáp ứng.
Một thay thế cho PCA là một thứ gọi là phân tích tương ứng (CA). Điều này là không bị ràng buộc nhưng nó có một mô hình phản ứng không theo phương thức cơ bản, điều này có phần thực tế hơn về cách các loài phản ứng dọc theo độ dốc dài hơn. Cũng lưu ý rằng CA mô hình sự phong phú tương đối hoặc thành phần , PCA mô hình sự phong phú thô.
Có một phiên bản ràng buộc của CA, được gọi là phân tích tương ứng ràng buộc hoặc chính tắc (CCA) - không bị nhầm lẫn với một mô hình thống kê chính thức hơn được gọi là phân tích tương quan chính tắc.
Trong cả RDA và CCA, mục đích là mô hình hóa sự thay đổi về sự phong phú của loài hoặc thành phần như một chuỗi các kết hợp tuyến tính của các biến giải thích.
Từ mô tả, có vẻ như vợ bạn muốn giải thích sự thay đổi trong thành phần loài động vật nhiều chân (hoặc phong phú) về các biến số khác được đo.
Một số lời cảnh báo; RDA và CCA chỉ là hồi quy đa biến; CCA chỉ là một hồi quy đa biến có trọng số. Bất cứ điều gì bạn đã học về hồi quy đều được áp dụng và cũng có một vài vấn đề khác:
- khi bạn tăng số lượng biến giải thích, các ràng buộc thực sự ngày càng ít đi và bạn không thực sự trích xuất các thành phần / trục giải thích tối ưu thành phần loài và
- với CCA, khi bạn tăng số lượng các yếu tố giải thích, bạn có nguy cơ tạo ra một vật thể của đường cong vào cấu hình các điểm trong biểu đồ CCA.
- lý thuyết cơ bản về RDA và CCA kém phát triển hơn các phương pháp thống kê chính thức hơn. Chúng ta chỉ có thể chọn hợp lý các biến giải thích để tiếp tục sử dụng lựa chọn theo từng bước (không lý tưởng cho tất cả các lý do chúng ta không thích nó như một phương pháp lựa chọn trong hồi quy) và chúng ta phải sử dụng các phép thử hoán vị để làm như vậy.
vì vậy lời khuyên của tôi cũng giống như với hồi quy; suy nghĩ trước những giả thuyết của bạn và bao gồm các biến phản ánh những giả thuyết đó. Đừng chỉ ném tất cả các biến giải thích vào hỗn hợp.
Thí dụ
Xuất gia không giới hạn
PCA
Tôi sẽ đưa ra một ví dụ so sánh PCA, CA và CCA bằng cách sử dụng gói thuần chay cho R mà tôi giúp duy trì và được thiết kế để phù hợp với các loại phương pháp phong chức này:
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)
vegan không tiêu chuẩn hóa quán tính, không giống như Canoco, vì vậy tổng phương sai là 1826 và Eigenvalues nằm trong cùng các đơn vị đó và tính đến năm 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
Chúng ta cũng thấy rằng Eigenvalue đầu tiên bằng khoảng một nửa phương sai và với hai trục đầu tiên, chúng ta đã giải thích ~ 80% tổng phương sai
> 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
Một biplot có thể được rút ra từ điểm số của các mẫu và loài trên hai thành phần chính đầu tiên
> plot(pcfit)
Có hai vấn đề ở đây
- Sự phong chức chủ yếu được chi phối bởi ba loài - những loài này nằm cách xa nguồn gốc nhất - vì đây là những loài có số lượng lớn nhất trong bộ dữ liệu
- Có một đường cong mạnh mẽ trong sắc phong, gợi ý một độ dốc đơn dài hoặc chiếm ưu thế đã được chia thành hai thành phần chính chính để duy trì các thuộc tính số liệu của sắc phong.
CA
Một CA có thể hỗ trợ cả hai điểm này vì nó xử lý độ dốc dài tốt hơn do mô hình phản ứng không theo phương thức và mô hình thành phần tương đối của các loài không phải là sự phong phú.
Mã vegan / R để làm điều này tương tự như mã PCA được sử dụng ở trên
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)
Ở đây chúng tôi giải thích khoảng 40% biến thể giữa các trang trong thành phần tương đối của chúng
> 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
Âm mưu chung của các loài và điểm địa điểm hiện ít bị chi phối bởi một vài loài
> plot(cafit)
Những PCA hoặc CA nào bạn chọn phải được xác định bởi các câu hỏi bạn muốn hỏi về dữ liệu. Thông thường với dữ liệu loài, chúng ta thường quan tâm đến sự khác biệt trong bộ loài, vì vậy CA là một lựa chọn phổ biến. Nếu chúng ta có một bộ dữ liệu về các biến môi trường, giả sử hóa học nước hoặc đất, chúng ta sẽ không mong đợi chúng phản ứng theo cách không chính thống dọc theo độ dốc để CA không phù hợp và PCA (của ma trận tương quan, sử dụng scale = TRUE
trong rda()
cuộc gọi) sẽ là thích hợp hơn
Giới hạn xuất gia; CCA
Bây giờ nếu chúng ta có bộ dữ liệu thứ hai mà chúng ta muốn sử dụng để giải thích các mẫu trong bộ dữ liệu loài đầu tiên, chúng ta phải sử dụng một quy tắc bị ràng buộc. Thường thì sự lựa chọn ở đây là CCA, nhưng RDA là một lựa chọn thay thế, cũng như RDA sau khi chuyển đổi dữ liệu để cho phép nó xử lý dữ liệu loài tốt hơn.
data(varechem) # load explanatory example data
Chúng tôi sử dụng lại cca()
hàm nhưng chúng tôi cung cấp hai khung dữ liệu ( X
cho các loài và Y
cho các biến giải thích / dự đoán) hoặc một công thức mô hình liệt kê dạng của mô hình mà chúng tôi muốn phù hợp.
Để bao gồm tất cả các biến chúng ta có thể sử dụng varechem ~ ., data = varechem
làm công thức để bao gồm tất cả các biến - nhưng như tôi đã nói ở trên, đây không phải là một ý tưởng hay nói chung
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
Bộ ba của sắc phong trên được tạo ra bằng plot()
phương pháp
> plot(ccafit)
Tất nhiên, bây giờ nhiệm vụ là tìm ra biến nào trong số các biến đó thực sự quan trọng. Cũng lưu ý rằng chúng tôi đã giải thích khoảng 2/3 phương sai loài chỉ bằng 13 biến. một trong những vấn đề của việc sử dụng tất cả các biến trong sắc lệnh này là chúng tôi đã tạo ra một cấu hình cong trong điểm số mẫu và loài, đây hoàn toàn là một yếu tố chính của việc sử dụng quá nhiều biến tương quan.
Nếu bạn muốn biết thêm về điều này, hãy xem tài liệu thuần chay hoặc một cuốn sách hay về phân tích dữ liệu sinh thái đa biến.
Mối quan hệ với hồi quy
Đơn giản nhất là minh họa liên kết với RDA, nhưng CCA chỉ giống nhau ngoại trừ mọi thứ liên quan đến các tổng biên của hàng và cột hai chiều theo trọng số.
Về cơ bản, RDA tương đương với việc áp dụng PCA vào ma trận các giá trị được trang bị từ hồi quy tuyến tính đa biến phù hợp với từng giá trị (phản hồi) của từng loài với các yếu tố dự đoán được đưa ra bởi ma trận các biến giải thích.
Trong R chúng ta có thể làm điều này như
## 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))
Eigenvalues cho hai cách tiếp cận này bằng nhau:
> (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
Vì một số lý do, tôi không thể lấy điểm số của trục (khớp), nhưng chúng luôn được chia tỷ lệ (hoặc không) vì vậy tôi cần xem xét chính xác cách thức chúng được thực hiện ở đây.
Chúng tôi không thực hiện RDA thông qua rda()
như tôi đã trình bày lm()
, v.v., nhưng chúng tôi sử dụng phân tách QR cho phần mô hình tuyến tính và sau đó là SVD cho phần PCA. Nhưng các bước thiết yếu là như nhau.