Bagaimana cara menggambar sampel acak dari distribusi perkiraan non-parametrik?

14

Saya memiliki sampel 100 poin yang kontinu dan satu dimensi. Saya memperkirakan kepadatan non-parametriknya menggunakan metode kernel. Bagaimana saya bisa mengambil sampel acak dari distribusi yang diperkirakan ini?

lovekesh
sumber

Jawaban:

21

Estimasi kepadatan kernel adalah distribusi campuran; untuk setiap pengamatan, ada sebuah kernel. Jika kernel adalah kepadatan berskala, ini mengarah ke algoritma sederhana untuk pengambilan sampel dari estimasi kepadatan kernel:

repeat nsim times:
  sample (with replacement) a random observation from the data
  sample from the kernel, and add the previously sampled random observation

hxsayaN(μ=xsaya,σ=h)

# 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.

M = 10
hist(rnorm(N * M, mean = x, sd = bw))

Jika karena alasan tertentu Anda tidak dapat mengambil dari kernel Anda (mis. Kernel Anda bukan kepadatan), Anda dapat mencoba dengan sampling penting atau MCMC . Misalnya, menggunakan sampel penting:

# 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)

PS Dengan terima kasih kepada Glen_b yang berkontribusi pada jawabannya.

Matteo Fasiolo
sumber
1
Maaf saya langsung masuk ke sampling penting, dan kemudian saya menyadari bahwa biasanya pengambilan sampel lebih sederhana dari itu. Saya menambahkan penjelasan awal Anda ke jawaban saya. Terima kasih banyak
Matteo Fasiolo
@ Matteo Fasiolo - Apakah Anda punya referensi ke makalah yang bisa saya kutip untuk metode ini.
Pallavi