【问题标题】:Creating simulated data from previous data in R从 R 中的先前数据创建模拟数据
【发布时间】:2019-04-08 05:28:14
【问题描述】:

大家好,我知道有很多关于模拟的内容,但我还没有找到我真正需要的东西。我有一个视图数据向量。这是视频的观看次数(以百万为单位)。

totalBeforeViews = (c( 1.19,2.29,2.05,1.96,2.07,1.77,1.50,1.77,4.49,9.76,6.55,5.17,6.56,10.31))

我想说对这些数据进行 1000 次重复模拟。所以我正在寻找某种可以随机进行模拟但通过上面的向量以某种方式训练的函数。我正在考虑这样做

sdViewsBefore = sd(totalBeforeViews)
simulatedBeforeViews = rnorm(n = 1000, mean = totalBeforeViews, sd = sdViewsBefore)

但是,这让我得到了我无法使用的负值,因为视频上不能有负视图。此外,我的最终目标是在我拥有的另一组数据上运行 1000 次 T 测试。任何帮助表示赞赏。谢谢

【问题讨论】:

  • 这会给你负值,因为正态分布不受约束......也许你应该尝试泊松分布。 1000 次 t 检验听起来可能也是个坏主意……
  • 试试sample(1000, totalBeforeViews, replace=TRUE)
  • 嘿,所以必须做样本(1000,totalBeforeViews,replace=TRUE),但它似乎有效。也感谢马蒂亚斯。你能解释为什么 t-test 看起来是个坏主意吗?我的想法是对这两个数据集进行 1000 次模拟,然后对它们进行 t 检验,看看 p 值显着的次数。

标签: r simulation


【解决方案1】:

可以考虑截断正态分布。我还没有在下面进行测试,但可能会有所帮助:

library(truncnorm)
rtruncnorm(n=1000, a=0, b=Inf, mean=totalBeforeViews, sd=sdViewsBefore)

在这个link作者提供了一个定制的截断正态分布抽样,你可以在不安装新包的情况下调整到你自己的。

mysamp <- function(n, m, s, lwr, upr, nnorm) {
  samp <- rnorm(nnorm, m, s)
  samp <- samp[samp >= lwr & samp <= upr]
  if (length(samp) >= n) {
    return(sample(samp, n))
  }  
  stop(simpleError("Not enough values to sample from. Try increasing nnorm."))
}

set.seed(42)
mysamp(n=10, m=39.74, s=25.09, lwr=0, upr=340, nnorm=1000)

【讨论】:

  • 不幸的是,我似乎无法在我的版本上下载该软件包。 package ‘truncnorm’ is not available (for R version 3.3.2) 如果我下载一个新版本来试试这个,我会告诉你它是怎么回事。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多