gpt4 book ai didi

R - 从核密度估计中获得的概率密度分布的模拟数据

转载 作者:行者123 更新时间:2023-12-04 11:39:37 24 4
gpt4 key购买 nike

首先,我不完全确定这里是否是发帖的正确位置,也许它应该发到更注重统计的论坛上。但是,由于我计划用 R 实现它,所以我认为最好将它发布在这里。如果我错了请道歉。

所以,我要做的是以下内容。我想模拟总共 250.000 个观测值的数据,分配一个连续(非整数)值,该值符合从经验数据(离散)得出的核密度估计,原始值范围从 -5 到 +5。这是我想要使用的分布图。

enter image description here

对我来说非常重要的是,我不基于离散概率模拟新数据,而是基于连续概率模拟新数据,因为一个值可以是 2.89 而不是 3 或 2 非常重要。所以新值将是根据图中描述的概率分配。模拟数据中最常见的值大约在 +2 左右,而大约 -4 和 +5 的值则很少见。

我已经阅读了大量关于 R 中的模拟数据以及内核密度估计如何工作的资料,但我真的完全没有继续前进。所以我的问题基本上需要两个步骤——我什至如何模拟数据 (1),此外,我如何使用这个特定的概率分布 (2) 模拟数据?

提前致谢,我希望你们能帮我解决这个问题。

最佳答案

使用您的基础离散数据,根据您的需要在尽可能精细的网格上创建核密度估计(即,根据您的应用程序的需要“接近连续”(当然,在机器精度和计算时间的限制内) ).然后从该核密度中采样,使用密度值来确保更有可能对分布的更可能值进行采样。例如:

假数据,只是为了在这个例子中使用一些东西:

set.seed(4396)
dat = round(rnorm(1000,100,10))

创建内核密度估计。如果您希望在更精细的点网格上估计密度,请增加 n:

dens = density(dat, n=2^14)

在这种情况下,密度是在 2^14 个点的网格上估算的,每个点之间的距离 mean(diff(dens$x))=0.0045。

现在,从核密度估计中抽样:我们对密度估计的 x 值进行抽样,并将 prob 设置为等于密度估计的 y 值(密度),以便更多可能的 x 值将更有可能被采样:

kern.samp = sample(dens$x, 250000, replace=TRUE, prob=dens$y)

比较 dens(我们原始数据的密度估计)(黑线)与 kern.samp 的密度(红色):

plot(dens, lwd=2)
lines(density(kern.samp), col="red",lwd=2)

enter image description here

使用上述方法,您可以为密度估计创建越来越精细的网格,但您仍将限于用于密度估计的网格点处的密度值(即 dens$ 的值x).但是,如果您确实需要能够获得任何 数据值的密度,您可以创建一个近似函数。在这种情况下,您仍然会创建密度估计——以捕获数据结构所需的任何带宽和网格大小——然后创建一个函数来对网格点之间的密度进行插值。例如:

dens = density(dat, n=2^14)

dens.func = approxfun(dens)

x = c(72.4588, 86.94, 101.1058301)

dens.func(x)
[1] 0.001689885 0.017292405 0.040875436

您可以使用它来获取任何 x 值处的密度分布(而不是仅仅在 density 函数使用的网格点处),然后使用 dens.func 的输出 作为 sampleprob 参数。

关于R - 从核密度估计中获得的概率密度分布的模拟数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com