Trong quá trình phân tích dữ liệu thực tế, chúng ta sẽ thường phải phân tích mối quan hệ giữa các biến liên tục (biến numeric). Ở trong bài viết trước đây, mình đã chia sẻ với các bạn cách giải quyết vấn đề trên bằng việc sử dụng câu lệnh cor() và ggcorrplot() trong package ggcorrplot.
Tuy nhiên, cách tính toán hệ số tương quan bằng việc sử dụng cor() sẽ có một số hạn chế sau:
Yêu cầu các biến đầu vào phải là biến liên tục
Ma trận hệ số tương quan sẽ khó đọc trong trường hợp dữ liệu lớn (nhiều biến đầu vào)
Không cung cấp giá trị khoảng tin cậy (confidence intervals)
Trong bài viết này, mình sẽ hướng dẫn các bạn cách tính toán và trực quan hóa hệ số tương quan với inspectdf.
Chúng ta sẽ sử dụng dữ liệu storms có sẵn trong R.
library(dplyr)
data("storms") # Dữ liệu có sẵn trong `R`
# Summary dữ liệu
storms <- storms %>%
mutate_if(is.character, as.factor)
storms %>% summary## name year month day
## Emily : 217 Min. :1975 Min. : 1.000 Min. : 1.00
## Bonnie : 209 1st Qu.:1992 1st Qu.: 8.000 1st Qu.: 8.00
## Alberto : 184 Median :2002 Median : 9.000 Median :16.00
## Claudette: 180 Mean :2001 Mean : 8.785 Mean :15.83
## Felix : 178 3rd Qu.:2011 3rd Qu.: 9.000 3rd Qu.:24.00
## Danielle : 165 Max. :2020 Max. :12.000 Max. :31.00
## (Other) :10726
## hour lat long status
## Min. : 0.000 Min. : 7.20 Min. :-109.30 hurricane :3613
## 1st Qu.: 6.000 1st Qu.:17.50 1st Qu.: -80.70 tropical depression:2898
## Median :12.000 Median :24.60 Median : -64.40 tropical storm :5348
## Mean : 9.117 Mean :24.76 Mean : -64.09
## 3rd Qu.:18.000 3rd Qu.:31.30 3rd Qu.: -48.40
## Max. :23.000 Max. :51.90 Max. : -6.00
##
## category wind pressure tropicalstorm_force_diameter
## -1:2898 Min. : 10.00 Min. : 882 Min. : 0.0
## 0 :5347 1st Qu.: 35.00 1st Qu.: 985 1st Qu.: 60.0
## 1 :1934 Median : 45.00 Median : 999 Median :120.0
## 2 : 749 Mean : 53.64 Mean : 992 Mean :145.3
## 3 : 434 3rd Qu.: 65.00 3rd Qu.:1006 3rd Qu.:210.0
## 4 : 411 Max. :160.00 Max. :1022 Max. :870.0
## 5 : 86 NA's :6509
## hurricane_force_diameter
## Min. : 0.00
## 1st Qu.: 0.00
## Median : 0.00
## Mean : 18.15
## 3rd Qu.: 25.00
## Max. :300.00
## NA's :6509
Để tính toán hệ số tương quan, chúng ta sẽ sử dụng câu lệnh inspect_cor() trong package inspectdf.
## # A tibble: 45 x 7
## col_1 col_2 corr p_value lower upper pcnt_~1
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 pressure wind -0.944 0 -0.946 -0.942 100
## 2 hurricane_force_diameter pressure -0.821 0 -0.830 -0.812 45.1
## 3 hurricane_force_diameter wind 0.754 0 0.742 0.765 45.1
## 4 hurricane_force_diameter tropical~ 0.681 0 0.666 0.695 45.1
## 5 tropicalstorm_force_diameter pressure -0.678 0 -0.692 -0.663 45.1
## 6 tropicalstorm_force_diameter wind 0.625 0 0.608 0.641 45.1
## 7 tropicalstorm_force_diameter lat 0.318 1.66e-119 0.294 0.342 45.1
## 8 hurricane_force_diameter lat 0.190 8.83e- 44 0.164 0.215 45.1
## 9 day month -0.174 5.59e- 80 -0.191 -0.156 100
## 10 tropicalstorm_force_diameter month 0.171 8.89e- 36 0.145 0.197 45.1
## # ... with 35 more rows, and abbreviated variable name 1: pcnt_nna
Kết quả cho ta thấy hệ số tương quan của từng cặp biến trong dữ liệu (cột col_1, col_2).
p_value: Nếu p_value < 0.05 thì có thể nói có mối tương quan tuyến tính giữa 2 biến col_1 & col_2.
lower và upper chính là khoảng tin cậy 95% của hệ số tương quan (corr).
Ngoài ra, nếu chúng ta chỉ muốn tính toán hệ số tương quan của 1 biến nhất định đối với các biến còn lại, chúng ta có thể thêm with_col = "variable_name" vào trong câu lệnh inspect_cor().
# Tính toán correlation của biến `wind` đối với các biến còn lại
storms %>%
inspect_cor(with_col = "wind") %>%
knitr::kable() # Hiển thị bảng| col_1 | col_2 | corr | p_value | lower | upper | pcnt_nna |
|---|---|---|---|---|---|---|
| wind | pressure | -0.9440526 | 0.0000000 | -0.9459775 | -0.9420612 | 100.00000 |
| wind | hurricane_force_diameter | 0.7535340 | 0.0000000 | 0.7417140 | 0.7648862 | 45.11342 |
| wind | tropicalstorm_force_diameter | 0.6245421 | 0.0000000 | 0.6079191 | 0.6406179 | 45.11342 |
| wind | month | 0.1424370 | 0.0000000 | 0.1247585 | 0.1600251 | 100.00000 |
| wind | lat | 0.0780760 | 0.0000000 | 0.0601623 | 0.0959395 | 100.00000 |
| wind | year | 0.0388059 | 0.0000239 | 0.0208221 | 0.0567645 | 100.00000 |
| wind | long | -0.0096130 | 0.2952314 | -0.0276066 | 0.0083868 | 100.00000 |
| wind | day | -0.0047970 | 0.6014420 | -0.0227934 | 0.0132024 | 100.00000 |
| wind | hour | -0.0006575 | 0.9429230 | -0.0186556 | 0.0173410 | 100.00000 |
Để trực quan hóa hệ số tương quan, chúng ta thêm câu lệnh show_plot().
# Trực quan hóa hệ số tương quan của tất cả các biến trong dữ liệu
storms %>%
inspect_cor() %>%
show_plot()# Trực quan hóa hệ số tương quan chỉ của biến `wind` với các biến khác trong dữ liệu
storms %>%
inspect_cor(with_col = "wind") %>%
show_plot()Như vậy, chúng ta đã vừa được học cách tính toán và trực quan hóa hệ số tương quan với inspectdf.
Chúc các bạn học tập và làm việc hiệu quả!