我在理解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
答案 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