ฉันมีตัวอย่าง 100 คะแนนที่ต่อเนื่องและเป็นหนึ่งมิติ ฉันประเมินความหนาแน่นแบบไม่อิงพารามิเตอร์โดยใช้วิธีเคอร์เนล ฉันจะสุ่มตัวอย่างจากการแจกแจงโดยประมาณนี้ได้อย่างไร
ฉันมีตัวอย่าง 100 คะแนนที่ต่อเนื่องและเป็นหนึ่งมิติ ฉันประเมินความหนาแน่นแบบไม่อิงพารามิเตอร์โดยใช้วิธีเคอร์เนล ฉันจะสุ่มตัวอย่างจากการแจกแจงโดยประมาณนี้ได้อย่างไร
คำตอบ:
การประมาณความหนาแน่นของเคอร์เนลเป็นการกระจายตัวของส่วนผสม สำหรับการสังเกตทุกครั้งจะมีเคอร์เนล หากเคอร์เนลมีขนาดความหนาแน่นสิ่งนี้นำไปสู่อัลกอริทึมแบบง่ายสำหรับการสุ่มตัวอย่างจากการประมาณความหนาแน่นของเคอร์เนล:
repeat nsim times:
sample (with replacement) a random observation from the data
sample from the kernel, and add the previously sampled random observation
# Original distribution is exp(rate = 5)
N = 1000
x <- rexp(N, rate = 5)
hist(x, prob = TRUE)
lines(density(x))
# Store the bandwith of the estimated KDE
bw <- density(x)$bw
# Draw from the sample and then from the kernel
means <- sample(x, N, replace = TRUE)
hist(rnorm(N, mean = means, sd = bw), prob = TRUE)
M = 10
hist(rnorm(N * M, mean = x, sd = bw))
หากมีเหตุผลบางอย่างที่คุณไม่สามารถวาดจากเมล็ดของคุณ (เช่น. เคอร์เนลของคุณไม่ได้เป็นความหนาแน่น) คุณสามารถลองกับการสุ่มตัวอย่างสำคัญหรือMCMC ตัวอย่างเช่นการใช้การสุ่มตัวอย่างที่สำคัญ:
# Draw from proposal distribution which is normal(mu, sd = 1)
sam <- rnorm(N, mean(x), 1)
# Weight the sample using ratio of target and proposal densities
w <- sapply(sam, function(input) sum(dnorm(input, mean = x, sd = bw)) /
dnorm(input, mean(x), 1))
# Resample according to the weights to obtain an un-weighted sample
finalSample <- sample(sam, N, replace = TRUE, prob = w)
hist(finalSample, prob = TRUE)
ป.ล. ด้วยการขอบคุณ Glen_b ผู้มีส่วนช่วยตอบ