如果在某个地方有明显的答案,我很抱歉,我找不到一个,而且我对R不太熟悉。
我正在使用内核平滑包ks
来使用kde
生成内核密度估算模型。我想对生成的模型进行抽样。
library(ks)
data <- read.table("data_file.txt", header=FALSE)
model <- kde(data)
然后我不知道该怎么办。我已经阅读了帮助文档,但没有找到必要的功能。
答案 0 :(得分:2)
单变量案例
请参阅帮助文档: https://cran.r-project.org/web/packages/ks/ks.pdf
您可以看到dkde
,pkde
,qkde
,rkde
与任何R发布版相同。
rkde(100, model)
它将从估计的分布中生成100个随机数。
多变量案例
我很惊讶发现ks包不是直接用prodive样本方法。无论如何,它原则上很容易。您只需要首先随机选择一个采样点,然后在其上应用估计的内核噪声。对于具有多变量普通内核的缓慢但基本的代码示例:
library(mvtnorm)
rmkde <- function(size,flat){
n <- nrow(flat$x)
s <- sample(1:n,size,replace=TRUE)
t(apply(flat$x[s,],1,function(mean)rmvnorm(1,mean=mean,sigma=flat$H)))
}
rmkde(100, model)
由于rmvnorm
多次计算相同的矩阵分解,因此速度很慢,您可以从rmvnorm
源代码中选择分解来加速它。