Як намалювати випадкові вибірки з непараметричного оціночного розподілу?


14

У мене є вибірка з 100 точок, які є суцільними та одновимірними. Я оцінив його непараметричну щільність за допомогою методів ядра. Як я можу взяти випадкові вибірки з цього розрахункового розподілу?

Відповіді:


21

Оцінка щільності ядра - це розподіл суміші; для кожного спостереження є ядро. Якщо ядро ​​має масштабовану щільність, це призводить до простого алгоритму вибірки з оцінки щільності ядра:

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

Якщо (наприклад) ви використовували ядро ​​Гаусса, ваша оцінка щільності є сумішшю 100 нормалей, кожна з яких орієнтована в одній із точок вибірки, і всі мають стандартне відхилення рівне оціночній ширині смуги. Щоб намалювати зразок, ви можете просто взяти вибірку із заміною однієї з точок вибірки (скажімо ), а потім вибірки з . В R:годхiN(мк=хi,σ=год)

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

PS З вдячністю Glen_b, який зробив свій внесок у відповідь.


1
Вибачте, що я перейшов безпосередньо до важливості вибірки, і тоді я зрозумів, що зазвичай вибірка простіша за це. Я додав ваше початкове пояснення до своїх відповідей. Велике спасибі
Маттео Фасіоло

@ Маттео Фасіоло - Чи є у вас посилання на документ, який я можу навести за цим методом.
Pallavi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.