R:从概率密度分布生成数据
R: Generate data from a probability density distribution
假设我有一个简单的数组,具有相应的概率分布。
library(stats)
data <- c(0,0.08,0.15,0.28,0.90)
pdf_of_data <- density(data, from= 0, to=1, bw=0.1)
有什么方法可以使用相同的分布生成另一组数据。由于操作是概率性的,它不再需要完全匹配初始分布,而只是从中生成。
我确实成功地自己找到了一个简单的解决方案。谢谢!
从 ?density
文档中的示例中,您(几乎)得到了答案。
所以,应该这样做:
library("stats")
data <- c(0,0.08,0.15,0.28,0.90)
pdf_of_data <- density(data, from= 0, to=1, bw=0.1)
# From the example.
N <- 1e6
x.new <- rnorm(N, sample(data, size = N, replace = TRUE), pdf_of_data$bw)
# Histogram of the draws with the distribution superimposed.
hist(x.new, freq = FALSE)
lines(pdf_of_data)
您可以像 rejection sampling. 那样拒绝区间外的抽奖
或者,您可以使用 link.
中描述的算法
从曲线绘制:
sample(pdf_of_data$x, 1e6, TRUE, pdf_of_data$y)
最好的办法是生成经验累积密度函数,近似逆函数,然后转换输入。
复合表达式看起来像
random.points <- approx(
cumsum(pdf_of_data$y)/sum(pdf_of_data$y),
pdf_of_data$x,
runif(10000)
)$y
产量
hist(random.points, 100)
假设我有一个简单的数组,具有相应的概率分布。
library(stats)
data <- c(0,0.08,0.15,0.28,0.90)
pdf_of_data <- density(data, from= 0, to=1, bw=0.1)
有什么方法可以使用相同的分布生成另一组数据。由于操作是概率性的,它不再需要完全匹配初始分布,而只是从中生成。
我确实成功地自己找到了一个简单的解决方案。谢谢!
从 ?density
文档中的示例中,您(几乎)得到了答案。
所以,应该这样做:
library("stats")
data <- c(0,0.08,0.15,0.28,0.90)
pdf_of_data <- density(data, from= 0, to=1, bw=0.1)
# From the example.
N <- 1e6
x.new <- rnorm(N, sample(data, size = N, replace = TRUE), pdf_of_data$bw)
# Histogram of the draws with the distribution superimposed.
hist(x.new, freq = FALSE)
lines(pdf_of_data)
您可以像 rejection sampling. 那样拒绝区间外的抽奖 或者,您可以使用 link.
中描述的算法从曲线绘制:
sample(pdf_of_data$x, 1e6, TRUE, pdf_of_data$y)
最好的办法是生成经验累积密度函数,近似逆函数,然后转换输入。
复合表达式看起来像
random.points <- approx(
cumsum(pdf_of_data$y)/sum(pdf_of_data$y),
pdf_of_data$x,
runif(10000)
)$y
产量
hist(random.points, 100)