我是R中模拟练习的新手。我想从自由度为10的t分布中创建1000个大小为25的样本。
我是否需要从rt
生成器创建单个数据向量,然后从中重复采样?因此,例如,我可以创建矢量:
singlevector <- rt(5000, 10)
,它从大小为5000且df = 10的t分布生成数据。因此,我会将其视为我的人口,然后从中进行采样。我在这里任意选择5000人口。
或者,我应该每次创建1000个样本来调用这个随机t生成器吗?
换句话说,创建一个包含25行和1000列的矩阵,每列包含与rt(25, 10)
的新调用相对应的向量。
答案 0 :(得分:3)
由于您要对独立的,相同分布的值进行采样,因此所有这三种方法都统计等效。
后两者不仅在统计学上而且在计算上等同。在第一种方法中,样本的顺序被扰乱,但这对统计属性没有影响。
方法#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个样本);当你阅读代码时,我会选择最容易理解的方法。