Parametrik olmayan bir tahmini dağılımdan rastgele örnekler nasıl çizilir?


14

Sürekli ve tek boyutlu 100 noktadan oluşan bir örneğim var. Parametrik olmayan yoğunluğunu çekirdek yöntemleri kullanarak tahmin ettim. Bu tahmini dağılımdan nasıl rastgele örnekler alabilirim?

Yanıtlar:


21

Bir çekirdek yoğunluğu tahmini bir karışım dağılımıdır; her gözlem için bir çekirdek var. Çekirdek ölçekli bir yoğunluksa, çekirdek yoğunluğu tahminden örnekleme için basit bir algoritmaya yol açar:

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

(Örneğin) bir Gauss çekirdeği kullandıysanız, yoğunluk tahmininiz, her biri örnek noktalarınızdan birinde ortalanmış ve tümü standart bant sapması tahmini bant genişliğine eşit olan 100 normalin bir karışımıdır . Bir örnek çizmek için örnek noktalarınızdan birini (örneğin ) değiştirerek örnekleyebilir ve sonra . R cinsinden:x i N ( μ = x i , σ = h )hxiN(μ=xi,σ=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)

Kesin olarak, karışımın bileşenlerinin eşit ağırlıklı olduğu göz önüne alındığında, yedek parça ile örneklemeden kaçınabilir ve sadece karışımın her bileşeninden boyutunda bir örnek çizebilirsiniz :M

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

Herhangi bir nedenden dolayı çekirdeğinizden çekemiyorsanız (örneğin, çekirdeğiniz bir yoğunluk değilse), önemli örnekleme veya MCMC ile deneyebilirsiniz . Örneğin, önemli örneklemeyi kullanarak:

# 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 Cevaba katkıda bulunan Glen_b'e teşekkürlerimi sunuyorum.


1
Üzgünüm, doğrudan örneklemeye önem verdim ve sonra genellikle örneklemenin bundan daha basit olduğunu fark ettim. İlk açıklamanızı cevaplarıma ekledim. Çok teşekkürler
Matteo Fasiolo

@ Matteo Fasiolo - Bu yöntem için alıntı yapabileceğim bir makaleye referansınız var mı?
Pallavi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.