模拟t分布 - 随机样本

时间:2016-11-23 19:09:19

标签: r

我是R中模拟练习的新手。我想从自由度为10的t分布中创建1000个大小为25的样本。

我是否需要从rt生成器创建单个数据向量,然后从中重复采样?因此,例如,我可以创建矢量:

singlevector <- rt(5000, 10),它从大小为5000且df = 10的t分布生成数据。因此,我会将其视为我的人口,然后从中进行采样。我在这里任意选择5000人口。

或者,我应该每次创建1000个样本来调用这个随机t生成器吗?

换句话说,创建一个包含25行和1000列的矩阵,每列包含与rt(25, 10)的新调用相对应的向量。

1 个答案:

答案 0 :(得分:3)

由于您要对独立的,相同分布的值进行采样,因此所有这三种方法都统计等效。

  • 调用随机数生成器一次以获得所需数量(或更多)的值,然后在不更换的情况下对该矢量进行采样
  • 调用随机数生成器1000次,每次选择25个值
  • 调用随机数生成器一次,选取25000个值,然后将矢量细分为单个样本按顺序(而不是随机)

后两者不仅在统计学上而且在计算上等同。在第一种方法中,样本的顺序被扰乱,但这对统计属性没有影响。

方法#1:

set.seed(101)
x1 <- rt(25000,10)
r1 <- do.call(cbind,split(x1,sample(0:24999) %/% 25))

说明#2和#3的等价性:

set.seed(101)
r2 <- replicate(1000, rt(25, 10))
set.seed(101)
r3 <- matrix(rt(25000,10),nrow=25)
identical(r2,r3)  ## TRUE

一般来说,解决方案#3是最快的(但对于这个数量级的问题,所有这些方法非常快,即大约5毫秒(#3)对比10毫秒(#2)我的笔记本上有25 x 1000个样本);当你阅读代码时,我会选择最容易理解的方法。