【问题标题】:rtruncnorm function in R generates same observationsR中的 rtruncnorm 函数生成相同的观察结果
【发布时间】:2017-10-09 15:45:55
【问题描述】:

我正在尝试在 R 中使用截断的正态分布函数来生成上下限之间的数字。这是我正在使用的语句:

rtruncnorm(4,1494396000,1494397800, 6360,2640)

4 - 我需要的观察次数, 1494396000 - 纪元时间(实际时间:2017-05-10 02:00:00), 1494397800 - 纪元时间(实际时间:2017-05-10 02:30:00), 6360 - 平均 106 分钟(106*60 = 6360 秒), 2640 - SD 44 分钟(44*60 = 2640 秒)

理想情况下,这应该在 5 月 10 日 02:00:00 到 02:30:00 之间给我 4 个纪元时间观察 但我得到的输出是:1494396000 1494396000 1494396000 1494396000 这是2017-05-10 02:00:00

我不明白为什么 rtruncnorm 给了我 4 个完全相同的观察结果。我尝试使用 msm 包中的 rtnorm 函数,结果是一样的。

非常感谢您朝正确的方向轻推

【问题讨论】:

    标签: r statistics epoch normal-distribution


    【解决方案1】:

    1,494,396,000 的截断下限比平均值 6,360 高出 566,057 个标准差。看起来当您指定一个导致所有模拟值都低于截断下限的平均值时,该函数只返回每个值的截断下限。我想你一定是想在截断限制之间指定一个平均值。

    library(truncnorm)
    
    rr = c(1494396000, 1494397800)
    
    hist(rtruncnorm(10000, 1494396000, 1494397800, 1494396000, 500), 
         breaks=seq(rr[1],rr[2], length=40), xlim=rr, main="Mean=1494396000", xlab="")
    
    hist(rtruncnorm(10000, 1494396000, 1494397800, 6360, 500), 
         breaks=seq(rr[1],rr[2], length=40), xlim=rr, main="Mean=6360", xlab="")
    

    【讨论】:

    • 非常感谢@eipi10。我弄清楚了这个问题。纪元时间以 R 计算的方式(从 1970 年 1 月 1 日开始的秒数),2017-05-10 02:00:00 导致一个非常大的数字,即 1494396000。而客户端提供的平均值和 SD 很简单以分钟为单位,并且没有附加日期组件,这导致范围与平均值和 SD 之间存在如此巨大的差异。需要想办法解决这个问题。
    • 我建议根据您刚刚分享的内容,正态分布可能无法很好地模拟您的问题。泊松分布和指数分布是两种(在我的脑海中)更常用于涉及时间的情况
    【解决方案2】:

    (Eipi10 击败了我,这个答案是对他们的补充,它解释了 为什么 R 的行为方式)

    您实际上尝试做的是从分布尾部的最末端提取值,该分布的标准差相对于您的限制也非常大。我在 MSPaint 中制作了一张可怕的快速图片来帮助演示。

    鉴于听起来您只是想要一些介于上限和下限之间的随机值 - 您确定需要定义平均值和标准差(或者甚至知道它们可能是什么?)如果您不需要模拟你最好只使用:

    runif(4, min = 1494396000, max = 1494397800)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多