具有概率的R_Sample

时间:2014-05-21 12:48:15

标签: r sample

我在理解prob中的sample时遇到了一些问题。例如,我想创建一个大小为100的样本数据集,整数为1,2,3&我使用的概率为0.1,0.2,0.3&分别为0.4。

  

SAMPLE1< -sample(1:4100,替换= T,概率= SEQ(0.1,0.4,0.1))

所以,现在我期待一个整数为1,2,3&的样本。 4重复10,20,30&分别为40次。但结果是不同的

> table(sample1)
sample1
 1  2  3  4 
 7 24 33 36 

任何人都能解释一下吗?如果我想获得预期结果

,我该怎么办?
> table(sample1)
    sample1
     1  2  3  4 
    10 20 30 40 

2 个答案:

答案 0 :(得分:2)

sample获取具有指定概率的样本。这意味着随机性 - 你每次都不会得到相同的结果。要做你想做的事,只需使用rep

rep(1:4, 100*seq(0.1,0.4,0.1))

答案 1 :(得分:1)

sample(...)采用prob=...中给出的概率随机抽样,因此每次都不会完全 。另一方面,随着prob增加,比例越接近n中指定的比例:

f <- function(n)sample(1:4,n,replace=T,prob=(1:4)/10)
samples <- lapply(10^(2:6),f)
t(sapply(samples,function(x)c(n=length(x),table(x)/length(x))))
#          n        1        2        3        4
# [1,] 1e+02 0.090000 0.220000 0.260000 0.430000
# [2,] 1e+03 0.076000 0.191000 0.309000 0.424000
# [3,] 1e+04 0.095300 0.200200 0.310100 0.394400
# [4,] 1e+05 0.099720 0.199800 0.302250 0.398230
# [5,] 1e+06 0.099661 0.199995 0.300223 0.400121

如果您需要具有恰好这些比例的随机样本,请使用rep(...)并随机化顺序。

g <- function(n) rep(1:4,n*(1:4)/10)[sample(1:n,n)]
samples <- lapply(10^(2:6),g)
t(sapply(samples,function(x)c(n=length(x),table(x)/length(x))))
#          n   1   2   3   4
# [1,] 1e+02 0.1 0.2 0.3 0.4
# [2,] 1e+03 0.1 0.2 0.3 0.4
# [3,] 1e+04 0.1 0.2 0.3 0.4
# [4,] 1e+05 0.1 0.2 0.3 0.4
# [5,] 1e+06 0.1 0.2 0.3 0.4