답변:
커널 밀도 추정치는 혼합 분포입니다. 모든 관찰에는 커널이 있습니다. 커널이 스케일 밀도 인 경우 커널 밀도 추정값에서 샘플링하기위한 간단한 알고리즘이 생성됩니다.
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에게 감사드립니다.