在 R 中给定特定概率值生成随机数(0 和 1)
Generating random numbers (0 and 1) given specific probability values in R
我在 R 中找不到这个问题的答案。
我想生成一个 0 到 1 的随机样本 'RandomSample'。对于每个样本,我希望有特定数量的值 'numval',这些值是从向量 'Prob' 的长度派生的。 'Prob' 给我每个点为 0 或 1 的概率值。因此在这种情况下,第一个数字的概率值为 0.9 为 1,0.1 为 0。依此类推。然后,我想重复随机样本生成 1000 次。我有一个脚本(如下)生成随机 0 和 1,但我缺少给出概率值的组件。非常感谢您的帮助 - 我对 R 还很陌生。
Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
RandomSample <- list()
zeroones <- c(0,1)
rep = 1000
numval <- length(Prob)
for (i in 1:rep) RandomSample[[i]] <- c(sample(zeroones,numval,replace = TRUE))
t(sapply(RandomSample, unlist, simplify = TRUE))
你可以使用 rbinom()
:
Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03) #specify vector of probabilities
niter<- 1000 #number of iterations
randomSample<-rbinom(niter,1,prob=rep(Prob,niter)) #randomly sample from binomial with vector of probabilities.
您可以使用 rbinom()
从二项分布中生成随机样本。
试试这个:
prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
rbinom(length(prob), size = 1, prob=prob)
[1] 1 1 1 0 0 0 0 1 0 0
为了证明概率实际上是您所追求的,请尝试使用 replicate()
使用您的概率重复抽取样本:
x <- t(replicate(100, rbinom(length(prob), size = 1, prob=prob)))
head(x)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 1 1 1 1 0 0 1 0
[2,] 1 1 1 1 0 1 0 1 0 0
[3,] 1 0 1 1 0 0 0 1 0 0
[4,] 1 0 1 0 0 1 0 0 1 0
[5,] 1 1 1 1 0 0 0 0 0 0
[6,] 1 0 0 0 0 0 0 0 0 0
现在您可以使用 colMeans()
将实际实现的概率与您的规格进行比较:
colMeans(x)
[1] 0.93 0.28 0.61 0.67 0.25 0.43 0.11 0.29 0.40 0.01
我在 R 中找不到这个问题的答案。 我想生成一个 0 到 1 的随机样本 'RandomSample'。对于每个样本,我希望有特定数量的值 'numval',这些值是从向量 'Prob' 的长度派生的。 'Prob' 给我每个点为 0 或 1 的概率值。因此在这种情况下,第一个数字的概率值为 0.9 为 1,0.1 为 0。依此类推。然后,我想重复随机样本生成 1000 次。我有一个脚本(如下)生成随机 0 和 1,但我缺少给出概率值的组件。非常感谢您的帮助 - 我对 R 还很陌生。
Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
RandomSample <- list()
zeroones <- c(0,1)
rep = 1000
numval <- length(Prob)
for (i in 1:rep) RandomSample[[i]] <- c(sample(zeroones,numval,replace = TRUE))
t(sapply(RandomSample, unlist, simplify = TRUE))
你可以使用 rbinom()
:
Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03) #specify vector of probabilities
niter<- 1000 #number of iterations
randomSample<-rbinom(niter,1,prob=rep(Prob,niter)) #randomly sample from binomial with vector of probabilities.
您可以使用 rbinom()
从二项分布中生成随机样本。
试试这个:
prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
rbinom(length(prob), size = 1, prob=prob)
[1] 1 1 1 0 0 0 0 1 0 0
为了证明概率实际上是您所追求的,请尝试使用 replicate()
使用您的概率重复抽取样本:
x <- t(replicate(100, rbinom(length(prob), size = 1, prob=prob)))
head(x)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 1 1 1 1 0 0 1 0
[2,] 1 1 1 1 0 1 0 1 0 0
[3,] 1 0 1 1 0 0 0 1 0 0
[4,] 1 0 1 0 0 1 0 0 1 0
[5,] 1 1 1 1 0 0 0 0 0 0
[6,] 1 0 0 0 0 0 0 0 0 0
现在您可以使用 colMeans()
将实际实现的概率与您的规格进行比较:
colMeans(x)
[1] 0.93 0.28 0.61 0.67 0.25 0.43 0.11 0.29 0.40 0.01