Chuyển đến nội dung chính
R

Hướng dẫn Tương quan trong R

Làm quen với những kiến thức cơ bản về tương quan trong R: tìm hiểu hệ số tương quan, ma trận tương quan, vẽ biểu đồ tương quan, v.v.
David Woods's photo
David Woods
Đã cập nhật · 13 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Tạo tài khoản miễn phí của bạn

Luyện tập và Lộ trình tiến trình của bạn.

Tiếp Tục Với Google
Bằng cách tiếp tục, bạn chấp nhận Điều khoản sử dụng, Chính sách bảo mật và việc dữ liệu của bạn được lưu trữ tại Hoa Kỳ.

tương quan

Trong hướng dẫn này, bạn sẽ khám phá một số phương pháp trực quan hóa dữ liệu và những thống kê nền tảng của chúng. Đặc biệt là cách nhận diện xu hướng và mối quan hệ giữa các biến trong một data frame.

Đúng vậy, bạn sẽ tập trung vào các khái niệm như tương quan và hồi quy! Trước hết, bạn sẽ được giới thiệu về tương quan trong R. Sau đó, bạn sẽ xem cách vẽ ma trận tương quan trong R bằng các gói như ggplot2 và GGally. Cuối cùng, bạn sẽ thấy các loại tương quan khác nhau và ý nghĩa của chúng đối với phân tích tiếp theo của bạn.

Nếu bạn muốn đào sâu hơn chủ đề này, hãy cân nhắc khóa học Tương quan và Hồi quy của DataCamp.

Bối cảnh

Trong bài hướng dẫn hôm nay, bạn sẽ làm việc với một tập dữ liệu về phim lấy từ Kaggle để khám phá cách hiểu rõ hơn mối quan hệ giữa các biến.

Tôi đã tinh chỉnh nhẹ dữ liệu để phân tích được “táo so với táo” bằng cách đảm bảo những thứ như đơn vị tiền tệ dùng cùng chuẩn. Nếu không có bước đó, phân tích thống kê của chúng ta với các biến như gross, budget và profit sẽ gây hiểu nhầm. Bạn có thể truy cập tập dữ liệu gốc.

Nhập dữ liệu

Để truy cập tập dữ liệu movies và sử dụng nó, bạn có thể dùng hàm read.csv() để nhập dữ liệu vào một data frame và lưu vào biến với cái tên “độc đáo” movies!

movies <- read.csv(url("http://s3.amazonaws.com/dcwoods2717/movies.csv"))

Chỉ vậy là bạn có thể bắt đầu rồi!

Khám phá dữ liệu cơ bản

Một ý hay là sau khi đã nhập data frame, bạn nên có cái nhìn tổng quan về dữ liệu. Trước hết, hãy xem cấu trúc dữ liệu đang được khảo sát. Bên dưới là kết quả khi dùng hàm cực kỳ đơn giản mà hữu ích str():

str(movies)
## 'data.frame':    2961 obs. of  11 variables:
##  $ title              : Factor w/ 2907 levels "10 Cloverfield Lane",..: 1560 2143 34 2687 1405 1896 2633 894 1604 665 ...
##  $ genre              : Factor w/ 17 levels "Action","Adventure",..: 6 12 5 5 5 3 2 8 3 8 ...
##  $ director           : Factor w/ 1366 levels "Aaron Schneider",..: 474 472 781 828 175 1355 1328 1328 968 747 ...
##  $ year               : int  1920 1929 1933 1935 1936 1937 1939 1939 1940 1946 ...
##  $ duration           : int  110 100 89 81 87 83 102 226 88 144 ...
##  $ gross              : int  3000000 2808000 2300000 3000000 163245 184925485 22202612 198655278 84300000 20400000 ...
##  $ budget             : int  100000 379000 439000 609000 1500000 2000000 2800000 3977000 2600000 8000000 ...
##  $ cast_facebook_likes: int  4 109 995 824 352 229 2509 1862 1178 2037 ...
##  $ votes              : int  5 4546 7921 13269 143086 133348 291875 215340 90360 6304 ...
##  $ reviews            : int  2 107 162 164 331 349 746 863 252 119 ...
##  $ rating             : num  4.8 6.3 7.7 7.8 8.6 7.7 8.1 8.2 7.5 6.9 ...

Trong data frame này, từ console bạn có thể thấy có 2961 quan sát của 11 biến.

Nhân tiện, kể cả nếu mỗi bộ phim chỉ dài một giờ, bạn sẽ phải xem phim liên tục hơn bốn tháng mới hết tất cả!

Console cũng liệt kê tên từng biến, lớp của biến, và một vài giá trị ví dụ. Điều này giúp ta có cái nhìn khá rõ về nội dung của data frame, mà hiểu được điều đó là rất quan trọng cho nỗ lực phân tích.

Một hàm tuyệt vời khác giúp tổng quan nhanh ở mức cao về data frame là summary(). Lưu ý những điểm giống và khác giữa kết quả của str().

summary(movies)
##                          title            genre    
##  Home                       :   3   Comedy   :848  
##  A Nightmare on Elm Street  :   2   Action   :738  
##  Across the Universe        :   2   Drama    :498  
##  Alice in Wonderland        :   2   Adventure:288  
##  Aloha                      :   2   Crime    :202  
##  Around the World in 80 Days:   2   Biography:135  
##  (Other)                    :2948   (Other)  :252  
##               director         year         duration    
##  Steven Spielberg :  23   Min.   :1920   Min.   : 37.0  
##  Clint Eastwood   :  19   1st Qu.:1999   1st Qu.: 95.0  
##  Martin Scorsese  :  16   Median :2004   Median :106.0  
##  Tim Burton       :  16   Mean   :2003   Mean   :109.6  
##  Spike Lee        :  15   3rd Qu.:2010   3rd Qu.:119.0  
##  Steven Soderbergh:  15   Max.   :2016   Max.   :330.0  
##  (Other)          :2857                                 
##      gross               budget          cast_facebook_likes
##  Min.   :      703   Min.   :      218   Min.   :     0     
##  1st Qu.: 12276810   1st Qu.: 11000000   1st Qu.:  2241     
##  Median : 34703228   Median : 26000000   Median :  4604     
##  Mean   : 58090401   Mean   : 40619384   Mean   : 12394     
##  3rd Qu.: 75590286   3rd Qu.: 55000000   3rd Qu.: 16926     
##  Max.   :760505847   Max.   :300000000   Max.   :656730     
##                                                             
##      votes            reviews           rating     
##  Min.   :      5   Min.   :   2.0   Min.   :1.600  
##  1st Qu.:  19918   1st Qu.: 199.0   1st Qu.:5.800  
##  Median :  55749   Median : 364.0   Median :6.500  
##  Mean   : 109308   Mean   : 503.3   Mean   :6.389  
##  3rd Qu.: 133348   3rd Qu.: 631.0   3rd Qu.:7.100  
##  Max.   :1689764   Max.   :5312.0   Max.   :9.300  
## 

Chỉ với một lệnh, bạn đã để R trả về một số thông tin thống kê then chốt cho mỗi biến trong data frame. Giờ thì khi đã biết mình đang làm việc với gì, hãy đào sâu và khám phá dữ liệu thêm nhé!

Kỹ thuật đặc trưng: Tính lợi nhuận

Xem xét các biến hiện có, có vẻ một số biến số có thể thao tác để mang lại góc nhìn mới cho data frame.

Chẳng hạn, bạn có biến gross và budget, vậy tại sao không dùng một chút tính toán để ra lợi nhuận cho mỗi bộ phim?

Bạn có thể tính lợi nhuận bằng công thức profit = gross - budget. Hãy thử trong ô DataCamp Light bên dưới!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdih1cmwoXCJodHRwOi8vczMuYW1hem9uYXdzLmNvbS9kY3dvb2RzMjcxNy9tb3ZpZXMuY3N2XCIpKSIsInNhbXBsZSI6IiMgRmlsbCBpbiB0aGUgYXBwcm9wcmlhdGUgdmFyaWFibGUgbmFtZXMgdG8gc3Vic2V0IVxucHJvZml0IDwtIG1vdmllcyQuLi4uLiAtIG1vdmllcyQuLi4uLlxuXG4jIENoZWNrIHRoZSByZXN1bHRcbnN1bW1hcnkocHJvZml0KSIsInNvbHV0aW9uIjoiIyBGaWxsIGluIHRoZSBhcHByb3ByaWF0ZSB2YXJpYWJsZSBuYW1lcyB0byBzdWJzZXQhXG5wcm9maXQgPC0gbW92aWVzJGdyb3NzIC0gbW92aWVzJGJ1ZGdldFxuXG4jIENoZWNrIHRoZSByZXN1bHRcbnN1bW1hcnkocHJvZml0KSIsInNjdCI6InRlc3Rfb2JqZWN0KFwicHJvZml0XCIsIHVuZGVmaW5lZF9tc2c9XCJEaWQgeW91IGNvcnJlY3RseSBkZWZpbmUgdGhlIHZhcmlhYmxlIGBwcm9maXRgP1wiLCBpbmNvcnJlY3RfbXNnID0gXCJOb3QgcXVpdGUhXCIpXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiRXhjZWxsZW50IVwiKSJ9

Tuyệt!

Bạn có thể thấy có khá nhiều phim “hái ra tiền” và cũng không ít “hố lỗ” trong data frame.

profit của các phim có lẽ sẽ hữu ích cho vài phân tích thú vị sau này, nên hãy thêm profit như một cột mới vào data frame.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdihcImh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIikiLCJzYW1wbGUiOiIjIEFkZCBhIGNvbHVtbiBmb3IgYHByb2ZpdGAgdG8gYG1vdmllc2AgXG5tb3ZpZXMkLi4uLi4gPC0gbW92aWVzJC4uLi4uIC0gbW92aWVzJC4uLi4uIiwic29sdXRpb24iOiIjIEFkZCBhIGNvbHVtbiBmb3IgYHByb2ZpdGAgdG8gYG1vdmllc2Bcbm1vdmllcyRwcm9maXQgPC0gbW92aWVzJGdyb3NzIC0gbW92aWVzJGJ1ZGdldCJ9

Tương quan

Giờ khi profit đã được thêm như một cột mới trong data frame, đã đến lúc xem kỹ hơn các mối quan hệ giữa những biến trong tập dữ liệu.

Hãy xem profit biến động như thế nào so với rating của mỗi bộ phim.

Cho việc này, bạn có thể dùng các hàm dựng sẵn của R là plot và abline, trong đó plot sẽ cho biểu đồ phân tán và abline sẽ thêm đường hồi quy hay “đường hồi quy tốt nhất” do ta truyền mô hình tuyến tính như bạn sẽ thấy bên dưới.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdih1cmwoXCJodHRwOi8vczMuYW1hem9uYXdzLmNvbS9kY3dvb2RzMjcxNy9tb3ZpZXMuY3N2XCIpKVxubW92aWVzJHByb2ZpdCA8LSBtb3ZpZXMkZ3Jvc3MgLSBtb3ZpZXMkYnVkZ2V0XG5vcHRpb25zKHNjaXBlbiA9IDk5OSkiLCJzYW1wbGUiOiIjIENyZWF0ZSB0aGUgc2NhdHRlciBwbG90IHdpdGggYHJhdGluZ3NgIG9uIHRoZSB4LWF4aXMgYW5kIGBwcm9maXRgIG9uIHRoZSB5LWF4aXNcbnBsb3QobW92aWVzJC4uLi4sIG1vdmllcyQuLi4uKVxuXG4jIEFkZCBhIHJlZ3Jlc3Npb24gbGluZXdpdGggdGhlIGZvcm0gYGFibGluZShsbSh5IH4geCkpYFxuXG5hYmxpbmUobG0obW92aWVzJC4uLi4gfiBtb3ZpZXMkLi4uLikpIiwic29sdXRpb24iOiIjIENyZWF0ZSB0aGUgc2NhdHRlciBwbG90IHdpdGggYHJhdGluZ3NgIG9uIHRoZSB4LWF4aXMgYW5kIGBwcm9maXRgIG9uIHRoZSB5LWF4aXNcbnBsb3QobW92aWVzJHJhdGluZywgbW92aWVzJHByb2ZpdClcblxuIyBBZGQgYSByZWdyZXNzaW9uIGxpbmUgd2l0aCB0aGUgZm9ybSBgYWJsaW5lKGxtKHkgfiB4KSlgIFxuYWJsaW5lKGxtKG1vdmllcyRwcm9maXQgfiBtb3ZpZXMkcmF0aW5nKSkifQ==

Kết quả có đúng như bạn kỳ vọng không?

hồi quy R

Nhìn chung, có vẻ các phim có rating cao hơn có xu hướng profit cao hơn. Nói cách khác, tồn tại một tương quan dương giữa rating và profit, ít nhất là trong data frame của chúng ta.

Tuy vậy, chỉ thoáng nhìn đồ thị cũng thấy có nhiều phim được đánh giá rất cao nhưng không hẳn là bom tấn, và cũng có nhiều phim lợi nhuận rất lớn nhưng điểm đánh giá lại khá thấp.

Tương quan KHÔNG đồng nghĩa với quan hệ nhân quả!

Một giai thoại giúp phân biệt tương quan và nhân quả như sau: Tôi bán kem ở bãi biển. Số người băng qua đường sai luật trong thành phố có xu hướng tăng khi doanh số kem của tôi tăng, nhưng liệu kem của tôi có làm người ta phớt lờ luật giao thông, hay do yếu tố khác? Kem của tôi quả là ngon, nhưng nắng đẹp ngoài trời có lẽ khiến người ta vừa muốn ăn kem vừa không muốn đứng dưới nắng ở vạch qua đường. Có tồn tại mối liên hệ (tương quan) giữa doanh số kem và số người băng qua đường sai luật, nhưng bạn không thể khẳng định đó là quan hệ nhân quả.

Hãy ghi nhớ cách lập luận này khi bạn tiếp tục với hướng dẫn!

Tính tương quan trong R

Vậy có những kiểu quan hệ nào giữa các biến trong movies, và bạn có thể đánh giá định lượng những quan hệ đó thế nào?

Cách đầu tiên là tạo các hệ số tương quan và ma trận tương quan với cor():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdihcImh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIilcbm1vdmllcyRwcm9maXQgPC0gbW92aWVzJGdyb3NzIC0gbW92aWVzJGJ1ZGdldFxub3B0aW9ucyhzY2lwZW4gPSA5OTkpIiwic2FtcGxlIjoiIyBDb21wdXRlIFBlYXJzb24gY29ycmVsYXRpb25cbmNvcihtb3ZpZXMkcmF0aW5nLCBtb3ZpZXMkcHJvZml0KVxuXG4jIENvcnJlbGF0aW9uIE1hdHJpeFxuY29yKG1vdmllc1ssNDoxMF0pIn0=

Lưu ý bạn cũng có thể chỉ định phương pháp để xác định hệ số tương quan muốn tính. Hãy cẩn thận, vì luôn có những giả định đi kèm: phương pháp Kendall và Spearman chỉ phù hợp với dữ liệu có thứ tự. Điều này nghĩa là bạn cần sắp xếp dữ liệu trước khi tính hệ số tương quan.

Thêm nữa, phương pháp mặc định là tương quan Pearson, giả định rằng các biến của bạn phân phối chuẩn, tồn tại quan hệ tuyến tính giữa từng cặp biến và dữ liệu phân phối chuẩn quanh đường hồi quy.

Cũng lưu ý bạn có thể dùng rcorr() trong gói Hmisc để tính mức ý nghĩa cho tương quan Pearson và Spearman.

Bạn cũng sẽ thấy ma trận tương quan thực chất là một bảng hiển thị hệ số tương quan giữa các tập biến. Đây đã là một cách rất hay để nắm bắt sơ bộ những quan hệ nào tồn tại giữa các biến trong tập dữ liệu, nhưng ta sẽ đào sâu hơn ở phần tiếp theo.

Khám phá tương quan trực quan: Ma trận tương quan trong R

Ở bước tiếp theo này, bạn sẽ vẽ một ma trận tương quan dùng các biến có trong data frame movies. Biểu đồ đơn giản này giúp bạn nhanh chóng hình dung biến nào có tương quan âm, dương, yếu hay mạnh với các biến khác.

Để làm điều này, bạn sẽ dùng một gói tiện lợi tên là GGally và hàm ggcorr().

Dạng lời gọi hàm là ggcorr(df), trong đó df là tên data frame bạn áp dụng. Kết quả là một ma trận hình tam giác, mã màu và có nhãn tên biến. Hệ số tương quan của mỗi biến so với biến khác có thể tìm bằng cách đọc theo hàng và/hoặc cột của ma trận, tùy vị trí biến trong ma trận.

Nghe có vẻ rắc rối, nhưng thực tế rất đơn giản, hãy thử ở ô mã sau!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdih1cmwoXCJodHRwOi8vczMuYW1hem9uYXdzLmNvbS8vZGN3b29kczI3MTcvbW92aWVzLmNzdlwiKSlcbm1vdmllcyRwcm9maXQgPC0gbW92aWVzJGdyb3NzIC0gbW92aWVzJGJ1ZGdldFxubGlicmFyeShcIkdHYWxseVwiKSIsInNhbXBsZSI6IiMgUmVwbGFjZSB0aGUgXCIuLi4uLlwiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGRhdGEgZnJhbWUgXG5nZ2NvcnIoLi4uLi4pIiwic29sdXRpb24iOiIjIFJlcGxhY2UgdGhlIFwiLi4uLi5cIiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBkYXRhIGZyYW1lIFxuZ2djb3JyKG1vdmllcykifQ==

hệ số tương quan

Trong ma trận tương quan bạn vừa tạo (làm tốt lắm!), bạn có thể chuyển tới hàng hoặc cột ứng với một biến như year và xem hệ số tương quan của nó qua màu ô tương ứng với biến khác.

Ví dụ khi xem year, bạn sẽ thấy có tương quan dương yếu với budget và tương quan âm yếu tương tự với rating.

Các hệ số tương quan luôn nằm trong khoảng từ -1 đến 1, bao gồm cả hai đầu. Hệ số -1 cho biết sự khớp âm hoàn hảo, trong đó giá trị y giảm đúng bằng tốc độ x tăng. Hệ số 1 cho biết sự khớp dương hoàn hảo, trong đó giá trị y tăng đúng bằng tốc độ x tăng.

Trong đa số trường hợp, như ví dụ year ở trên, hệ số tương quan sẽ nằm đâu đó giữa -1 và 1.

Bạn có nhận ra điều gì hơi lạ về các biến hiển thị trong ma trận tương quan không?

Không phải tất cả biến trong movies đều có mặt!

Đó là vì không phải biến nào trong movies cũng là số. Hàm ggcorr tự động bỏ qua biến không phải số, tiết kiệm thời gian cho người dùng khỏi phải “lọc bỏ” chúng trước khi tạo ma trận.

Nếu bạn muốn ma trận tương quan “nổi bật” hơn (hoặc bạn hơi mù màu như tôi), có vài tinh chỉnh đơn giản để tạo các ma trận trực quan, giàu thông tin hơn.

Trong ô mã sau, bạn thêm tham số label, có thể đặt bằng TRUE hoặc FALSE. Mặc định là FALSE, nhưng nếu thêm label = TRUE, hệ số tương quan của mỗi quan hệ sẽ được hiển thị trong ô tương ứng. Nhờ vậy bạn không phải đoán giá trị dựa vào thang màu.

Tham số label_alpha cho phép tăng/giảm độ mờ của từng nhãn dựa trên độ mạnh của hệ số tương quan. Điều này rất hữu ích cho phân tích trực quan nhanh.

Đừng chỉ nghe tôi nói, hãy tự thử!

Giờ hãy vẽ một ma trận tương quan “ngon” hơn:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Im1vdmllcyA8LSByZWFkLmNzdih1cmwoXCJodHRwOi8vczMuYW1hem9uYXdzLmNvbS8vZGN3b29kczI3MTcvbW92aWVzLmNzdlwiKSlcbm1vdmllcyRwcm9maXQgPC0gbW92aWVzJGdyb3NzIC0gbW92aWVzJGJ1ZGdldFxubGlicmFyeShcIkdHYWxseVwiKSIsInNhbXBsZSI6IiMgRmlsbCBpbiBcIlRSVUVcIiBvciBcIkZBTFNFXCIgdG8gc2VlIGhvdyB0aGUgY29ycmVsYXRpb24gbWF0cml4IGNoYW5nZXNcbmdnY29ycihtb3ZpZXMsIFxuICAgICAgIGxhYmVsID0gLi4uLi4sIFxuICAgICAgIGxhYmVsX2FscGhhID0gLi4uLi4pIiwic29sdXRpb24iOiIjIEZpbGwgaW4gXCJUUlVFXCIgb3IgXCJGQUxTRVwiIHRvIHNlZSBob3cgdGhlIGNvcnJlbGF0aW9uIG1hdHJpeCBjaGFuZ2VzXG5nZ2NvcnIobW92aWVzLCBcbiAgICAgICBsYWJlbCA9IFRSVUUsIFxuICAgICAgIGxhYmVsX2FscGhhID0gVFJVRSkifQ==

hệ số tương quan

Ở các biểu đồ tiếp theo, bạn sẽ thấy khi vẽ một quan hệ “mạnh”, độ dốc của đường hồi quy (x/y) sẽ gần 1/1 hoặc -1/1 hơn, trong khi quan hệ “yếu” có đường hồi quy gần như không dốc. Độ dốc gần 1/1 hoặc -1/1 ngụ ý hai biến có liên hệ chặt chẽ.

Với data frame movies, một đường hồi quy như vậy có thể đem lại góc nhìn mạnh mẽ về bản chất các biến và có thể cho thấy sự phụ thuộc lẫn nhau giữa chúng.

Ví dụ, ở biểu đồ profit theo rating trước đó, bạn thấy đường hồi quy có độ dốc dương vừa phải. Nhìn lại ma trận tương quan, bạn thấy hệ số tương quan của hai biến này là 0.3.

Hợp lý, phải không?

Các loại tương quan

Giờ hãy xem thêm những biểu đồ minh họa các loại tương quan khác nhau mà bạn đã thấy ở phần trước!

Tương quan mạnh: Vẽ Votes so với Reviews

Hãy bắt đầu bằng cách vẽ hai biến có tương quan dương mạnh.

Dựa vào ma trận tương quan, có vẻ votes so với reviews đáp ứng tiêu chí với giá trị tương quan 0.8. Nghĩa là độ dốc của ta sẽ tương đối gần 1/1.

Bạn sẽ dùng gói ggplot2 trong bài tập này và các bài sau. Gói ggplot2 là bộ công cụ linh hoạt để tạo các trực quan hóa dữ liệu hấp dẫn.

Trong trường hợp này, bạn sẽ tận dụng hàm qplot trong ggplot2, có thể tạo nhiều loại biểu đồ tùy kiểu được truyền vào tham số geom (hình học).

Trong ô mã sau, geom được đặt là một vector gồm hai kiểu, point và smooth, trong đó point tạo biểu đồ phân tán và smooth tạo đường xu hướng. Bạn cũng sẽ thấy method đặt là lm, nghĩa là đường xu hướng sẽ là đường hồi quy thẳng quen thuộc như ở biểu đồ profit theo years trước đó.

Tóm lại, bạn sắp thấy việc tạo các trực quan hóa dữ liệu ấn tượng nhanh đến thế nào!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoXCJnZ3Bsb3QyXCIpXG5tb3ZpZXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL3MzLmFtYXpvbmF3cy5jb20vL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIikpXG5tb3ZpZXMkcHJvZml0IDwtIG1vdmllcyRncm9zcyAtIG1vdmllcyRidWRnZXRcbm9wdGlvbnMoc2NpcGVuID0gOTk5KSIsInNhbXBsZSI6IiMgUGxvdCB2b3RlcyB2cyByZXZpZXdzXG5xcGxvdChtb3ZpZXMkLi4uLi4sIFxuICAgICAgbW92aWVzJC4uLi4uLCBcbiAgICAgIGRhdGEgPSAuLi4uLiwgXG4gICAgICBnZW9tID0gYyhcInBvaW50XCIsIFwic21vb3RoXCIpLCBcbiAgICAgIG1ldGhvZCA9IFwibG1cIiwgXG4gICAgICBhbHBoYSA9IEkoMSAvIDUpLCBcbiAgICAgIHNlID0gRkFMU0UpIiwic29sdXRpb24iOiIjIFBsb3Qgdm90ZXMgdnMgcmV2aWV3c1xucXBsb3QobW92aWVzJHZvdGVzLCBcbiAgICAgIG1vdmllcyRyZXZpZXdzLCBcbiAgICAgIGRhdGEgPSBtb3ZpZXMsIFxuICAgICAgZ2VvbSA9IGMoXCJwb2ludFwiLCBcInNtb290aFwiKSwgXG4gICAgICBtZXRob2QgPSBcImxtXCIsIFxuICAgICAgYWxwaGEgPSBJKDEgLyA1KSwgXG4gICAgICBzZSA9IEZBTFNFKSJ9

tương quan dương trong R

Có thể bạn nhận ra tham số alpha trong hàm qplot ở trên. Việc dùng alpha trong qplot áp dụng một mức độ mờ dần cho các điểm trong biểu đồ phân tán, tương tự cách nó thay đổi độ mờ của nhãn hệ số tương quan trong ggcorr.

Với cấu hình bạn dùng, một điểm chỉ đạt độ đậm hoàn toàn khi bị chồng lên bởi 5 điểm khác. Tăng/giảm mẫu số của alpha sẽ ảnh hưởng số điểm chồng lên cần thiết để thay đổi độ mờ. Lý do dùng thẩm mỹ này là nó giúp người xem nhanh chóng nhận ra nơi có mật độ điểm dữ liệu cao trong biểu đồ, từ đó gợi mở những hiểu biết mới chỉ bằng một cái nhìn.

Cứ thoải mái chỉnh mã và xem nó hoạt động ra sao!

Tương quan yếu: Vẽ Profit theo Years

Giờ hãy xem một tương quan âm “yếu” trông thế nào bằng cách vẽ profit so với years. Lần này không chỉ định method, nên đường xu hướng sẽ thay đổi theo dữ liệu theo kiểu cong (đường fitted), đây là mặc định của hàm. Bạn sẽ thấy dọc theo một số đoạn của đường xu hướng có vùng xám nhạt to nhỏ tùy theo khoảng tin cậy của đường xu hướng.

Nếu bạn chưa quen với khái niệm khoảng tin cậy, đừng lo! R sẽ làm giúp bạn, và khái niệm này sẽ được giải thích rõ hơn sau bài tập này.

Hiện tại, chỉ cần điền mã cần thiết và quan sát!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoXCJnZ3Bsb3QyXCIpXG5tb3ZpZXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL3MzLmFtYXpvbmF3cy5jb20vL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIikpXG5tb3ZpZXMkcHJvZml0IDwtIG1vdmllcyRncm9zcyAtIG1vdmllcyRidWRnZXRcbm9wdGlvbnMoc2NpcGVuID0gOTk5KSIsInNhbXBsZSI6IiMgUGxvdCBwcm9maXQgb3ZlciB5ZWFyc1xucXBsb3QobW92aWVzJHllYXIsIFxuICAgICAgbW92aWVzJHByb2ZpdCwgXG4gICAgICBkYXRhID0gbW92aWVzLCBcbiAgICAgIGdlb20gPSBjKFwicG9pbnRcIiwgXCJzbW9vdGhcIiksIFxuICAgICAgYWxwaGEgPSBJKDEgLyA1KSkiLCJzb2x1dGlvbiI6IiMgUGxvdCBwcm9maXQgb3ZlciB5ZWFyc1xucXBsb3QobW92aWVzJHllYXIsIFxuICAgICAgbW92aWVzJHByb2ZpdCwgXG4gICAgICBkYXRhID0gbW92aWVzLCBcbiAgICAgIGdlb20gPSBjKFwicG9pbnRcIiwgXCJzbW9vdGhcIiksIFxuICAgICAgYWxwaGEgPSBJKDEgLyA1KSkifQ==

tương quan yếu

Giờ khi bạn đã thấy khoảng tin cậy và đường làm mượt hoạt động, bạn rút ra điều gì?

  • Thứ nhất, ở phần đầu biểu đồ, profit dường như tăng theo từng year.
  • Thứ hai, bạn nhận thấy vùng xám lệch khỏi đường làm mượt ban đầu khá lớn trong khi số điểm dữ liệu (quan sát) khá ít.
  • Thứ ba, khi đường tiến vào vùng có nhiều quan sát hơn, vùng xám thu hẹp và gần như ôm sát đường, rồi đường bắt đầu giảm ở những year sau.

Kết luận, vẽ khoảng tin cậy cùng với đường làm mượt cho phép ta thấy mức độ bất định đi kèm với đường hồi quy. Mức bất định đó tăng khi ít quan sát và giảm khi nhiều quan sát.

Điều này rất hữu ích để hình dung mối quan hệ giữa các biến thay đổi thế nào trong toàn bộ data frame và cho thấy mật độ quan sát ảnh hưởng ra sao tới đường vẽ.

Lưu ý là biểu đồ có thể hơi gây hiểu nhầm, vì khó phân biệt bằng mắt thường là tương quan dương hay âm.

Giờ hãy vẽ profit theo year giống như bạn đã vẽ votes so với reviews: chỉ cần thay “…..” trong từng tham số để year nằm trên trục x và profit trên trục y. Nhớ chỉ định data frame cho “data” nhé!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoXCJnZ3Bsb3QyXCIpXG5tb3ZpZXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL3MzLmFtYXpvbmF3cy5jb20vL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIikpXG5tb3ZpZXMkcHJvZml0IDwtIG1vdmllcyRncm9zcyAtIG1vdmllcyRidWRnZXRcbm9wdGlvbnMoc2NpcGVuID0gOTk5KSIsInNhbXBsZSI6IiMgUGxvdCB0aGUgeWVhcnMgb24gdGhlIHgtYXhpcywgcHJvZml0IG9uIHRoZSB5LWF4aXNcbnFwbG90KG1vdmllcyQuLi4uLiwgXG4gICAgICBtb3ZpZXMkLi4uLi4sIFxuICAgICAgZGF0YSA9IC4uLi4uLCBcbiAgICAgIGdlb20gPSBjKFwicG9pbnRcIiwgXCJzbW9vdGhcIiksIFxuICAgICAgbWV0aG9kID0gXCJsbVwiLCBcbiAgICAgIGFscGhhID0gSSgxIC8gNSksIFxuICAgICAgc2UgPSBGQUxTRSkiLCJzb2x1dGlvbiI6IiMgUGxvdCB0aGUgeWVhcnMgb24gdGhlIHgtYXhpcywgcHJvZml0IG9uIHRoZSB5LWF4aXNcbnFwbG90KG1vdmllcyR5ZWFyLCBcbiAgICAgIG1vdmllcyRwcm9maXQsIFxuICAgICAgZGF0YSA9IG1vdmllcywgXG4gICAgICBnZW9tID0gYyhcInBvaW50XCIsIFwic21vb3RoXCIpLCBcbiAgICAgIG1ldGhvZCA9IFwibG1cIiwgXG4gICAgICBhbHBoYSA9IEkoMSAvIDUpLCBcbiAgICAgIHNlID0gRkFMU0UpIn0=

tương quan âm

Nhìn lại ma trận tương quan, bạn thấy hệ số tương quan của profit và year là -0.1, có lẽ dễ hình dung hơn ở biểu đồ có đường hồi quy tốt nhất so với biểu đồ dùng đường fitted cong.

Kết nối mọi thứ

Giờ hãy xem một hàm mạnh khác trong GGally là ggpairs. Hàm này rất hay vì cho phép tạo một ma trận hiển thị hệ số tương quan của nhiều biến cùng với biểu đồ phân tán (kèm đường hồi quy tốt nhất và khoảng tin cậy) và biểu đồ mật độ.

Chỉ với một hàm, bạn có thể gói gọn mọi thứ trong hướng dẫn này một cách ngắn gọn và dễ hiểu.

Trong ô mã sau, chọn ba biến bạn thích nhất từ data frame (không cần lọc!), cắm vào và trải nghiệm!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoXCJnZ3Bsb3QyXCIpXG5saWJyYXJ5KFwiR0dhbGx5XCIpXG5tb3ZpZXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL3MzLmFtYXpvbmF3cy5jb20vL2Rjd29vZHMyNzE3L21vdmllcy5jc3ZcIikpXG5tb3ZpZXMkcHJvZml0IDwtIG1vdmllcyRncm9zcyAtIG1vdmllcyRidWRnZXRcbm9wdGlvbnMoc2NpcGVuID0gOTk5KSIsInNhbXBsZSI6IiMgUGx1ZyBpbiB5b3VyIHRocmVlIGZhdm9yaXRlIHZhcmlhYmxlcyBhbmQgdGlua2VyIGF3YXkhXG5nZ3BhaXJzKG1vdmllcywgXG4gICAgICAgIGNvbHVtbnMgPSBjKFwiLi4uLi5cIiwgXCIuLi4uLlwiLCBcIi4uLi4uXCIpLCBcbiAgICAgICAgdXBwZXIgPSBsaXN0KGNvbnRpbnVvdXMgPSB3cmFwKFwiY29yXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEwKSksIFxuICAgICAgICBsb3dlciA9IGxpc3QoY29udGludW91cyA9IFwic21vb3RoXCIpKSIsInNvbHV0aW9uIjoiIyBQbHVnIGluIHlvdXIgdGhyZWUgZmF2b3JpdGUgdmFyaWFibGVzIGFuZCB0aW5rZXIgYXdheSFcbmdncGFpcnMobW92aWVzLCBcbiAgICAgICAgY29sdW1ucyA9IGMoXCJjYXN0X2ZhY2Vib29rX2xpa2VzXCIsIFwiYnVkZ2V0XCIsIFwicHJvZml0XCIpLCBcbiAgICAgICAgdXBwZXIgPSBsaXN0KGNvbnRpbnVvdXMgPSB3cmFwKFwiY29yXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEwKSksIFxuICAgICAgICBsb3dlciA9IGxpc3QoY29udGludW91cyA9IFwic21vb3RoXCIpKSJ9

ma trận tương quan trong R

Như bạn đoán, có rất nhiều kịch bản mỗi loại biểu đồ là tối ưu – chìa khóa là học các kỹ thuật trực quan hóa sẵn có, cách dùng chúng, và ý nghĩa của kết quả!

Tiếp tục

Bạn đã đi qua rất nhiều nội dung trong hướng dẫn này, chúc mừng bạn đã hoàn thành đến cuối!

Hy vọng bạn có thể áp dụng các khái niệm này vào những hành trình phân tích của riêng mình! Đây thật sự là những nền tảng của khám phá dữ liệu trong R và còn rất nhiều thứ bạn có thể làm để hiểu dữ liệu tốt trước khi bắt đầu phân tích và mô hình hóa. Sao không nâng tầm nỗ lực của bạn và bắt đầu khóa Phân tích Dữ liệu Khám phá của DataCamp?

Trong lúc đó, tôi khuyến khích bạn ghé Kaggle và tìm một tập dữ liệu phong phú, thú vị để tự mình khám phá nếu bạn không muốn tiếp tục với tập movies!

Chủ đề
R
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem thêm