Tương quan trong R: Ma trận tương quan Pearson & Spearman
Tương quan hai biến trong R
Mối quan hệ hai biến mô tả mối quan hệ -hoặc mối tương quan- giữa hai biến trong R. Trong hướng dẫn này, chúng ta sẽ thảo luận về khái niệm tương quan và chỉ ra cách sử dụng nó để đo lường mối quan hệ giữa hai biến bất kỳ trong R.
Tương quan trong lập trình R
Có hai phương pháp chính để tính mối tương quan giữa hai biến trong Lập trình R:
- Pearson: Tương quan tham số
- Spearman: Tương quan phi tham số
Ma trận tương quan Pearson trong R
Phương pháp tương quan Pearson thường được sử dụng làm phương pháp kiểm tra chính cho mối quan hệ giữa hai biến.
Sản phẩm Hệ số tương quan, , là thước đo sức mạnh của tuyến tính mối quan hệ giữa hai biến và . Nó được tính như sau:
với
, tức là độ lệch chuẩn của
, tức là độ lệch chuẩn của
Mối tương quan nằm trong khoảng từ -1 đến 1.
- Giá trị gần hoặc bằng 0 hàm ý có ít hoặc không có mối quan hệ tuyến tính giữa và .
- Ngược lại, càng tiến gần đến 1 hoặc -1 thì mối quan hệ tuyến tính càng chặt chẽ.
Chúng ta có thể tính t-test như sau và kiểm tra bảng phân phối với bậc tự do bằng:
Tương quan xếp hạng Spearman trong R
Mối tương quan thứ hạng sắp xếp các quan sát theo thứ hạng và tính toán mức độ tương tự giữa thứ hạng. Mối tương quan xếp hạng có ưu điểm là mạnh mẽ đối với các giá trị ngoại lệ và không liên quan đến việc phân phối dữ liệu. Lưu ý rằng, mối tương quan xếp hạng phù hợp với biến thứ tự.
Tương quan xếp hạng của Spearman, , luôn nằm trong khoảng từ -1 đến 1 với giá trị gần cực trị cho thấy mối quan hệ chặt chẽ. Nó được tính như sau:
với đã nêu hiệp phương sai giữa thứ hạng và . Mẫu số tính toán độ lệch chuẩn.
Trong R, chúng ta có thể sử dụng hàm cor(). Phải mất ba đối số và phương thức.
cor(x, y, method)
Lập luận:
- x: Vectơ đầu tiên
- y: Vectơ thứ hai
- phương pháp: Công thức dùng để tính hệ số tương quan. Ba giá trị chuỗi:
- "lề"
- “Kendall”
- “người cầm giáo”
Một đối số tùy chọn có thể được thêm vào nếu vectơ chứa giá trị bị thiếu: use = “complete.obs”
Chúng tôi sẽ sử dụng bộ dữ liệu BudgetUK. Bộ dữ liệu này báo cáo việc phân bổ ngân sách của các hộ gia đình ở Anh từ năm 1980 đến năm 1982. Có 1519 quan sát với XNUMX đặc điểm, trong đó:
- wfood: chia sẻ thực phẩm chia sẻ chi tiêu
- nhiên liệu: chia sẻ chi phí nhiên liệu
- khăn lau mặt: phần ngân sách dành cho chi tiêu quần áo
- walc: chia sẻ chi tiêu rượu
- wtrans: chia sẻ chi tiêu vận tải
- bà: tỷ trọng chi tiêu cho hàng hóa khác
- totex: tổng chi tiêu hộ gia đình tính bằng bảng Anh
- thu nhập: tổng thu nhập ròng của hộ gia đình
- tuổi: tuổi của hộ gia đình
- trẻ em: Số lượng trẻ em
Ví dụ
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv" data <-read.csv(PATH) filter(income < 500) mutate(log_income = log(income), log_totexp = log(totexp), children_fac = factor(children, order = TRUE, labels = c("No", "Yes"))) select(-c(X,X.1, children, totexp, income)) glimpse(data)
Giải thích mã
- Trước tiên, chúng tôi nhập dữ liệu và xem qua hàm look() từ thư viện dplyr.
- Ba điểm trên 500K nên chúng tôi quyết định loại trừ chúng.
- Thực tế phổ biến là chuyển đổi một biến tiền tệ trong nhật ký. Nó giúp giảm tác động của các ngoại lệ và giảm độ lệch trong tập dữ liệu.
Đầu ra:
## Observations: 1,516## Variables: 10 ## $ wfood <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0... ## $ wfuel <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0... ## $ wcloth <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0... ## $ walc <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0... ## $ wtrans <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0... ## $ wother <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0... ## $ age <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2... ## $ log_income <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,... ## $ log_totexp <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,... ## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...
Chúng ta có thể tính hệ số tương quan giữa các biến thu nhập và wfood bằng phương pháp “pearson” và “spearman”.
cor(data$log_income, data$wfood, method = "pearson")
Đầu ra:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
Đầu ra:
## [1] -0.2501252
Ma trận tương quan trong R
Mối tương quan hai biến là một khởi đầu tốt, nhưng chúng ta có thể có được bức tranh rộng hơn bằng phân tích đa biến. Một mối tương quan với nhiều biến số được hình dung bên trong một Ma trận tương quan. Ma trận tương quan là ma trận biểu thị mối tương quan cặp của tất cả các biến.
Hàm cor() trả về ma trận tương quan. Sự khác biệt duy nhất với mối tương quan hai biến là chúng ta không cần chỉ định biến nào. Theo mặc định, R tính toán mối tương quan giữa tất cả các biến.
Lưu ý rằng, không thể tính được mối tương quan cho biến yếu tố. Chúng ta cần đảm bảo rằng chúng ta loại bỏ tính năng phân loại trước khi chuyển khung dữ liệu vào trong cor().
Ma trận tương quan có tính đối xứng, nghĩa là các giá trị phía trên đường chéo có cùng giá trị với giá trị bên dưới. Sẽ trực quan hơn khi hiển thị một nửa ma trận.
Chúng tôi loại trừ Children_fac vì đây là biến cấp độ yếu tố. cor không thực hiện tương quan trên một biến phân loại.
# the last column of data is a factor level. We don't include it in the code mat_1 <-as.dist(round(cor(data[,1:9]),2)) mat_1
Giải thích mã
- cor(dữ liệu): Hiển thị ma trận tương quan
- vòng(dữ liệu, 2): Làm tròn ma trận tương quan với hai số thập phân
- as.dist(): Chỉ chiếu nửa sau
Đầu ra:
## wfood wfuel wcloth walc wtrans wother age log_income ## wfuel 0.11 ## wcloth -0.33 -0.25 ## walc -0.12 -0.13 -0.09 ## wtrans -0.34 -0.16 -0.19 -0.22 ## wother -0.35 -0.14 -0.22 -0.12 -0.29 ## age 0.02 -0.05 0.04 -0.14 0.03 0.02 ## log_income -0.25 -0.12 0.10 0.04 0.06 0.13 0.23 ## log_totexp -0.50 -0.36 0.34 0.12 0.15 0.15 0.21 0.49
Mức độ đáng kể
Mức ý nghĩa hữu ích trong một số trường hợp khi chúng ta sử dụng phương pháp Pearson hoặc Spearman. Hàm rcorr() từ thư viện Hmisc tính toán cho chúng ta giá trị p. Chúng ta có thể tải xuống thư viện từ chung cư và sao chép mã để dán vào terminal:
conda install -c r r-hmisc
rcorr() yêu cầu khung dữ liệu được lưu trữ dưới dạng ma trận. Chúng ta có thể chuyển đổi dữ liệu của mình thành ma trận trước để tính ma trận tương quan với giá trị p.
library("Hmisc") data_rcorr <-as.matrix(data[, 1: 9]) mat_2 <-rcorr(data_rcorr) # mat_2 <-rcorr(as.matrix(data)) returns the same output
Đối tượng danh sách mat_2 chứa ba phần tử:
- r: Đầu ra của ma trận tương quan
- n: Số lượng quan sát
- P: giá trị p
Chúng tôi quan tâm đến yếu tố thứ ba, giá trị p. Người ta thường hiển thị ma trận tương quan với giá trị p thay vì hệ số tương quan.
p_value <-round(mat_2[["P"]], 3) p_value
Giải thích mã
- mat_2[[“P”]]: Giá trị p được lưu trữ trong phần tử có tên P
- round(mat_2[[“P”]], 3): Làm tròn các phần tử có ba chữ số
Đầu ra:
wfood wfuel wcloth walc wtrans wother age log_income log_totexp wfood NA 0.000 0.000 0.000 0.000 0.000 0.365 0.000 0 wfuel 0.000 NA 0.000 0.000 0.000 0.000 0.076 0.000 0 wcloth 0.000 0.000 NA 0.001 0.000 0.000 0.160 0.000 0 walc 0.000 0.000 0.001 NA 0.000 0.000 0.000 0.105 0 wtrans 0.000 0.000 0.000 0.000 NA 0.000 0.259 0.020 0 wother 0.000 0.000 0.000 0.000 0.000 NA 0.355 0.000 0 age 0.365 0.076 0.160 0.000 0.259 0.355 NA 0.000 0 log_income 0.000 0.000 0.000 0.105 0.020 0.000 0.000 NA 0 log_totexp 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 NA
Trực quan hóa ma trận tương quan trong R
Bản đồ nhiệt là một cách khác để hiển thị ma trận tương quan. Thư viện GGally là phần mở rộng của ggplot2. Hiện tại, nó không có sẵn trong thư viện conda. Chúng ta có thể cài đặt trực tiếp trong bảng điều khiển.
install.packages("GGally")
Thư viện bao gồm các chức năng khác nhau để hiển thị số liệu thống kê tóm tắt như mối tương quan và phân phối của tất cả các biến trong một ma trận.
Hàm ggcorr() có rất nhiều đối số. Chúng tôi sẽ chỉ giới thiệu các đối số mà chúng tôi sẽ sử dụng trong hướng dẫn:
Hàm ggcorr
ggcorr(df, method = c("pairwise", "pearson"), nbreaks = NULL, digits = 2, low = "#3B9AB2", mid = "#EEEEEE", high = "#F21A00", geom = "tile", label = FALSE, label_alpha = FALSE)
đối số:
- df: Tập dữ liệu được sử dụng
- phương pháp: Công thức để tính toán tương quan. Theo mặc định, pairwise và Pearson được tính toán
- nbreak: Trả về phạm vi phân loại cho màu sắc của các hệ số. Theo mặc định, không bị ngắt và độ dốc màu liên tục
- chữ số: Làm tròn hệ số tương quan. Theo mặc định, đặt thành 2
- thấp: Kiểm soát mức độ màu thấp hơn
- giữa: Kiểm soát mức độ trung bình của màu sắc
- cao: Kiểm soát mức độ cao của màu sắc
- địa chất: Điều khiển hình dạng của đối số hình học. Theo mặc định, “gạch”
- nhãn: Giá trị Boolean. Hiển thị hoặc không hiển thị nhãn. Theo mặc định, được đặt thành `FALSE`
Bản đồ nhiệt cơ bản
Cốt truyện cơ bản nhất của gói là bản đồ nhiệt. Chú giải của biểu đồ hiển thị màu gradient từ – 1 đến 1, với màu nóng biểu thị mối tương quan dương mạnh mẽ và màu lạnh biểu thị mối tương quan âm.
library(GGally) ggcorr(data)
Giải thích mã
- ggcorr(dữ liệu): Chỉ cần một đối số là tên khung dữ liệu. Các biến cấp độ yếu tố không được đưa vào biểu đồ.
Đầu ra:
Thêm quyền kiểm soát vào bản đồ nhiệt
Chúng ta có thể thêm nhiều điều khiển hơn vào biểu đồ:
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
Giải thích mã
- nbreak=6: phá vỡ huyền thoại với 6 bậc.
- thấp = “xanh thép”: Sử dụng màu sáng hơn cho tương quan âm
- giữa = “trắng”: Sử dụng màu trắng cho tương quan dải trung
- cao = “đỏ sẫm”: Sử dụng màu tối để có mối tương quan tích cực
- geom = “vòng tròn”: Sử dụng hình tròn làm hình dạng của các cửa sổ trong bản đồ nhiệt. Kích thước của hình tròn tỷ lệ thuận với giá trị tuyệt đối của tương quan.
Đầu ra:
Thêm nhãn vào bản đồ nhiệt
GGally cho phép chúng ta thêm nhãn bên trong cửa sổ:
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
Giải thích mã
- nhãn = ĐÚNG: Cộng các giá trị của hệ số tương quan bên trong bản đồ nhiệt.
- màu = “xám50”: Chọn màu, tức là màu xám
- nhãn_size = 3: Đặt kích thước của nhãn bằng 3
Đầu ra:
Hàm ggpairs
Cuối cùng, chúng tôi giới thiệu một hàm khác từ thư viện GGaly. Ggpair. Hàm này tạo ra một đồ thị theo định dạng ma trận. Chúng ta có thể hiển thị ba loại tính toán trong một đồ thị. Ma trận là một chiều, với bằng số quan sát. Phần trên/dưới hiển thị các cửa sổ và theo đường chéo. Chúng ta có thể kiểm soát thông tin nào chúng ta muốn hiển thị trong từng phần của ma trận. Công thức cho ggpair là:
ggpair(df, columns = 1: ncol(df), title = NULL, upper = list(continuous = "cor"), lower = list(continuous = "smooth"), mapping = NULL)
đối số:
- df: Tập dữ liệu được sử dụng
- cột: Chọn các cột để vẽ đồ thị
- tiêu đề: Bao gồm tiêu đề
- phía trên: Kiểm soát các hộp phía trên đường chéo của biểu đồ. Cần cung cấp loại phép tính hoặc đồ thị để trả về. Nếu liên tục = “cor”, chúng tôi yêu cầu R tính toán tương quan. Lưu ý rằng, đối số cần phải là một danh sách. Có thể sử dụng các đối số khác, hãy xem [vignette](“http://ggobi.github.io/ggally/#custom_functions”) để biết thêm thông tin.
- Hạ: Kiểm soát các hộp bên dưới đường chéo.
- Lập bản đồ: Biểu thị tính thẩm mỹ của đồ thị. Chẳng hạn, chúng ta có thể tính toán biểu đồ cho các nhóm khác nhau.
Phân tích hai biến với ggpair với nhóm
Biểu đồ tiếp theo vẽ ba thông tin:
- Ma trận tương quan giữa biến log_totexp, log_ thu nhập, độ tuổi và wtrans được nhóm theo hộ gia đình có con hay không.
- Vẽ biểu đồ phân phối từng biến theo nhóm
- Hiển thị biểu đồ phân tán với xu hướng theo nhóm
library(ggplot2) ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3)), lower = list(continuous = wrap("smooth", alpha = 0.3, size = 0.1)), mapping = aes(color = children_fac))
Giải thích mã
- cột = c(“log_totexp”, “log_ thu nhập”, “tuổi”, “wtrans”): Chọn các biến hiển thị trên biểu đồ
- title = “Phân tích hai biến về chi tiêu doanh thu của hộ gia đình Anh”: Thêm tiêu đề
- trên = danh sách(): Điều khiển phần trên của đồ thị. Tức là phía trên đường chéo
- liên tục = bọc(“cor”, size = 3)): Tính hệ số tương quan. Chúng ta bọc đối số liên tục bên trong hàm quấn() để kiểm soát tính thẩm mỹ của biểu đồ ( tức là size = 3) -low = list(): Kiểm soát phần dưới của biểu đồ. Tức là Dưới đường chéo.
- liên tục = bọc(“mượt”, alpha = 0.3, size=0.1): Thêm biểu đồ phân tán có xu hướng tuyến tính. Chúng tôi bọc đối số liên tục bên trong hàm quấn() để kiểm soát tính thẩm mỹ của biểu đồ ( tức là size=0.1, alpha=0.3)
- ánh xạ = aes(color = Children_fac): Chúng tôi muốn mỗi phần của biểu đồ được xếp chồng theo biến children_fac, đây là biến phân loại có giá trị là 1 nếu hộ gia đình không có trẻ em và là 2 nếu không
Đầu ra:
Phân tích hai biến với ggpair với nhóm một phần
Biểu đồ dưới đây hơi khác một chút. Chúng tôi thay đổi vị trí của ánh xạ bên trong đối số trên.
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3), mapping = aes(color = children_fac)), lower = list( continuous = wrap("smooth", alpha = 0.3, size = 0.1)) )
Giải thích mã
- Mã chính xác giống như ví dụ trước ngoại trừ:
- maps=aes(color=children_fac): Di chuyển danh sách lên trên =list(). Chúng tôi chỉ muốn tính toán được xếp chồng lên nhau theo nhóm ở phần trên của biểu đồ.
Đầu ra:
Tổng kết
- Mối quan hệ hai biến mô tả mối quan hệ -hoặc mối tương quan- giữa hai biến trong R.
- Có hai phương pháp chính để tính toán mối tương quan giữa hai biến trong Lập trình R: Pearson & Spearman.
- Phương pháp tương quan Pearson thường được sử dụng làm phương pháp kiểm tra chính cho mối quan hệ giữa hai biến.
- Mối tương quan thứ hạng sắp xếp các quan sát theo thứ hạng và tính toán mức độ tương tự giữa thứ hạng.
- Tương quan xếp hạng của Spearman, , luôn nằm trong khoảng từ -1 đến 1 với giá trị gần cực trị cho thấy mối quan hệ chặt chẽ.
- Ma trận tương quan là ma trận biểu thị mối tương quan cặp của tất cả các biến.
- Mức ý nghĩa hữu ích trong một số trường hợp khi chúng ta sử dụng phương pháp Pearson hoặc Spearman.
Chúng ta có thể tóm tắt tất cả các hàm Tương quan trong R trong bảng bên dưới:
Thư viện | Mục tiêu | Phương pháp | Mã |
---|---|---|---|
Căn cứ | tương quan bivariate | Pearson |
cor(dfx2, method = "pearson") |
Căn cứ | tương quan bivariate | Spearman |
cor(dfx2, method = "spearman") |
Căn cứ | Tương quan đa biến | Pearson |
cor(df, method = "pearson") |
Căn cứ | Tương quan đa biến | Spearman |
cor(df, method = "spearman") |
Hmisc | Giá trị P |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
gally | bản đồ nhiệt |
ggcorr(df) |
|
Lô đa biến |
cf code below |