如何在 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 1
s:
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
rep
的 times
参数可以是非整数,如文档中所述。
? 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
我想在 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 1
s:
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
rep
的 times
参数可以是非整数,如文档中所述。
? 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