Tương quan trong R: Pearson & Ví dụ về Spearman với Ma trận

Mối quan hệ hai biến mô tả mối quan hệ - hoặc tương quan - giữa hai biến, và. Trong hướng dẫn này, chúng tôi thảo luận về khái niệm tương quan và chỉ ra cách nó có thể được sử dụng để đo lường mối quan hệ giữa hai biến bất kỳ.

Có hai phương pháp chính để tính toán mối tương quan giữa hai biến.

  • Pearson: Tương quan tham số
  • Spearman: Tương quan phi tham số

Trong hướng dẫn này, bạn sẽ học

  • Tương quan Pearson
  • Tương quan cấp bậc của Spearman
  • Ma trận tương quan
  • Hình dung ma trận tương quan

Tương quan Pearson

Phương pháp tương quan Pearson thường được sử dụng như một phép kiểm tra chính cho mối quan hệ giữa hai biến.

Các 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 ngụ ý ít hoặc không có mối quan hệ tuyến tính giữa và.
  • Ngược lại, càng gần 1 hoặc -1, mối quan hệ tuyến tính càng mạnh.

Chúng ta có thể tính toán kiểm định t như sau và kiểm tra bảng phân phối với bậc tự do bằng:

Tương quan cấp bậc của Spearman

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 độ giống nhau giữa thứ hạng. Mối tương quan thứ hạng có lợi thế là mạnh mẽ so với các giá trị ngoại lai 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 thứ hạng phù hợp với biến thứ tự.

Tương quan thứ hạng của Spearman, luôn nằm giữa -1 và 1 với giá trị gần với điểm cực trị cho thấy mối quan hệ mạnh mẽ. Nó được tính như sau:

với đã nêu các hiệp phương sai giữa hạng và. Mẫu số tính độ lệch chuẩn.

Trong R, chúng ta có thể sử dụng hàm cor (). Nó cần 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 được sử dụng để tính toán mối 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 các vectơ chứa giá trị bị thiếu: use = "complete.obs"

Chúng tôi sẽ sử dụng tập dữ liệu BudgetUK. Tập 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 mười đặc điểm, trong số đó:

  • wfood: chia sẻ thức ăn chia sẻ chi tiêu
  • wfuel: chia sẻ chi tiêu nhiên liệu
  • khăn: chia sẻ ngân sách cho chi tiêu quần áo
  • walc: chia sẻ chi tiêu rượu
  • wtrans: chia sẻ chi tiêu vận chuyển
  • wother: tỷ trọng chi tiêu hàng hóa khác
  • totexp: tổng chi tiêu hộ gia đình tính bằng đồ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ố trẻ em
Thí 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ã

  • Đầu tiên, chúng tôi nhập dữ liệu và xem xét bằng hàm gluxit () từ thư viện dplyr.
  • Ba điểm trên 500 nghìn, vì vậy chúng tôi quyết định loại trừ chúng.
  • Đó là một thực tế phổ biến để 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  0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0… ## $ wfuel  0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0… ## $ wcloth  0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0… ## $ walc  0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0… ## $ wtrans  0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0… ## $ wother  0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0… ## $ age  25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2… ## $ log_income  4.867534, 5.010635, 5.438079, 4.605170, 4.605170,… ## $ log_totexp  3.912023, 4.499810, 5.192957, 4.382027, 4.499810,… ## $ children_fac  Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes,… 

Chúng ta có thể tính toán hệ số tương quan giữa các biến thu nhập và wfood bằng phương pháp "pearson" và "Speman".

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

Mối tương quan hai biến là một khởi đầu tốt, nhưng chúng ta có thể có một bức tranh rộng hơn với phân tích đa biến. Mối tương quan với nhiều biến được hình dung bên trong ma trận tương quan . Ma trận tương quan là ma trận đại diện cho mối tương quan cặp của tất cả các biến.

Hàm cor () trả về một 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 toán mối tương quan cho biến nhân tố. Chúng ta cần đảm bảo rằng chúng ta bỏ tính năng phân loại trước khi chuyển khung dữ liệu vào bên trong cor ().

Ma trận tương quan là đối xứng có 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. Hiển thị một nửa ma trận sẽ trực quan hơn.

Chúng tôi loại trừ children_fac vì nó là một biến cấp nhân 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 codemat_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
  • round (data, 2): Làm tròn ma trận tương quan với hai số thập phân
  • as.dist (): Chỉ hiển thị 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 rất 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 Speman. Hàm rcorr () từ thư viện Hmisc tính toán cho chúng ta giá trị p. Chúng tôi có thể tải xuống thư viện từ conda và sao chép mã để dán nó vào thiết bị đầu cuối:

conda install -c r r-hmisc 

Rcorr () yêu cầu một 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 một ma trận trước đó để tính toán 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ần quan sát
  • P: giá trị p

Chúng tôi quan tâm đến phần 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"]]: Các giá trị p được lưu trữ trong phần tử được gọi là 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_totexpwfood NA 0.000 0.000 0.000 0.000 0.000 0.365 0.000 0wfuel 0.000 NA 0.000 0.000 0.000 0.000 0.076 0.000 0wcloth 0.000 0.000 NA 0.001 0.000 0.000 0.160 0.000 0walc 0.000 0.000 0.001 NA 0.000 0.000 0.000 0.105 0wtrans 0.000 0.000 0.000 0.000 NA 0.000 0.259 0.020 0wother 0.000 0.000 0.000 0.000 0.000 NA 0.355 0.000 0age 0.365 0.076 0.160 0.000 0.259 0.355 NA 0.000 0log_income 0.000 0.000 0.000 0.105 0.020 0.000 0.000 NA 0log_totexp 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 NA

Hình dung ma trận tương quan

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à một phần mở rộng của ggplot2. Hiện tại, nó không có sẵn trong thư viện chung cư. Chúng tôi 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ị các 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 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)

Tranh luận:

  • df : Tập dữ liệu được sử dụng
  • phương pháp : Công thức tính tương quan. Theo mặc định, cặp đôi và Pearson được tính toán
  • nbreaks : Trả về một phạm vi phân loại cho màu của các hệ số. Theo mặc định, không có ngắt và chuyển 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
  • mid : Kiểm soát mức độ màu giữa
  • cao : Kiểm soát mức độ màu cao
  • geom : Kiểm soát hình dạng của đối số hình học. Theo mặc định, "ô xếp"
  • label : Giá trị Boolean. Hiển thị hoặc không nhãn. Theo mặc định, đặ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à một bản đồ nhiệt. Phần chú giải của biểu đồ hiển thị màu chuyển sắc từ - 1 đến 1, với màu nóng biểu thị tương quan dương mạnh và màu lạnh, tương quan âm.

library(GGally)ggcorr(data)

Giải thích mã

  • ggcorr (data): Chỉ cần một đối số là tên khung dữ liệu. Các biến mức nhân tố không được đưa vào biểu đồ.

Đầu ra:

Thêm kiểm soát vào bản đồ nhiệt

Chúng tôi 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ã

  • nbreaks = 6: phá vỡ chú giải với 6 bậc.
  • low = "steelblue": Sử dụng màu sáng hơn để có tương quan âm
  • mid = "white": Sử dụng màu trắng cho tương quan phạm vi trung bình
  • high = "darkred": Sử dụng màu tối để có tương quan tích cực
  • geom = "circle": 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 vòng tròn tỷ lệ thuận với giá trị tuyệt đối của mối 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 vào bên trong cửa sổ.

ggcorr(data,nbreaks = 6,label = TRUE,label_size = 3,color = "grey50")

Giải thích mã

  • label = TRUE: Thêm giá trị của các hệ số tương quan bên trong bản đồ nhiệt.
  • color = "grey50": Chọn màu, tức là màu xám
  • label_size = 3: Đặt kích thước của nhãn bằng 3

Đầu ra:

ggpairs

Cuối cùng, chúng tôi giới thiệu một chức năng khác từ thư viện GGaly. Ggpair. Nó tạo ra một đồ thị ở dạng ma trận. Chúng tôi có thể hiển thị ba loại tính toán trong một biểu đồ. Ma trận là một thứ nguyên, với số lượng quan sát bằng. Phần trên / dưới hiển thị các cửa sổ và theo đường chéo. Chúng tôi có thể kiểm soát thông tin chúng tôi muốn hiển thị trong mỗi 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)

Lập luận :

  • df : Tập dữ liệu được sử dụng
  • cột : Chọn các cột để vẽ biểu đồ
  • title : Bao gồm một tiêu đề
  • phía trên : Kiểm soát các hộp phía trên đường chéo của âm mưu. Cần cung cấp loại tính toán hoặc đồ thị để trả về. Nếu liên tục = "cor", chúng tôi yêu cầu R tính tương quan. Lưu ý rằng, đối số cần phải là một danh sách. Các đối số khác có thể được sử dụng, hãy xem [họa tiết] ("http://ggobi.github.io/ggally/#custom_functions") để biết thêm thông tin.
  • Thấp hơn : Kiểm soát các hộp bên dưới đường chéo.
  • Ánh xạ : Chỉ ra tính thẩm mỹ của đồ thị. Ví dụ, 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_income, age và wtrans được nhóm theo nhóm hộ gia đình có con hay không.
  • Vẽ biểu đồ phân bố của 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_income", "tuổi", "wtrans"): Chọn các biến để hiển thị trong biểu đồ
  • title = "Phân tích lưỡng biến về thu chi của hộ gia đình Anh": Thêm tiêu đề
  • upper = list (): Kiểm soát phần trên của biểu đồ. Tức là trên đường chéo
  • liên tục = wrap ("cor", size = 3)): Tính hệ số tương quan. Chúng ta quấn đối số liên tục bên trong hàm wrap () để kiểm soát độ thẩm mỹ của đồ thị (tức là size = 3) -lower = list (): Điều khiển phần dưới của đồ thị. Tức là Dưới đường chéo.
  • liên tục = quấn ("mịn", alpha = 0,3, kích thước = 0,1): Thêm biểu đồ phân tán có xu hướng tuyến tính. Chúng tôi quấn đối số liên tục bên trong hàm wrap () để kiểm soát tính thẩm mỹ của đồ thị (tức là kích thước = 0,1, alpha = 0,3)
  • mapping = aes (color = children_fac): Chúng tôi muốn từng phần của biểu đồ được xếp chồng lên nhau bởi biến children_fac, là một biến phân loại nhận giá trị 1 nếu hộ gia đình không có con và 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 đồ bên dưới có một chút khác biệ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ừ:
  • mapping = aes (color = children_fac): Di chuyển danh sách trong upper = 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óm lược

Chúng ta có thể tóm tắt hàm trong bảng dưới đây:

thư viện

Mục tiêu

phương pháp

Căn cứ

tương quan lưỡng biến

lề

cor(dfx2, method = "pearson")

Căn cứ

tương quan lưỡng biến

Spearman

cor(dfx2, method = "spearman")

Căn cứ

Tương quan đa biến

lề

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

Hợp pháp

bản đồ nhiệt

ggcorr(df)

Biểu đồ đa biến

cf code below

thú vị bài viết...