【问题标题】:How do I generate random dates in excel via a certain distribution?如何通过特定分布在 excel 中生成随机日期?
【发布时间】:2016-04-15 16:44:48
【问题描述】:

我需要在某些年份之间生成 X(取 1000 以方便使用)随机日期,例如在 1/1/1950 和 1/1/2000 之间,其中平均值约为 1/1/1980(1957-1985)

现在我知道 Excel 日期计算是基于天数的。 所以:

01/01/1950  = 18264
01/01/2000  = 36526
01/01/1980  = 29221

所以最小值为 18264,最大值为 36526。其中平均值为 29221,其中大多数生成在 27395 和 31048 之间。

我可以通过什么方法实现这一点,可以通过 excel 公式或 VBA 实现。

现在我正在生成日期:=RANDBETWEEN(DATE(1950,1,1),DATE(2000,1,1))

但这当然不会给我想要的数据。因为我不是在寻找均匀分布。

有人可以引导我朝着正确的方向前进吗,我无法找到或实现这一点。

更新 我正在寻找的分布看起来像这样:

其中 -5 是 1950,5 是 2000。我会得到紫色图表,或者红色,或者绿色或蓝色。不是一下子。 F或者为了这个问题,让我们用紫色图表来吧

更新2 我希望能够使用随机数据生成的最终图表看起来像这样。通过更改参数,整个图形可以以不同的方式移动。

非常感谢。

【问题讨论】:

  • 你想要什么发行
  • 我不知道平均值是否接近最大值的正态分布是可能的。我一直在研究泊松分布,但当我读到它时,我认为这不是正确的分布。
  • 或者,为什么=RANDBETWEEN(DATE(1950,1,1),DATE(2000,1,1)) 不给你想要的数据?它给了我一个很好的随机日期,并且在你的日期之间均匀分布。
  • 有无限多的分布,其范围为 [1950,1999),平均值为 1980。您的问题描述根本未确定。
  • @PA 他的要求排除了均匀分布

标签: vba excel date


【解决方案1】:

公式=NORM.INV(RAND(), 29221, SQRT(20)) 将创建方差为 20 且均值为 29221(对应于 1980 年 1 月 1 日)的正态分布随机图形。您可能希望 parameters 引用其他单元格,而不是在公式中进行硬编码。请注意,SQRT(20) 对应于

旧版本的 Excel 具有等效的 NORMINV 函数。

这些是分布的分位数函数。

如果您想要其他形状(例如您的问题中的偏态分布),那么您需要自己构建分位数函数。您可以通过将 PDF 转换为 CDF(通过集成)并交换轴来完成此操作。可能是 VBA 的工作。

【讨论】:

  • 使用你给定的公式,我能够为 1000 条记录生成一些随机数据,这给了我一个正态分布。我在上一条评论中提到的 20 是 20 年,如果我是正确的,这将是 7300?通过将 20 更改为 7300,分布仍然在 1979 年和 1980 年左右。我将查看偏度,这也是 John 提出不对称分布时出现的问题。你进一步帮助了我!
  • 不,方差以天为单位。
【解决方案2】:

您似乎需要一个比率为 2/3 的 beta 分布。正态分布的问题在于它的对称性,而且它没有最大值和最小值。 Beta 发行版提供了这些。

试试这个:

=BETA.INV(RAND(), 3, 2, 18264, 36526)

【讨论】:

  • that.. 似乎是正确的解决方案。我可以更改分布以及最小值和最大值。这似乎是最接近和最简单的解决方案!
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 2021-06-19
  • 2022-01-23
  • 2011-11-10
  • 2015-12-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多