วิธีใช้ฟังก์ชัน jitter ใน r สำหรับ point cloud


บทช่วยสอนนี้จะอธิบายเวลาและวิธีใช้ฟังก์ชัน jitter ใน R สำหรับ point cloud

เมื่อใดควรใช้ความกระวนกระวายใจ

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

 #define vectors of heights and weights
weights <- runif(100, 160, 240) 
heights <- (weights/3) + rnorm(100)

#create data frame of heights and weights
data <- as.data.frame(cbind(weights, heights))

#view first six rows of data frame
head(data)

# weights heights
#1 170.8859 57.20745
#2 183.2481 62.01162
#3 235.6884 77.93126
#4 231.9864 77.12520
#5 200.8562 67.93486
#6 169.6987 57.54977
#create scatterplot of heights vs weights
plot(data$weights, data$heights, pch = 16, col = 'steelblue')

อย่างไรก็ตาม บางครั้งเราอาจต้องการเห็นภาพความสัมพันธ์ระหว่างตัวแปรต่อเนื่องกับตัวแปรที่ เกือบ ต่อเนื่องอีกตัวหนึ่ง

ตัวอย่างเช่น สมมติว่าเรามีชุดข้อมูลต่อไปนี้ที่แสดงจำนวนเกมที่ผู้เล่นบาสเก็ตบอลเริ่มเล่นในช่วง 10 เกมแรกของฤดูกาล พร้อมด้วยคะแนนต่อเกมโดยเฉลี่ย:

 #create data frame
games_started <- sample(1:10, 300, TRUE)
points_per_game <- 3*games_started + rnorm(300)
data <- as.data.frame(cbind(games_started, points_per_game))

#view first six rows of data frame
head(data)

# games_started points_per_game
#1 9 25.831554
#2 9 26.673983
#3 10 29.850948
#4 4 12.024353
#5 4 11.534192
#6 1 4.383127

คะแนนต่อเกม เป็นตัวแปรต่อเนื่อง แต่ เกมที่เริ่ม เป็นตัวแปรที่ไม่ต่อเนื่อง หากเราพยายามสร้างแผนภาพกระจายของตัวแปรทั้งสองนี้จะมีลักษณะดังนี้:

 #create scatterplot of games started vs average points per game
plot(data$games_started, data$points_per_game, pch = 16, col = 'steelblue')

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

เมื่อใช้ฟังก์ชัน Jitter เราจะสามารถเพิ่ม “สัญญาณรบกวน” ให้กับ ชุดตัวแปรแกน X ที่ถูกโยนออกไป เพื่อให้เรามองเห็นแต่ละจุดบนโครงเรื่องได้ชัดเจนยิ่งขึ้น:

 #add jitter to games started
plot( jitter (data$games_started), data$points_per_game, pch = 16, col = 'steelblue')

เราสามารถเลือกเพิ่มอาร์กิวเมนต์ตัวเลขลงใน jitter เพื่อเพิ่มสัญญาณรบกวนให้กับข้อมูลมากยิ่งขึ้น:

 #add jitter to games started
plot( jitter (data$games_started, 2 ), data$points_per_game, pch = 16, col = 'steelblue')

อย่างไรก็ตาม เราต้องระวังอย่าเพิ่มความกระวนกระวายใจมากเกินไป เนื่องจากอาจทำให้ข้อมูลต้นฉบับบิดเบือนได้มากเกินไป:

 plot( jitter (data$games_started, 20 ), data$points_per_game, pch = 16, col = 'steelblue')

การกระวนกระวายใจช่วยให้มองเห็นข้อมูลได้ดีขึ้น

ความไม่เสถียรมีประโยชน์อย่างยิ่งเมื่อระดับใดระดับหนึ่งของตัวแปรแยกมีค่ามากกว่าระดับอื่นๆ จำนวนมาก

ตัวอย่างเช่น ในชุดข้อมูลต่อไปนี้ มีผู้เล่นบาสเกตบอลสามร้อยคนที่เริ่มเกม 2 เกมจาก 5 เกมแรกของฤดูกาล แต่มีผู้เล่นเพียงประมาณ 100 คนที่เริ่มเกม 1, 3, 4 หรือ 5 เกม:

 games_started <- sample(1:5, 100, TRUE)
points_per_game <- 3*games_started + rnorm(100)
data <- as.data.frame(cbind(games_started, points_per_game))

games_twos <- rep(2, 200)
points_twos <- 3*games_twos + rnorm(200)
data_twos <- as.data.frame(cbind(games_twos, points_twos))
names(data_twos) <- c('games_started', 'points_per_game')

all_data <- rbind(data, data_twos)

เมื่อเราเห็นภาพจำนวนเกมที่เล่นสัมพันธ์กับคะแนนเฉลี่ยต่อเกม เราสามารถพูดได้ว่ามีผู้เล่นมากกว่าที่เล่น 2 เกม แต่ก็ยากที่จะบอกได้อย่างชัดเจน ว่ามีผู้เล่นอีกกี่คน ที่เล่น 2 เกม:

 plot(all_data$games_started, all_data$points_per_game, pch = 16, col = 'steelblue')

อย่างไรก็ตาม เมื่อเราเพิ่ม jitter ไปที่ จุดเริ่มต้นของตัวแปรเกม เราจะเห็นว่ามีผู้เล่นเพิ่มเติมกี่คนที่เริ่มเกม 2 เกม:

 plot( jitter (all_data$games_started), all_data$points_per_game,
     pch=16, col='steelblue')

การเพิ่มปริมาณความกระวนกระวายใจเล็กน้อยเผยให้เห็นความแตกต่างนี้มากยิ่งขึ้น:

 plot( jitter (all_data$games_started, 1.5 ), all_data$points_per_game,
     pch=16, col='steelblue')

กระวนกระวายใจสำหรับการแสดงภาพเท่านั้น

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

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

ดังนั้น jitter จึงมีไว้เพื่อใช้สำหรับการแสดงข้อมูลเป็นภาพเท่านั้น ไม่ใช่เพื่อการวิเคราะห์ข้อมูล

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *