如何在 R 和 Stata 中创建一个包含 2000 个观测值的随机虚拟变量?

How can I create a random dummy variable of 2000 observations in R and Stata?

我想在 R 或 Stata 中创建一个随机虚拟变量(1 和 0),但是我怎样才能做到这一点,例如,70% 的观察值是 1,其余的是 0。谢谢

这是一种方法 sample 来自 base R:

sample(c(1,0), size = 2000, prob = c(0.7,0.3), replace = TRUE)
# [1] 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 1 0 0 1 1 1 1
#[58] 1 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1

正如@Ben Bolker 在评论中指出的那样,恰好 1400 是 1

是不寻常的

这种方法将产生恰好 1400 1s:

sample(rep(c(1,0),c(1400,600)), 2000)

如果您想要 正好 70% 的 1(或任何其他百分比),但 随机排序 元素,您可以使用此功能。

random_binary <- function(n, p){
  # p is the proportion of 1s
  x <- c(rep(1, times=n * p), rep(0, times=n * (1 - p)))
  x[sample(length(x))] # or sample(x)
}

random_binary(10, 0.7)
#[1] 1 0 1 1 0 0 1 1 1 1

reptimes 参数可以是非整数,如文档中所述。

? rep

times

A double vector is accepted, other inputs being coerced to an integer or double vector.

但请注意,您可能无法准确获得所需的百分比(但尽可能接近)。

另一种方法是使用 rbinom,因为我们实际上是从二项分布中抽样的。

rbinom(10, size=1, p=0.7)
# [1] 0 0 0 0 1 1 1 0 1 0

这类似于带有 prob 参数的 sample,并且如上所示,不保证 return 正好是 1 的 70%。

在 Stata 中恰好有 70% 的 1 和 30% 的 0

set obs 2000
set seed 1606
gen wanted = cond(_n <= 70, 1, 0) 
gen random = runiform()
sort random 

对于大约 70% 的 1 和 30% 的 0

gen better = runiform() < 0.7