Làm thế nào để vẽ các mẫu ngẫu nhiên từ một phân phối ước tính không tham số?


14

Tôi có một mẫu 100 điểm liên tục và một chiều. Tôi ước tính mật độ không tham số của nó bằng phương pháp kernel. Làm thế nào tôi có thể rút ra các mẫu ngẫu nhiên từ phân phối ước tính này?

Câu trả lời:


21

Một ước tính mật độ hạt nhân là một phân phối hỗn hợp; cho mỗi quan sát, có một hạt nhân. Nếu hạt nhân là mật độ tỷ lệ, điều này dẫn đến một thuật toán đơn giản để lấy mẫu từ ước tính mật độ hạt nhân:

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

Nếu (ví dụ) bạn đã sử dụng hạt nhân Gaussian, ước tính mật độ của bạn là hỗn hợp của 100 quy tắc, mỗi trung tâm tại một trong các điểm mẫu của bạn và tất cả đều có độ lệch chuẩn hbằng với băng thông ước tính. Để vẽ mẫu, bạn chỉ có thể lấy mẫu bằng một trong những điểm mẫu của bạn (giả sửxTôi) và sau đó lấy mẫu từ một N(μ= =xTôi,σ= =h). Trong R:

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

Nói một cách chính xác, do các thành phần của hỗn hợp có trọng số như nhau, bạn có thể tránh việc lấy mẫu với bộ phận thay thế và chỉ cần vẽ một mẫu có kích thước M từ mỗi thành phần của hỗn hợp:

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

Nếu vì lý do nào đó bạn không thể rút ra từ hạt nhân của mình (ví dụ: hạt nhân của bạn không phải là mật độ), bạn có thể thử lấy mẫu quan trọng hoặc MCMC . Ví dụ: sử dụng lấy mẫu quan trọng:

# 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 Với lời cảm ơn của tôi đến Glen_b, người đã đóng góp cho câu trả lời.


1
Xin lỗi tôi đã đi thẳng vào lấy mẫu quan trọng, và sau đó tôi nhận ra rằng thường lấy mẫu đơn giản hơn thế. Tôi đã thêm lời giải thích ban đầu của bạn vào câu trả lời của tôi. Rất cám ơn
Matteo Fasiolo

@ Matteo Fasiolo - Bạn có bất kỳ tài liệu tham khảo nào cho một bài báo tôi có thể trích dẫn cho phương pháp này.
Pallavi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.