비모수 추정 분포에서 랜덤 표본을 추출하는 방법은 무엇입니까?


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

h엑스나는(μ=엑스나는,σ=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 = 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에게 감사드립니다.


1
중요도 샘플링으로 곧바로 들어가서 일반적으로 샘플링이 그보다 단순하다는 것을 깨달았습니다. 귀하의 초기 설명을 답변에 추가했습니다. 많은 감사
Matteo Fasiolo

@ Matteo Fasiolo-이 방법에 대해 인용 할 수있는 논문에 대한 언급이 있습니까?
Pallavi 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.