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 (numeric variables). Để làm được điều đó, chúng ta có thể sử dụng hệ số tương quan (correlation).
Trong bài viết này, mình sẽ hướng dẫn các bạn cách tính toán hệ số tương quan (correlation), cũng như cách vẽ biểu đồ tương quan (correlogram) trong R.
Chúng ta sẽ sử dụng dữ liệu iris có sẵn trong R.
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Để tính toán hệ số tương quan (correlation), chúng ta có thể sử dụng câu lệnh cor(). Lưu ý, với câu lệnh này dữ liệu đầu vào chỉ lấy những biến liên tục (numeric variables).
# Tính toán correlation giữa các biến numeric
corr <- iris %>%
# Lấy các biến liên tục
select_if(is.numeric) %>%
# Tính correlation
cor %>%
round(1)
corr %>% knitr::kable()| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | |
|---|---|---|---|---|
| Sepal.Length | 1.0 | -0.1 | 0.9 | 0.8 |
| Sepal.Width | -0.1 | 1.0 | -0.4 | -0.4 |
| Petal.Length | 0.9 | -0.4 | 1.0 | 1.0 |
| Petal.Width | 0.8 | -0.4 | 1.0 | 1.0 |
Để vẽ biểu đồ tương quan (correlogram), chúng ta có thể sử dụng câu lệnh ggcorrplot() trong package ggcorrplot.
library(ggcorrplot)
# Plot correlogram
ggcorrplot(corr,
hc.order = TRUE,
type = "lower",
lab = TRUE, # hiển thị giá trị correlation
lab_size = 4,
method = "circle",
colors = c("tomato2", "white", "springgreen3"),
title = "Correlogram of iris",
ggtheme = ggplot2::theme_classic
)Nhìn vào correlogram trên, chúng ta có thể kết luận:
Petal.Length & Petal.Width có mối quan hệ tuyến tính cùng chiều hoàn hảo (correlation = 1).
Sepal.Length có mối quan hệ tuyến tính cùng chiều chặt với Petal.Length, Petal.Width (correlation lần lượt là 0.9, 0.8).
Sepal.Width có mối quan hệ tuyến tính ngược chiều không chặt với 3 biến còn lại.
Ngoài ra, chúng ta có thể sử dụng biểu đồ điểm để trực quan hóa mối quan hệ giữa các biến số (numeric variables). Ví dụ, chúng ta muốn xem mối quan hệ giữa biến Sepal.Length với 3 biến số còn lại.
library(ggplot2)
iris %>%
select_if(is.numeric) %>%
reshape2::melt(id.vars = "Sepal.Length") %>%
ggplot(aes(Sepal.Length, value))+
geom_point(aes(col = variable))+
facet_wrap(~ variable
#scales = "free"
)+
geom_smooth(col = "blue")+
theme_classic()+
theme(legend.position = "none")Như vậy, chúng ta đã vừa được học cách phân tích mối quan hệ giữa các biến số (numeric variables) trong R. Chúc các bạn học tập và làm việc hiệu quả!