จะคำนวณระยะเวลาการทำนายสำหรับ LOESS ได้อย่างไร


17

ฉันมีข้อมูลบางส่วนที่ฉันใช้กับรุ่น LOESS ใน R ให้สิ่งนี้กับฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลมีตัวทำนายหนึ่งตัวและคำตอบเดียวและเป็นแบบเฮเทอโรเซดีติก

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

คำถามนี้เป็นคำถามที่เกี่ยวข้องเล็กน้อย: การทำความเข้าใจวงความเชื่อมั่นจากการถดถอยพหุนามโดยเฉพาะอย่างยิ่งคำตอบโดย @AndyW แต่ในตัวอย่างของเขาที่เขาใช้ค่อนข้างตรงไปตรงมาinterval="predict"โต้แย้งที่มีอยู่ในแต่มันก็จะหายไปจากpredict.lmpredict.loess

ดังนั้นฉันมีสองคำถามที่เกี่ยวข้องมาก:

  1. ฉันจะได้รับช่วงเวลาการทำนายแบบจุดตามจุดสำหรับ LOESS ได้อย่างไร
  2. ฉันจะทำนายค่าที่จะจับช่วงเวลานั้นได้อย่างไรเช่นสร้างตัวเลขสุ่มจำนวนมากซึ่งในที่สุดจะมีลักษณะคล้ายกับข้อมูลต้นฉบับ

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


นี่คือช่วงเวลาการทำนายแบบจุดหรือไม่?
Glen_b -Reinstate Monica

คุณหมายถึงอะไร"? และฉันไม่แน่ใจว่ามันเป็นจุดหรือไม่ คำถามของฉัน 2 คือสิ่งที่ฉันกำลังมองหา - โชคไม่ดีที่ฉันไม่คุ้นเคยกับระบบการตั้งชื่อ
Gimelist

โดย 'สิ่งนี้' ฉันหมายถึง "คำถามที่ถามถึงในชื่อ"
Glen_b

ดังนั้นฉันไม่แน่ใจ - ดูความคิดเห็นก่อนหน้าของฉัน โดยทั่วไปฉันกำลังมองหาช่วงเวลาที่จะจับความแปรปรวนที่เกิดขึ้นจริงในจุดข้อมูลตามที่อธิบายไว้ในคำถามของฉัน
Gimelist

1
การแพร่กระจายอาจเป็นตัวแปร (นั่นเป็นเหตุผลที่ฉันเลือกใช้การถดถอยท้องถิ่นตั้งแต่แรก) ทำนายเดียว
Gimelist

คำตอบ:


12

ฉันไม่ทราบวิธีการทำนายแบนด์กับloessฟังก์ชั่นดั้งเดิมแต่มีฟังก์ชั่นloess.sdในmsirแพ็คเกจที่ทำเช่นนั้น! เกือบทุกคำจากmsirเอกสาร:

library(msir)
data(cars)
# Calculates and plots a 1.96 * SD prediction band, that is,
# a 95% prediction band
l <- loess.sd(cars, nsigma = 1.96)
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

ป้อนคำอธิบายรูปภาพที่นี่

คำถามที่สองของคุณค่อนข้างหลอกลวงเนื่องจากloess.sdไม่มีฟังก์ชันการคาดเดา แต่คุณสามารถแฮ็คมันพร้อมกันโดยการสอดแทรกวิธีการทำนายและ SD ที่คุณได้รับจากการloess.sdใช้เชิงapproxเส้น ในทางกลับกันสิ่งเหล่านี้สามารถใช้เพื่อจำลองข้อมูลโดยใช้การแจกแจงแบบปกติด้วยค่าเฉลี่ยที่คาดการณ์และ SDs:

# Simulate x data uniformly and y data acording to the loess fit
sim_x <- runif(100, min(cars[,1]), max(cars[,1]))
pred_mean <- approx(l$x, l$y, xout = sim_x)$y
pred_sd <- approx(l$x, l$sd, xout = sim_x)$y
sim_y <- rnorm(100, pred_mean, pred_sd) 

# Plots 95% prediction bands with simulated data 
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
points(sim_x, sim_y, col="blue")
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

ป้อนคำอธิบายรูปภาพที่นี่


สิ่งที่ฉันกำลังมองหา เมื่อมองไปที่วิธีการที่เขาใช้โดยการดูรหัสที่มีloess.sdก็ไม่ได้แตกต่างกันเกินไปจากสิ่งที่ชี้ให้เห็น @rnso ในการแสดงความคิดเห็นสำหรับคำถามของฉันอีก ขอบคุณ!
Gimelist

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