ค่าเบี่ยงเบนมาตรฐานของการสังเกตที่ถูกทำให้โค้งงอ


24

ฉันมีชุดข้อมูลของการสังเกตตัวอย่างเก็บไว้เป็นจำนวนภายในช่วงถังขยะ เช่น:

min/max  count
40/44    1
45/49    2
50/54    3
55/59    4
70/74    1

ทีนี้การหาค่าประมาณโดยเฉลี่ยจากสิ่งนี้ค่อนข้างตรงไปตรงมา เพียงใช้ค่าเฉลี่ย (หรือค่ามัธยฐาน) ของแต่ละช่วง bin เป็นค่าสังเกตและนับเป็นน้ำหนักและหาค่าเฉลี่ยถ่วงน้ำหนัก:

x¯=1i=1Nwii=1Nwixi

สำหรับกรณีทดสอบของฉันนี่ให้ฉัน 53.82

คำถามของฉันตอนนี้คือวิธีที่ถูกต้องในการหาค่าเบี่ยงเบนมาตรฐาน (หรือความแปรปรวน) คืออะไร?

จากการค้นหาของฉันฉันพบคำตอบหลายข้อ แต่ฉันไม่แน่ใจว่ามีชุดไหนที่เหมาะสมกับชุดข้อมูลของฉัน ผมสามารถที่จะหาสูตรต่อไปนี้ทั้งในคำถามที่นี่อีกและเอกสาร NIST สุ่ม

s2=i=1Nwi(xix¯)2(M1)Mi=1Nwi

ซึ่งให้ค่าเบี่ยงเบนมาตรฐาน 8.35 สำหรับกรณีทดสอบของฉัน อย่างไรก็ตามบทความ Wikipedia เกี่ยวกับการถ่วงน้ำหนักให้ทั้งสูตร:

s2=i=1Nwi(i=1Nwi)2i=1Nwi2i=1Nwi(xix¯)2

และ

s2=1(i=1Nwi)1i=1Nwi(xix¯)2

ซึ่งให้ค่าเบี่ยงเบนมาตรฐานของ 8.66 และ 7.83 ตามลำดับสำหรับกรณีทดสอบของฉัน

ปรับปรุง

ขอบคุณ @whuber ที่แนะนำการค้นหาการแก้ไขของ Sheppard และความคิดเห็นที่เป็นประโยชน์ของคุณเกี่ยวข้องกับพวกเขา น่าเสียดายที่ฉันมีช่วงเวลาที่ยากลำบากในการทำความเข้าใจกับทรัพยากรที่ฉันสามารถหาได้ (และฉันไม่สามารถหาตัวอย่างที่ดีได้) เพื่อสรุปแม้ว่าฉันเข้าใจว่าต่อไปนี้เป็นค่าประมาณของความแปรปรวน:

s2=1i=1Nwii=1Nwi(xix¯)2

ฉันยังเข้าใจด้วยว่าการแก้ไขมาตรฐานส่วนใหญ่สำหรับอคตินั้นเป็นตัวอย่างแบบสุ่มโดยตรงของการแจกแจงปกติ ดังนั้นฉันเห็นปัญหาที่อาจเกิดขึ้นสองประการสำหรับฉัน:

  1. นี่คือตัวอย่างแบบสุ่ม binned (ซึ่งฉันค่อนข้างแน่ใจว่าเป็นที่มาของการแก้ไขของ Sheppard)
  2. ไม่ทราบว่าข้อมูลนั้นมีไว้เพื่อการแจกแจงแบบปกติหรือไม่ (ซึ่งฉันถือว่าไม่เป็นเช่นนั้นซึ่งฉันค่อนข้างแน่ใจว่าจะทำให้การแก้ไขของ Sheppard เป็นโมฆะ)

ดังนั้นคำถามที่อัปเดตของฉันคือ; อะไรคือวิธีที่เหมาะสมสำหรับการจัดการอคติที่กำหนดโดยสูตร "เบี่ยงเบนมาตรฐาน" แบบง่าย ๆ / ถ่วงน้ำหนักส่วนเบี่ยงเบนมาตรฐานในการแจกแจงแบบไม่ปกติ โดยเฉพาะอย่างยิ่งเกี่ยวกับข้อมูลที่ถูก binned

หมายเหตุ:ฉันกำลังใช้คำต่อไปนี้:

  • s2คือความแปรปรวนแบบถ่วงน้ำหนัก
  • Nคือจำนวนการสังเกต (เช่นจำนวนถังขยะ)
  • Mคือจำนวนน้ำหนักที่ไม่ใช่ศูนย์ (เช่นจำนวนถังขยะที่มีจำนวน)
  • wiคือน้ำหนัก (เช่นจำนวน)
  • xiเป็นข้อสังเกต (เช่น bin หมายถึง)
  • x¯เป็นค่าเฉลี่ยถ่วงน้ำหนัก

5
Google "การแก้ไขของ Sheppard" สำหรับโซลูชันมาตรฐานสำหรับปัญหานี้
whuber

@whuber ฉันกลัว google-foo ของฉันทำให้ฉันล้มเหลว ... ฉันไม่พบวิธีการใช้การแก้ไขของ Sheppard มากนัก เท่าที่ฉันสามารถบอกได้มันเป็นการแก้ไขธรรมชาติของข้อมูลที่ถูก binned และในกรณีทดสอบของฉันจะใช้เช่นโดยที่คือขนาด ของถังขยะ (ในกรณีทดสอบของฉัน, 4) ถูกต้องหรือไม่ ในกรณีใด ๆ สิ่งที่ฉันกำลังหายังดูเหมือนจะไม่ช่วยฉันด้วยการคำนวณ{2} s2c212cs2
chezy525

การเข้าชมครั้งที่สองในการค้นหา Googleของฉันมีสูตรที่ชัดเจน (สมการที่ 9)
whuber

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

การแก้ไขของ Sheppard นั้นไม่ถือว่าเป็นเรื่องปกติ
Glen_b -Reinstate Monica

คำตอบ:


18

คำตอบนี้นำเสนอโซลูชั่นที่สอง: การแก้ไขของ Sheppard และการประเมินความเป็นไปได้สูงสุด ทั้งสองตกลงอย่างใกล้ชิดกับการประมาณค่าเบี่ยงเบนมาตรฐาน:สำหรับครั้งแรกและสำหรับวินาที (เมื่อปรับให้ใกล้เคียงกับตัวประมาณ "ไม่เอนเอียง" ตามปกติ)7.707.69


การแก้ไขของ Sheppard

"การแก้ไขของ Sheppard" เป็นสูตรที่ปรับช่วงเวลาที่คำนวณจากข้อมูลที่ถูกขัดจังหวะ (เช่นนี้) ที่

  • ข้อมูลถูกสันนิษฐานว่าควบคุมโดยการแจกแจงที่สนับสนุนในช่วงเวลา จำกัด[a,b]

  • ช่วงเวลานั้นถูกแบ่งตามลำดับเป็นความกว้างทั่วไปเท่ากับที่ค่อนข้างเล็ก (ไม่มีถังขยะที่มีสัดส่วนของข้อมูลทั้งหมด)h

  • การกระจายมีฟังก์ชั่นความหนาแน่นอย่างต่อเนื่อง

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

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

การแก้ไขสองรายการแรกของ Sheppard คือ

  1. ใช้ค่าเฉลี่ยของข้อมูล binned สำหรับค่าเฉลี่ยของข้อมูล (นั่นคือไม่จำเป็นต้องทำการแก้ไขสำหรับค่าเฉลี่ย)

  2. ลบจากความแปรปรวนของข้อมูลที่ถูกตัดเพื่อให้ได้ความแปรปรวน (โดยประมาณ) ของข้อมูลh2/12

ที่ไหนมาจากไหน? นี้เท่ากับความแปรปรวนของตัวแปรเครื่องแบบกระจายไปทั่วในช่วงเวลาของความยาวชั่วโมงสังหรณ์ใจแล้วแก้ไขเชปสำหรับช่วงเวลาที่สองแสดงให้เห็นว่าbinning ข้อมูล - อย่างมีประสิทธิภาพแทนที่พวกเขาจากจุดกึ่งกลางของแต่ละถัง - จะปรากฏขึ้นเพื่อเพิ่มมูลค่าโดยประมาณกระจายอย่างสม่ำเสมอระหว่างและดังนั้นมันพอง ความแปรปรวนโดยเอชh2/12hh/2h/2h2/12

ลองคำนวณดู ฉันใช้Rเพื่ออธิบายพวกเขาเริ่มต้นด้วยการระบุจำนวนและถังขยะ:

counts <- c(1,2,3,4,1)
bin.lower <- c(40, 45, 50, 55, 70)
bin.upper <- c(45, 50, 55, 60, 75)

สูตรที่เหมาะสมที่จะใช้สำหรับการนับมาจากการจำลองความกว้างของช่องเก็บด้วยจำนวนที่กำหนดโดยการนับ นั่นคือข้อมูล binned เทียบเท่า

42.5, 47.5, 47.5, 52.5, 52.5, 57.5, 57.5, 57.5, 57.5, 72.5

จำนวนของพวกเขาค่าเฉลี่ยและความแปรปรวนสามารถคำนวณได้โดยตรงโดยไม่ต้องขยายข้อมูลในลักษณะนี้แม้ว่า: เมื่อถังมีจุดกึ่งกลางและนับจากแล้วส่วนร่วมในการรวมของสี่เหลี่ยมเป็น 2 สิ่งนี้นำไปสู่สูตรที่สองของ Wikipedia ที่อ้างถึงในคำถามxkkx2

bin.mid <- (bin.upper + bin.lower)/2
n <- sum(counts)
mu <- sum(bin.mid * counts) / n
sigma2 <- (sum(bin.mid^2 * counts) - n * mu^2) / (n-1)

ค่าเฉลี่ย ( mu) เป็น (ต้องไม่มีการแก้ไข) และความแปรปรวน ( ) เป็น61.36 (รากที่สองของมันคือตามที่ระบุในคำถาม) เนื่องจากความกว้างถังขยะทั่วไปคือเราจึงลบจากความแปรปรวนและนำรากที่สองของมันมาเพื่อรับสำหรับค่าเบี่ยงเบนมาตรฐาน1195/2254.32sigma2675/1161.367.83h=5h2/12=25/122.08675/1152/127.70


การประมาณความน่าจะเป็นสูงสุด

วิธีทางเลือกคือการใช้การประมาณโอกาสสูงสุด เมื่อสันนิษฐานกระจายพื้นฐานมีฟังก์ชั่นการกระจาย (ขึ้นอยู่กับพารามิเตอร์ที่จะได้รับโดยประมาณ) และถังมีค่าออกมาจากชุดของอิสระกระจายค่าเหมือนกันจากแล้ว (เพิ่มเติม) การสนับสนุนโอกาสในการบันทึกของถังขยะนี้คือFθθ(x0,x1]kFθ

logi=1k(Fθ(x1)Fθ(x0))=klog(Fθ(x1)Fθ(x0))

(ดูMLE / โอกาสของช่วงเวลาที่กระจาย lognormally )

การรวมที่ถังขยะทั้งหมดทำให้มีโอกาสในการบันทึกสำหรับชุดข้อมูล ตามปกติเราจะพบการประมาณการซึ่งช่วยลดtheta) เรื่องนี้ต้องมีการเพิ่มประสิทธิภาพและตัวเลขที่ถูกเร่งโดยการจัดหาค่าเริ่มต้นที่ดีสำหรับ\รหัสต่อไปนี้ทำงานสำหรับการแจกแจงแบบปกติ:Λ(θ)θ^Λ(θ)θR

sigma <- sqrt(sigma2) # Crude starting estimate for the SD
likelihood.log <- function(theta, counts, bin.lower, bin.upper) {
  mu <- theta[1]; sigma <- theta[2]
  -sum(sapply(1:length(counts), function(i) {
    counts[i] * 
      log(pnorm(bin.upper[i], mu, sigma) - pnorm(bin.lower[i], mu, sigma))
  }))
}
coefficients <- optim(c(mu, sigma), function(theta) 
  likelihood.log(theta, counts, bin.lower, bin.upper))$par

ค่าสัมประสิทธิ์ส่งผลให้มี7.33)(μ^,σ^)=(54.32,7.33)

โปรดจำไว้ว่าสำหรับการแจกแจงแบบปกติการประมาณความน่าจะเป็นสูงสุดของ (เมื่อข้อมูลได้รับอย่างถูกต้องและไม่ได้ถูก binned) คือประชากร SD ของข้อมูลไม่ใช่การประมาณ "อคติที่ถูกแก้ไข" แบบธรรมดา(n-1) ขอให้เราแล้ว (สำหรับการเปรียบเทียบ) แก้ไข MLE ของหา7.69 นี้เปรียบเทียบกับผลของการแก้ไขเชปซึ่งเป็น7.70σn/(n1)σn/(n1)σ^=11/10×7.33=7.697.70

การตรวจสอบข้อสมมติฐาน

เพื่อให้เห็นภาพผลลัพธ์เหล่านี้เราสามารถพล็อตความหนาแน่นปกติที่พอดีกับฮิสโตแกรม:

hist(unlist(mapply(function(x,y) rep(x,y), bin.mid, counts)),
     breaks = breaks, xlab="Values", main="Data and Normal Fit")
curve(dnorm(x, coefficients[1], coefficients[2]), 
      from=min(bin.lower), to=max(bin.upper), 
      add=TRUE, col="Blue", lwd=2)

รูป

สำหรับบางรุ่นนี้อาจดูไม่เข้าท่าพอดี อย่างไรก็ตามเนื่องจากชุดข้อมูลมีขนาดเล็ก (เพียงค่า) อาจทำให้เกิดการเบี่ยงเบนขนาดใหญ่อย่างน่าประหลาดใจระหว่างการกระจายของการสังเกตและการแจกแจงต้นแบบที่แท้จริงสามารถเกิดขึ้นได้11

ลองตรวจสอบสมมติฐานอย่างเป็นทางการมากขึ้น (สร้างโดย MLE) ว่าข้อมูลถูกควบคุมโดยการแจกแจงแบบปกติ คุณสามารถรับความดีโดยประมาณของการทดสอบแบบพอดีได้จากการ : พารามิเตอร์โดยประมาณแสดงถึงจำนวนข้อมูลที่คาดหวังในแต่ละถัง สถิติเปรียบเทียบจำนวนการสังเกตการนับที่คาดหวัง นี่คือการทดสอบใน:χ2χ2R

breaks <- sort(unique(c(bin.lower, bin.upper)))
fit <- mapply(function(l, u) exp(-likelihood.log(coefficients, 1, l, u)),
              c(-Inf, breaks), c(breaks, Inf))
observed <- sapply(breaks[-length(breaks)], function(x) sum((counts)[bin.lower <= x])) -
  sapply(breaks[-1], function(x) sum((counts)[bin.upper < x]))
chisq.test(c(0, observed, 0), p=fit, simulate.p.value=TRUE)

ผลลัพธ์คือ

Chi-squared test for given probabilities with simulated p-value (based on 2000 replicates)

data:  c(0, observed, 0) 
X-squared = 7.9581, df = NA, p-value = 0.2449

ซอฟต์แวร์ทำการทดสอบการเปลี่ยนแปลง (ซึ่งเป็นสิ่งจำเป็นเนื่องจากสถิติการทดสอบไม่เป็นไปตามการแจกแจงแบบไคสแควร์อย่างแน่นอน: ดูการวิเคราะห์ของฉันที่วิธีทำความเข้าใจองศาอิสระ ) ค่า p ของมันที่ซึ่งไม่เล็กแสดงหลักฐานน้อยมากที่ออกจากภาวะปกติ: เรามีเหตุผลที่จะไว้วางใจผลลัพธ์ความน่าจะเป็นสูงสุด0.245

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.