มันอาจดูเหมือนเคาน์เตอร์ง่าย แต่ใช้วิธีการที่คุณอธิบายไม่สมเหตุสมผล (ใช้ถ้อยคำของคุณฉันอยากจะเขียน "สามารถนำไปสู่ผลลัพธ์ที่แตกต่างจากที่ตั้งใจ") และหนึ่งไม่ควรทำ: ความเสี่ยงของ มันไม่ทำงานเป็นผลสืบเนื่องและนอกจากนี้ยังมีทางเลือกที่ง่ายกว่าปลอดภัยกว่าและสร้างขึ้นได้ดีกว่าโดยไม่มีค่าใช้จ่ายเพิ่มเติม
อันดับแรกเป็นความจริงที่ว่าหากมีค่าผิดปกติเพียงครั้งเดียวคุณจะพบว่าใช้ค่าโพรซีเดอร์ที่คุณแนะนำในที่สุด แต่โดยทั่วไป (เมื่อมีข้อมูลมากกว่าหนึ่งค่าเดียว) อัลกอริทึมที่คุณแนะนำแบ่งออกอย่างสมบูรณ์ในแง่ของความเป็นไปได้ที่จะนำคุณไปสู่การปฏิเสธจุดข้อมูลที่ดีในฐานะที่เป็นค่าเริ่มต้น ด้วยผลที่ตามมาอาจเป็นความหายนะ
ด้านล่างนี้ฉันให้ตัวอย่างเชิงตัวเลขอย่างง่าย ๆ ซึ่งกฎที่คุณเสนอแบ่งไว้แล้วฉันเสนอทางเลือกที่ปลอดภัยและเป็นที่ยอมรับมากขึ้น แต่ก่อนหน้านี้ฉันจะอธิบายก) สิ่งที่ผิดกับวิธีที่คุณเสนอและข) สิ่งที่ต้องการ ทางเลือกที่จะเป็น
ในสาระสำคัญคุณไม่สามารถใช้ระยะห่างจากการออกจากค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของข้อมูลของคุณเพื่อตรวจหาค่าผิดปกติได้อย่างน่าเชื่อถือเนื่องจากค่าประมาณที่คุณใช้ (ค่าเฉลี่ยค่าเบี่ยงเบนมาตรฐานและส่วนเบี่ยงเบนมาตรฐาน) outliers: สิ่งนี้เรียกว่าเอฟเฟกต์การพราง
โดยสรุปวิธีที่ง่ายที่สุดวิธีหนึ่งในการตรวจสอบค่าผิดปกติคือใช้แนวคิดทั่วไปที่คุณแนะนำ (ระยะทางจากตำแหน่งและมาตราส่วน) แต่แทนที่ตัวประมาณที่คุณใช้ (เว้นค่าเฉลี่ยหนึ่งค่า, SD) โดยค่าที่คาดเดาได้ - เช่นค่าประมาณ ออกแบบมาให้มีความอ่อนไหวต่อการถูกครอบงำโดยผู้ผิดกฎหมาย
ลองพิจารณาตัวอย่างนี้ซึ่งฉันเพิ่ม 3 ค่าผิดพลาดไปที่การสังเกตของแท้ 47 รายการซึ่งดึงมาจากค่าปกติ 0,1:
n <- 50
set.seed(123) # for reproducibility
x <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10
รหัสด้านล่างนี้คำนวณดัชนีการอ้างอิงโดยอ้างอิงจากค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน (เช่นวิธีที่คุณแนะนำ)
out_1 <- rep(NA,n)
for(i in 1:n){ out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i]) }
และรหัสนี้สร้างพล็อตที่คุณเห็นด้านล่าง
plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)
Image 1 แสดงค่าของดัชนีความห่างไกลของคุณเป็นฟังก์ชันของค่าของการสังเกต (ห่างไกลจากค่าผิดปกติอยู่นอกช่วงของพล็อตนี้ แต่อีกสองแสดงเป็นจุดสีแดง) ที่คุณสามารถดูยกเว้นมากที่สุดคนหนึ่งที่รุนแรงดัชนี outlyingness สร้างเป็นที่คุณแนะนำจะล้มเหลวที่จะเปิดเผยค่าผิดปกติ: แน่นอนที่สองและสาม (จ้า) ค่าผิดปกติในขณะนี้ยังมีค่า (ดัชนี outlyingness ของคุณ) มีขนาดเล็กกว่าทั้งหมดการสังเกตุที่แท้จริง! ... ภายใต้แนวทางที่คุณแนะนำใครจะรักษาค่าผิดปกติสองอย่างนี้ไว้ในชุดการสังเกตของแท้ทำให้คุณใช้การสังเกต 49 อย่างที่เหลือราวกับว่าพวกเขามาจากกระบวนการที่เป็นเนื้อเดียวกัน ประมาณการของค่าเฉลี่ยและ SD บนพื้นฐานเหล่านี้ 49 จุดข้อมูลที่ 0.45 และ 2.32 คำอธิบายที่ดีมากของทั้งสองเป็นส่วนหนึ่งของตัวอย่างของคุณ!
xผมX
O ( xผม, X) = | xผม- med ( X)) |บ้า (X)
med (X)Xบ้า (X)
ใน R ดัชนีความห่างไกลอันดับสองนี้สามารถคำนวณได้เป็น:
out_2 <- abs( x-median(x) )/mad(x)
และพล็อต (เหมือนก่อน) โดยใช้:
plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)
Image 2 แปลงค่าของดัชนีความห่างไกลทางเลือกนี้สำหรับชุดข้อมูลเดียวกัน อย่างที่คุณเห็นตอนนี้ค่าผิดปกติทั้งสามถูกเปิดเผยอย่างชัดเจน นอกจากนี้กฎการตรวจหาค่าผิดปกตินี้มีคุณสมบัติทางสถิติที่กำหนดไว้แล้ว สิ่งนี้นำไปสู่การใช้กฎที่ถูกตัดออก ตัวอย่างเช่นหากส่วนของแท้ของข้อมูลสามารถสันนิษฐานได้ว่ามาจากการกระจายแบบสมมาตรพร้อมโมเมนต์วินาทีที่ จำกัด คุณสามารถปฏิเสธจุดข้อมูลทั้งหมดที่
| xผม- med ( X)) |บ้า (X)> 3.5
เป็นค่าผิดปกติ ในตัวอย่างข้างต้นการใช้กฎนี้จะนำคุณไปสู่การตั้งค่าสถานะการสังเกตอย่างถูกต้อง 1,2 และ 3 การปฏิเสธสิ่งเหล่านี้ค่าเฉลี่ยและค่า sd ของการสังเกตที่เหลืออยู่คือ 0.021 และ 0.93 โดยละเอียดซึ่งอธิบายส่วนของแท้ได้ดีกว่ามาก !