R将数据重新采样为对数正态分布

R将数据重新采样为对数正态分布,r,resampling,R,Resampling,我有一组大致均匀分布的模拟数据。我想对这些数据的一个子集进行采样,并使该子集具有我指定的(log)平均值和(log)标准偏差的对数正态分布 我可以想出一些缓慢的暴力方法来实现这一点,但我觉得应该有一种方法可以在几行中使用plnorm函数和带有“prob”变量集的sample函数来实现这一点。不过,我似乎无法得到我想要的行为。我的第一次尝试是: probs <- plnorm(orig_data, meanlog = mu, sdlog = sigma) new_data <- sam

我有一组大致均匀分布的模拟数据。我想对这些数据的一个子集进行采样,并使该子集具有我指定的(log)平均值和(log)标准偏差的对数正态分布

我可以想出一些缓慢的暴力方法来实现这一点,但我觉得应该有一种方法可以在几行中使用
plnorm
函数和带有“prob”变量集的
sample
函数来实现这一点。不过,我似乎无法得到我想要的行为。我的第一次尝试是:

probs <- plnorm(orig_data, meanlog = mu, sdlog = sigma)
new_data <- sample(orig_data, replace = FALSE, prob = probs)

probs如果您的
orig_数据
均匀分布在0和1之间,则

new_data = qlnorm(orig_data, meanlog = mu, sdlog = sigma)
将给出日志采样数据。如果您的数据不在0和1之间,而是说
a
b
,那么首先:

orig_data = (orig_data-a)/(b-a)

一般来说,0和1之间的均匀RV被视为概率,因此如果你想用它从给定的分布中取样,你必须使用
q…
ie取相应的分位数谢谢大家的建议。当他们接近我的时候,我决定用一种稍微不同的方法来解决我的问题,我把它作为一种解决方案,以防它对其他人有用

我在原始问题中遗漏的一个具体问题是,我有一个完整的数据集(存储为数据帧),我想对该数据集中的行重新采样,以使其中一个变量(列)是对数正态分布的。下面是我编写的函数,它依赖于
dlnorm
计算概率和
sample
对数据帧重新采样:

resample_lognorm <- function(origdataframe,origvals,meanlog,sdlog,n) {
  prob <- dlnorm(origvals,meanlog=log(10)*meanlog,sdlog=log(10)*sdlog)
  newsamp <- origdataframe[sample(nrow(origdataframe),
                                  size=n,replace=FALSE,prob=prob),]
  return(newsamp)
}

resample\u lognorm Try
qlnorm
not
plnorm
。当从均匀分布映射到另一个分布时,应该只使用反向cdf或分位数函数。所有R分布函数都使用相同的前缀(q、p等)来标识哪个是哪个。