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:

Ma trận tương quan Pearson trong R

với

  • Ma trận tương quan Pearson trong R, tức là độ lệch chuẩn của
  • Ma trận tương quan Pearson trong R, 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:

Ma trận tương quan Pearson trong R

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:

Tương quan xếp hạng Spearman trong R

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
  • : 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")

Trực quan hóa ma trận tương quan

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:

Bản đồ nhiệt cơ bản

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 quyền kiểm soát vào bản đồ nhiệt

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:

Thêm nhãn vào bản đồ nhiệt

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

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:

Phân tích hai biến với ggpair với Nhóm một phần

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
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