เมทริกซ์สหสัมพันธ์เพียร์สันและสเปียร์แมนใน R พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

การหาค่าสัมประสิทธิ์สหสัมพันธ์แบบ Pearson และ Spearman ใน R จะวัดว่าตัวแปรสองตัวเคลื่อนไหวไปในทิศทางเดียวกันอย่างแรงแค่ไหน โดยใช้ฟังก์ชัน cor() สำหรับตัวแปรคู่เดียว และใช้เมทริกซ์สหสัมพันธ์สำหรับตัวแปรหลายตัว บทแนะนำนี้จะเพิ่มการทดสอบนัยสำคัญด้วย Hmisc และแสดงผลลัพธ์ด้วยแผนที่ความร้อน GGally

  • 📐 ช่วงค่าสัมประสิทธิ์: ค่าความสัมพันธ์ทุกค่าจะอยู่ระหว่าง -1 และ 1 โดยที่ 0 หมายถึงไม่มีความสัมพันธ์เชิงเส้น และค่าสุดขั้วใดสุดขั้วหนึ่งหมายถึงความสัมพันธ์เชิงเส้นที่สมบูรณ์แบบ
  • 📈 วิธีเพียร์สัน: แบบจำลองพาราเมตริก วัดความสัมพันธ์เชิงเส้น และสมมติว่าตัวแปรต่อเนื่องมีการกระจายแบบปกติโดยประมาณ
  • 🔢 วิธีสเปียร์แมน: เป็นวิธีการที่ไม่ใช้พารามิเตอร์ ทำงานกับลำดับ และมีความทนทานต่อค่าผิดปกติ ข้อมูลที่มีการเบี่ยงเบน หรือข้อมูลเชิงลำดับ
  • 🧮 มุมมองแบบเมทริกซ์: cor(df) จะส่งคืนค่าสัมประสิทธิ์ของแต่ละคู่ และ as.dist() จะพิมพ์เฉพาะสามเหลี่ยมด้านล่างเท่านั้น
  • 🔬 ความสำคัญ: ใช้ cor.test() สำหรับคู่ข้อมูลเดียว หรือ rcorr() จาก Hmisc สำหรับเมทริกซ์ค่า p ทั้งหมด
  • 🎨 การสร้างภาพ: ฟังก์ชัน ggcorr() จะวาดแผนที่ความร้อน และฟังก์ชัน ggpairs() จะสร้างเมทริกซ์การกระจายและแผนภาพกระจายแบบเต็มรูปแบบ

เมทริกซ์สหสัมพันธ์ในอาร์

ความสัมพันธ์แบบไบวาเรียตในอาร์

ความสัมพันธ์แบบไบวาเรียตอธิบายความสัมพันธ์หรือความสัมพันธ์ระหว่างตัวแปรสองตัวใน R ในบทช่วยสอนนี้ เราจะพูดถึงแนวคิดเรื่องความสัมพันธ์และแสดงให้เห็นว่าสามารถใช้เพื่อวัดความสัมพันธ์ระหว่างตัวแปรสองตัวใน R ได้อย่างไร

ความสัมพันธ์ในการเขียนโปรแกรม R

มีสองวิธีหลักในการคำนวณความสัมพันธ์ระหว่างตัวแปรสองตัวในการเขียนโปรแกรม R:

  • เพียร์สัน: ความสัมพันธ์แบบพาราเมตริก
  • พลหอก: ความสัมพันธ์แบบไม่อิงพารามิเตอร์

เมทริกซ์สหสัมพันธ์เพียร์สันในอาร์

วิธีความสัมพันธ์แบบเพียร์สันมักใช้เป็นการตรวจสอบเบื้องต้นสำหรับความสัมพันธ์ระหว่างตัวแปรสองตัว

การขอ ค่าสัมประสิทธิ์สหสัมพันธ์เขียนด้วยตัว r ใช้วัดความแข็งแรงของ เชิงเส้น ความสัมพันธ์ระหว่างตัวแปรสองตัวคือ x และ y คำนวณได้ดังนี้:

เมทริกซ์สหสัมพันธ์เพียร์สันในอาร์

สีสดสวย

  • เมทริกซ์สหสัมพันธ์เพียร์สันในอาร์ คือค่าเบี่ยงเบนมาตรฐานของ x
  • เมทริกซ์สหสัมพันธ์เพียร์สันในอาร์ คือค่าเบี่ยงเบนมาตรฐานของ y

ความสัมพันธ์อยู่ระหว่าง -1 ถึง 1

  • ค่า r ที่ใกล้เคียงหรือเท่ากับ 0 หมายความว่ามีความสัมพันธ์เชิงเส้นระหว่าง x และ y น้อยมากหรือไม่มีเลย
  • ยิ่งค่า r เข้าใกล้ 1 หรือ -1 มากเท่าไร ความสัมพันธ์เชิงเส้นก็จะยิ่งแข็งแกร่งมากขึ้นเท่านั้น

คุณสามารถทดสอบว่าค่า r แตกต่างจากศูนย์หรือไม่โดยใช้สถิติ t ด้านล่าง โดยเปรียบเทียบกับค่าการแจกแจงแบบ Student ที่มีองศาอิสระ n – 2:

เมทริกซ์สหสัมพันธ์เพียร์สันในอาร์

สเปียร์แมนอันดับสหสัมพันธ์ในอาร์

การหาค่าสัมประสิทธิ์สหสัมพันธ์ตามลำดับ (Rank correlation) จะเรียงลำดับข้อมูลตามลำดับและคำนวณระดับความคล้ายคลึงกันระหว่างลำดับเหล่านั้น ข้อดีของการหาค่าสัมประสิทธิ์สหสัมพันธ์ตามลำดับคือมีความทนทานต่อค่าผิดปกติและไม่เกี่ยวข้องกับการกระจายตัวของข้อมูล นอกจากนี้ การหาค่าสัมประสิทธิ์สหสัมพันธ์ตามลำดับยังเป็นตัวเลือกที่เหมาะสมสำหรับตัวแปรเชิงลำดับอีกด้วย

ค่าสัมประสิทธิ์สหสัมพันธ์ลำดับของสเปียร์แมน ซึ่งเขียนแทนด้วยสัญลักษณ์ โร (rho) มีค่าตั้งแต่ -1 ถึง 1 โดยค่าที่ใกล้เคียงกับค่าสุดขั้วใดค่าหนึ่งแสดงถึงความสัมพันธ์แบบโมโนโทนิกที่แข็งแกร่ง วิธีการคำนวณมีดังนี้:

สเปียร์แมนอันดับสหสัมพันธ์ในอาร์

ตัวเศษคือค่าความแปรปรวนร่วมระหว่างอันดับของ x และ y และตัวส่วนคือผลคูณของค่าเบี่ยงเบนมาตรฐานของทั้งสองค่า

ใน R ทั้งสองค่าคำนวณได้ด้วยฟังก์ชัน cor() ซึ่งรับอาร์กิวเมนต์สามตัว ได้แก่ x, y และ method

cor(x, y, method)

ข้อโต้แย้ง:

  • x: เวกเตอร์แรก
  • y: เวกเตอร์ที่สอง
  • วิธี: สูตรที่ใช้คำนวณความสัมพันธ์ ค่าสตริงสามค่า:
    • “เพียร์สัน”
    • “เคนดัลล์”
    • “พลหอก”

สามารถเพิ่มอาร์กิวเมนต์ทางเลือกได้หากเวกเตอร์มีค่าหายไป: use = “complete.obs”

เราจะใช้ชุดข้อมูล BudgetUK ชุดข้อมูลนี้รายงานการจัดสรรงบประมาณของครัวเรือนชาวอังกฤษระหว่างปี 1980 ถึง 1982 มีข้อสังเกต 1519 รายการพร้อมคุณลักษณะ XNUMX ประการ ได้แก่:

  • อาหาร: แบ่งปันอาหาร แบ่งปันการใช้จ่าย
  • wfuel: แบ่งการใช้จ่ายน้ำมันเชื้อเพลิง
  • ผ้า: ส่วนแบ่งงบประมาณสำหรับการใช้จ่ายด้านเสื้อผ้า
  • วอลค: แบ่งปันการใช้จ่ายเครื่องดื่มแอลกอฮอล์
  • wtrans: แบ่งปันค่าใช้จ่ายในการขนส่ง
  • อย่างอื่น: ส่วนแบ่งของการใช้จ่ายสินค้าอื่นๆ
  • โทเท็ปป์: การใช้จ่ายครัวเรือนทั้งหมดเป็นปอนด์
  • เงินได้: รายได้สุทธิของครัวเรือนทั้งหมด
  • อายุ: อายุครัวเรือน
  • เด็ก ๆ: จำนวนบุตร

ตัวอย่าง

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)

Code คำอธิบาย

  • ก่อนอื่นเรานำเข้าข้อมูลและดูด้วยฟังก์ชันเหลือบ () จากไลบรารี dplyr
  • มี 3 ครัวเรือนที่รายงานรายได้ 500 ขึ้นไป ดังนั้นตัวกรอง (รายได้ < 500) จะลบครัวเรือนเหล่านั้นออก และจำนวนแถวจะลดลงจาก 1,519 เหลือ 1,516
  • เป็นเรื่องปกติในการแปลงตัวแปรทางการเงินในบันทึก ช่วยลดผลกระทบของค่าผิดปกติและลดความเบ้ในชุดข้อมูล

Output:

## 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, ...

เราสามารถคำนวณค่าสัมประสิทธิ์สหสัมพันธ์ระหว่างรายได้และตัวแปร wfood ได้ด้วยวิธี "pearson" และ "spearman"

cor(data$log_income, data$wfood, method = "pearson")

Output:

## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")

Output:

## [1] -0.2501252

ก่อนที่จะขยายแนวคิดนี้ไปใช้กับตัวแปรทุกคู่ เราควรทำความเข้าใจวิธีการอ่านค่าสัมประสิทธิ์ตัวเดียวให้ชัดเจนเสียก่อน

วิธีตีความค่าสัมประสิทธิ์สหสัมพันธ์

ค่าสัมประสิทธิ์จะมีประโยชน์ก็ต่อเมื่อคุณสามารถอธิบายความหมายของมันได้ แถบด้านล่างเป็นค่าที่อ่านได้ตามปกติ และเครื่องหมายจะถูกอ่านแยกต่างหากจากค่าความแรง

ค่าสัมบูรณ์ของ r ความแข็งแกร่งของความสัมพันธ์
เพื่อ 0.00 0.19 อ่อนมากหรือไม่มีเลย
เพื่อ 0.20 0.39 อ่อนแอ
เพื่อ 0.40 0.59 ปานกลาง
เพื่อ 0.60 0.79 แข็งแรง
เพื่อ 0.80 1.00 แข็งแกร่งมาก

ค่า -0.2467 ที่คำนวณได้ก่อนหน้านี้ระหว่าง log_income และ wfood จึงแสดงถึงความสัมพันธ์เชิงลบที่อ่อนแอ กล่าวคือ ครัวเรือนที่ร่ำรวยกว่าใช้จ่ายงบประมาณในส่วนของอาหารน้อยลงเล็กน้อย

มีข้อควรระวังสามประการที่ใช้กับสัมประสิทธิ์ทุกตัว

  • ความสัมพันธ์ไม่ใช่สาเหตุ ค่า r ที่สูงแสดงว่าตัวแปรทั้งสองเคลื่อนไหวไปพร้อมกัน ไม่ได้หมายความว่าตัวแปรหนึ่งเป็นสาเหตุของอีกตัวแปรหนึ่ง ตัวแปรที่สามซึ่งวัดไม่ได้มักจะเป็นตัวขับเคลื่อนทั้งสองตัวแปร
  • เพียร์สันมองเห็นแต่เส้นตรงเท่านั้น ความสัมพันธ์รูปตัว U ที่สมบูรณ์แบบจะให้ค่า r ที่ใกล้เคียงกับศูนย์ ควรพล็อตข้อมูลก่อนที่จะเชื่อถือตัวเลขเสมอ
  • ขนาดสำคัญกว่าความหมาย ด้วยจำนวนข้อมูล 1,516 ตัวอย่าง ค่าสัมประสิทธิ์ 0.06 อาจมีความสำคัญทางสถิติ แต่ในทางปฏิบัติก็อาจไม่มีความหมาย

วิธีทดสอบความสำคัญของความสัมพันธ์ด้วย cor.test()

cor() จะส่งคืนค่าสัมประสิทธิ์เท่านั้น สำหรับคู่ข้อมูลเดียว cor.test() จะเพิ่มค่า p และช่วงความเชื่อมั่นในการเรียกเพียงครั้งเดียว

cor.test(data$log_income, data$wfood, method = "pearson")

ผลลัพธ์ที่ได้มีสี่ส่วนที่น่าสนใจ

  1. t และ df: ค่าสถิติการทดสอบและระดับความเป็นอิสระ n – 2
  2. p-value: ความน่าจะเป็นที่จะเห็นค่าสัมประสิทธิ์ที่มีขนาดใหญ่เช่นนี้ หากค่าสหสัมพันธ์ที่แท้จริงเป็นศูนย์
  3. ช่วงความเชื่อมั่น 95 เปอร์เซ็นต์ช่วงค่าที่เป็นไปได้สำหรับความสัมพันธ์ที่แท้จริง หากไม่รวมศูนย์ แสดงว่าความสัมพันธ์นั้นมีนัยสำคัญในระดับนั้น
  4. การประมาณตัวอย่าง: ค่าสัมประสิทธิ์นั้นเอง ซึ่งเหมือนกับค่าที่ฟังก์ชัน cor() ส่งคืนทุกประการ

ฟังก์ชันเดียวกันนี้ใช้รันการทดสอบตามลำดับขั้น โดยเปลี่ยนค่าอาร์กิวเมนต์เพียงตัวเดียว:

# Spearman rank correlation with a p-value
cor.test(data$log_income, data$wfood, method = "spearman")

# One-sided test: is the correlation greater than zero?
cor.test(data$log_income, data$wfood, alternative = "greater")

ควรใช้แบบไหนในสถานการณ์ใด ใช้ cor.test() เมื่อคุณกำลังตรวจสอบคู่ข้อมูลเฉพาะคู่เดียว เพราะมันให้ช่วงความเชื่อมั่นซึ่ง rcorr() ไม่ได้แสดง ใช้ rcorr() จาก Hmisc ที่แสดงไว้ข้างต้น เมื่อคุณต้องการค่า p สำหรับเมทริกซ์ทั้งหมดในคราวเดียว โปรดทราบว่าการทดสอบหลายคู่ข้อมูลจะเพิ่มอัตราผลบวกเท็จ ดังนั้นให้ปรับค่า p ด้วย p.adjust(p_value, method = “BH”) ก่อนที่จะสรุปผลจากเมทริกซ์ขนาดใหญ่

เมทริกซ์สหสัมพันธ์ในอาร์

การหาความสัมพันธ์แบบสองตัวแปรเป็นจุดเริ่มต้นที่ดี แต่การพิจารณาแบบหลายตัวแปรจะให้ภาพรวมที่กว้างขึ้น เมทริกซ์สหสัมพันธ์ เป็นตารางสี่เหลี่ยมที่แสดงค่าสหสัมพันธ์แบบคู่ระหว่างตัวแปรทุกตัวกับตัวแปรอื่นๆ ทุกตัว

ฟังก์ชัน cor() ส่งกลับเมทริกซ์สหสัมพันธ์ ข้อแตกต่างเพียงอย่างเดียวกับความสัมพันธ์แบบไบวาเรียตคือเราไม่จำเป็นต้องระบุว่าตัวแปรใด ตามค่าเริ่มต้น R จะคำนวณความสัมพันธ์ระหว่างตัวแปรทั้งหมด

ไม่สามารถคำนวณค่าสหสัมพันธ์สำหรับตัวแปรประเภทแฟกเตอร์ได้ ดังนั้นให้ลบทุกคอลัมน์ที่เป็นประเภทจัดกลุ่มออกก่อนที่จะส่งเฟรมข้อมูลไปยังฟังก์ชัน cor()

เมทริกซ์สหสัมพันธ์มีความสมมาตร ซึ่งหมายความว่าค่าที่อยู่เหนือเส้นทแยงมุมจะมีค่าเดียวกันกับค่าด้านล่าง การแสดงครึ่งหนึ่งของเมทริกซ์จะมองเห็นได้ชัดเจนกว่า

children_fac ถูกยกเว้นเนื่องจาก cor() ไม่สามารถทำงานกับแฟกเตอร์ได้

# 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

Code คำอธิบาย

  • cor(data[, 1:9]): คำนวณเมทริกซ์สหสัมพันธ์บนคอลัมน์ตัวเลขทั้งเก้าคอลัมน์
  • รอบ(…, 2)ปัดเศษสัมประสิทธิ์ทุกตัวให้เหลือสองตำแหน่งทศนิยม
  • as.dist()พิมพ์เฉพาะส่วนสามเหลี่ยมด้านล่าง เนื่องจากเมทริกซ์มีความสมมาตร

Output:

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

ระดับความสำคัญ

ค่าสัมประสิทธิ์เพียงอย่างเดียวไม่ได้บอกว่าความสัมพันธ์นั้นมีความน่าเชื่อถือทางสถิติหรือไม่ ฟังก์ชัน rcorr() จากไลบรารี Hmisc จะส่งคืนค่า p-value สำหรับทุกคู่ เราสามารถดาวน์โหลดไลบรารีได้จาก คอนด้า และคัดลอกโค้ดเพื่อวางลงในเทอร์มินัล:

conda install -c r r-hmisc

rcorr() ต้องใช้ data frame ที่จะจัดเก็บเป็นเมทริกซ์ เราสามารถแปลงข้อมูลของเราให้เป็นเมทริกซ์ก่อนที่จะคำนวณเมทริกซ์สหสัมพันธ์ด้วยค่า 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

รายการวัตถุ mat_2 มีสามองค์ประกอบ:

  • r: เอาท์พุตของเมทริกซ์สหสัมพันธ์
  • n: จำนวนการสังเกต
  • P: ค่า p

เราสนใจองค์ประกอบที่สาม นั่นคือค่า p เป็นเรื่องปกติที่จะแสดงเมทริกซ์สหสัมพันธ์ด้วยค่า p แทนค่าสัมประสิทธิ์สหสัมพันธ์

p_value <-round(mat_2[["P"]], 3)
p_value

Code คำอธิบาย

  • mat_2[[“พี”]]: ค่า p จะถูกเก็บไว้ในองค์ประกอบที่เรียกว่า P
  • รอบ(mat_2[[“P”]], 3): ปัดเศษองค์ประกอบด้วยตัวเลขสามหลัก

Output:

           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

การแสดงภาพเมทริกซ์สหสัมพันธ์ใน R

แผนที่ความร้อนเป็นอีกวิธีหนึ่งในการอ่านเมทริกซ์ความสัมพันธ์ ไลบรารี GGally ขยายขีดความสามารถของ ggplot2 และสามารถติดตั้งได้จาก CRAN แทนที่จะใช้ conda:

install.packages("GGally")

การแสดงภาพเมทริกซ์สหสัมพันธ์

ไลบรารีประกอบด้วยฟังก์ชันต่างๆ เพื่อแสดงสถิติสรุป เช่น ความสัมพันธ์และการแจกแจงของตัวแปรทั้งหมดใน a เมทริกซ์.

ฟังก์ชัน ggcorr() มีอาร์กิวเมนต์มากมาย เราจะแนะนำเฉพาะข้อโต้แย้งที่เราจะใช้ในบทช่วยสอน:

ฟังก์ชัน ggcorr

ggcorr(df, method = c("pairwise", "pearson"),
  nbreaks = NULL, digits = 2, low = "#3B9AB2",
  mid = "#EEEEEE", high = "#F21A00",
  geom = "tile", label = FALSE,
  label_alpha = FALSE)

ข้อโต้แย้ง:

  • df: ชุดข้อมูลที่ใช้
  • วิธี:สูตรในการคำนวณความสัมพันธ์ โดยค่าเริ่มต้นจะคำนวณแบบคู่และเพียร์สัน
  • แบ่ง: ส่งกลับช่วงหมวดหมู่สำหรับการใช้สีของสัมประสิทธิ์ ตามค่าเริ่มต้น ไม่มีการหยุดพักและการไล่ระดับสีจะต่อเนื่องกัน
  • ตัวเลข: ปัดเศษค่าสัมประสิทธิ์สหสัมพันธ์ ตามค่าเริ่มต้น ให้ตั้งค่าเป็น 2
  • ต่ำ: ควบคุมระดับสีล่าง
  • ตรงกลาง: ควบคุมระดับกลางของสี
  • สูง: ควบคุมระดับสูงของสี
  • เรขาคณิต: ควบคุมรูปร่างของอาร์กิวเมนต์ทางเรขาคณิต ตามค่าเริ่มต้น "ไทล์"
  • ฉลาก: ค่าบูลีน แสดงหรือไม่ติดฉลาก ตามค่าเริ่มต้น ให้ตั้งค่าเป็น "FALSE"

แผนที่ความร้อนพื้นฐาน

พล็อตพื้นฐานที่สุดของแพ็คเกจคือแผนที่ความร้อน คำอธิบายแผนภูมิแสดงสีแบบไล่ระดับจาก -1 ถึง 1 โดยสีร้อนแสดงถึงความสัมพันธ์เชิงบวกที่ชัดเจน และสีเย็นแสดงถึงความสัมพันธ์เชิงลบ

library(GGally)
ggcorr(data)

Code คำอธิบาย

  • ggcorr (ข้อมูล): จำเป็นต้องมีอาร์กิวเมนต์เดียวเท่านั้น ซึ่งก็คือชื่อเฟรมข้อมูล ตัวแปรระดับปัจจัยไม่รวมอยู่ในโครงเรื่อง

Output:

แผนที่ความร้อนพื้นฐาน

การเพิ่มการควบคุมลงในแผนที่ความร้อน

เราสามารถเพิ่มการควบคุมเพิ่มเติมให้กับกราฟได้:

ggcorr(data,
    nbreaks = 6,
    low = "steelblue",
    mid = "white",
    high = "darkred",
    geom = "circle")

Code คำอธิบาย

  • nbreaks=6: ทำลายตำนาน 6 อันดับ
  • ต่ำ = “สตีลบลู”: ใช้สีอ่อนกว่าสำหรับความสัมพันธ์เชิงลบ
  • กลาง = “สีขาว”: ใช้สีขาวสำหรับความสัมพันธ์ในระดับกลาง
  • สูง = “เข้ม”: ใช้สีเข้มเพื่อความสัมพันธ์เชิงบวก
  • geom = “วงกลม”:ใช้วงกลมเป็นรูปร่างของหน้าต่างในแผนที่ความร้อน ขนาดของวงกลมจะแปรผันตามค่าสัมบูรณ์ของความสัมพันธ์

Output:

การเพิ่มการควบคุมลงในแผนที่ความร้อน

การเพิ่มป้ายกำกับลงในแผนที่ความร้อน

GGally ช่วยให้เราเพิ่มป้ายกำกับภายในหน้าต่างได้:

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

Code คำอธิบาย

  • ป้ายกำกับ = จริง: เพิ่มค่าสัมประสิทธิ์สหสัมพันธ์ภายในแผนที่ความร้อน
  • สี = “สีเทา50”: เลือกสี เช่น สีเทา
  • label_size = 3: กำหนดขนาดของฉลากเท่ากับ 3

Output:

การเพิ่มป้ายกำกับลงในแผนที่ความร้อน

ฟังก์ชัน ggpairs

ไลบรารี GGally ยังมีฟังก์ชัน ggpairs() ซึ่งส่งคืนเมทริกซ์ของกราฟ สำหรับตัวแปรที่เลือก k ตัว ผลลัพธ์จะเป็นตารางขนาด ak x k โดยเส้นทแยงมุมแสดงการกระจายของแต่ละตัวแปร ขณะที่แผงด้านบนและด้านล่างของเส้นทแยงมุมสามารถแสดงผลการคำนวณที่แตกต่างกันได้ ไวยากรณ์คือ:

ggpairs(df, columns = 1:ncol(df), title = NULL,
    upper = list(continuous = "cor"),
    lower = list(continuous = "smooth"),
    mapping = NULL)		

ข้อโต้แย้ง:

  • df: ชุดข้อมูลที่ใช้
  • คอลัมน์: เลือกคอลัมน์ที่จะวาดโครงเรื่อง
  • ชื่อเรื่อง: รวมชื่อเรื่อง
  • บน: ควบคุมกล่องด้านบนเส้นทแยงมุมของกราฟ จำเป็นต้องระบุประเภทของการคำนวณหรือกราฟที่จะส่งคืน หาก continuous = “cor” เราจะขอให้ R คำนวณค่าสหสัมพันธ์ โปรดทราบว่า อาร์กิวเมนต์ต้องเป็นลิสต์ มีอาร์กิวเมนต์อื่นๆ ให้เลือกใช้ โปรดดูที่... เอกสารประกอบ GGally เพื่อสอบถามรายละเอียดเพิ่มเติมได้ค่ะ
  • ลด:ควบคุมกล่องที่อยู่ด้านล่างแนวทแยง
  • แผนที่ping: บ่งบอกถึงความสวยงามของกราฟ ตัวอย่างเช่น เราสามารถคำนวณกราฟสำหรับกลุ่มต่างๆ

การวิเคราะห์แบบสองตัวแปรด้วย ggpair ร่วมกับกลุ่มping

กราฟถัดไปแสดงข้อมูลสามรายการ:

  • เมทริกซ์สหสัมพันธ์ระหว่างตัวแปร log_totexp, log_income, อายุ และ wtrans จัดกลุ่มตามว่าครัวเรือนมีลูกหรือไม่
  • พล็อตการกระจายของตัวแปรแต่ละตัวตามกลุ่ม
  • แสดงแผนภูมิกระจายพร้อมแนวโน้มตามกลุ่ม
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))

Code คำอธิบาย

  • คอลัมน์ = c("log_totexp", "log_income", "อายุ", "wtrans"): เลือกตัวแปรที่จะแสดงในกราฟ
  • title = “การวิเคราะห์ Bivariate ของรายจ่ายรายรับโดยครัวเรือนอังกฤษ”: เพิ่มชื่อเรื่อง
  • บน = รายการ (): ควบคุมส่วนบนของกราฟ คือเหนือเส้นทแยงมุม
  • ต่อเนื่อง = ห่อ ("คร", ขนาด = 3)): คำนวณค่าสัมประสิทธิ์สหสัมพันธ์ เราล้อมอาร์กิวเมนต์ต่อเนื่องไว้ภายในฟังก์ชัน wrap() เพื่อควบคุมความสวยงามของกราฟ ( เช่น ขนาด = 3) -lower = list(): ควบคุมส่วนล่างของกราฟ คือด้านล่างเส้นทแยงมุม
  • ต่อเนื่อง = ห่อ ("เรียบ",อัลฟา = 0.3,ขนาด=0.1): เพิ่มแผนภูมิกระจายที่มีแนวโน้มเป็นเส้นตรง เราล้อมอาร์กิวเมนต์ต่อเนื่องไว้ภายในฟังก์ชัน wrap() เพื่อควบคุมความสวยงามของกราฟ ( เช่น size=0.1, alpha=0.3)
  • แผนที่ping = aes(color = children_fac): แบ่งแต่ละแผงตาม children_fac ซึ่งเป็นปัจจัยเรียงลำดับที่ระบุว่า “ไม่มี” สำหรับครัวเรือนที่ไม่มีเด็ก และ “มี” สำหรับครัวเรือนที่มีเด็ก

Output:

การวิเคราะห์แบบสองตัวแปรด้วย ggpair ร่วมกับ Grouping

การวิเคราะห์แบบสองตัวแปรด้วย ggpair พร้อมกลุ่มย่อยping

กราฟด้านล่างนี้แตกต่างออกไปเล็กน้อย เราเปลี่ยนตำแหน่งของแผนที่ping ภายในอาร์กิวเมนต์ด้านบน

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

Code คำอธิบาย

  • รหัสเดียวกันกับตัวอย่างก่อนหน้า ยกเว้น:
  • แผนที่ping = aes(color = children_fac): ย้ายรายการไปไว้ด้านบน = list() เราต้องการเฉพาะการคำนวณที่เรียงซ้อนตามกลุ่มในส่วนบนของกราฟเท่านั้น

Output:

การวิเคราะห์แบบสองตัวแปรด้วย ggpair ร่วมกับ Partial Groupping

การหาความสัมพันธ์ใน R: ประเด็นสำคัญและข้อมูลอ้างอิงฟังก์ชัน

  • ความสัมพันธ์แบบไบวาเรียตอธิบายความสัมพันธ์หรือความสัมพันธ์ระหว่างตัวแปรสองตัวใน R
  • มีสองวิธีหลักในการคำนวณความสัมพันธ์ระหว่างตัวแปรสองตัวใน การเขียนโปรแกรม R: เพียร์สันและสเปียร์แมน
  • วิธีความสัมพันธ์แบบเพียร์สันมักใช้เป็นการตรวจสอบเบื้องต้นสำหรับความสัมพันธ์ระหว่างตัวแปรสองตัว
  • ความสัมพันธ์ของอันดับจะเรียงลำดับการสังเกตตามอันดับ และคำนวณระดับของความคล้ายคลึงกันระหว่างอันดับ
  • ค่าสัมประสิทธิ์สหสัมพันธ์ลำดับของสเปียร์แมนมีค่าตั้งแต่ -1 ถึง 1 โดยค่าที่อยู่ใกล้ค่าสุดขั้วใดค่าหนึ่งแสดงถึงความสัมพันธ์แบบโมโนโทนิกที่แข็งแกร่ง
  • เมทริกซ์สหสัมพันธ์คือตารางสี่เหลี่ยมที่เก็บค่าสหสัมพันธ์ระหว่างตัวแปรแต่ละตัวเป็นคู่ๆ
  • ค่า p-value จะบอกคุณว่าความสัมพันธ์ที่สังเกตได้นั้นแตกต่างจากศูนย์ในเชิงสถิติหรือไม่

ฟังก์ชันความสัมพันธ์ทุกฟังก์ชันที่ใช้ในบทเรียนนี้แสดงไว้ด้านล่าง:

ห้องสมุด วัตถุประสงค์ วิธี Code
ฐาน ความสัมพันธ์แบบสองตัวแปร เพียร์สัน
cor(dfx2, method = "pearson")
ฐาน ความสัมพันธ์แบบสองตัวแปร พลหอก
cor(dfx2, method = "spearman")
ฐาน ความสัมพันธ์หลายตัวแปร เพียร์สัน
cor(df, method = "pearson")
ฐาน ความสัมพันธ์หลายตัวแปร พลหอก
cor(df, method = "spearman")
มช ค่า P -
rcorr(as.matrix(data[,1:9]))[["P"]]
จีจีแอลลี่ แผนที่ความร้อน -
ggcorr(df)
จีจีแอลลี่ เมทริกซ์พล็อตหลายตัวแปร -
ggpairs(df, columns = c("x1", "x2"))

คำถามที่พบบ่อย

ใช้การประมาณค่าแบบสเปียร์แมนเมื่อความสัมพันธ์เป็นแบบโมโนโทนิกแต่ไม่ใช่เชิงเส้น เมื่อมีค่าผิดปกติ หรือเมื่อตัวแปรเป็นข้อมูลเชิงอันดับ ส่วนการประมาณค่าแบบเพียร์สันนั้นสมมติว่าข้อมูลเป็นเชิงเส้นและมีการกระจายแบบปกติโดยประมาณ

ค่า Kendall tau นับจำนวนคู่ที่สอดคล้องกันและไม่สอดคล้องกัน แทนที่จะจัดอันดับความแตกต่าง วิธีนี้มีความแม่นยำกว่า Spearman ในกรณีตัวอย่างขนาดเล็กที่มีค่าซ้ำกันจำนวนมาก แต่ใช้เวลาคำนวณนานกว่าในชุดข้อมูลขนาดใหญ่

ไม่ ค่าสัมประสิทธิ์สหสัมพันธ์วัดเพียงการเคลื่อนไหวร่วมกันเท่านั้น ตัวแปรแทรกซ้อนสามารถส่งผลต่อทั้งสองอนุกรม และไม่สามารถระบุทิศทางของผลกระทบที่แท้จริงได้จากค่าสัมประสิทธิ์เพียงอย่างเดียว

เมทริกซ์ความสัมพันธ์ช่วยเปิดเผยคุณลักษณะที่ซ้ำซ้อนก่อนการฝึกฝน เนื่องจากตัวทำนายที่มีความสัมพันธ์สูงสองตัวจะเพิ่มข้อมูลเพียงเล็กน้อยและทำให้แบบจำลองเชิงเส้นไม่เสถียร ทีม AI ยังใช้เมทริกซ์เหล่านี้เพื่อระบุการรั่วไหลของข้อมูลจากตัวแปรเป้าหมายอีกด้วย

ใช่แล้ว ผู้ช่วย AI สามารถสรุปได้ว่าคู่ใดเกินเกณฑ์ที่กำหนด แนะนำว่าควรตัดคุณลักษณะที่ซ้ำซ้อนใดออก และอธิบายสีของแผนที่ความร้อน ตรวจสอบความถูกต้องของแต่ละข้อกล่าวอ้างกับผลลัพธ์ของ cor.test() ของคุณเองก่อนดำเนินการใดๆ

สรุปโพสต์นี้ด้วย: