在R中创建指定概率及观测数的二元变量的实现方法咨询
生成指定概率的二分类变量
嘿,当然可以用ifelse来实现你的需求!不过还有更简洁高效的方法,我两种都给你说明白:
方法一:结合runif和ifelse(匹配你的思路)
你可以先生成一组均匀分布的随机数,再用ifelse根据概率阈值来赋值:
# 设置随机种子(可选,保证结果可重复) set.seed(123) # 生成50000个0-1之间的均匀分布随机数 uniform_samples <- runif(n = 50000) # 用ifelse判断:60%概率取0,剩余40%取1 Var <- ifelse(uniform_samples <= 0.6, 0, 1)
原理很简单:runif(n)生成的数值在0到1之间均匀分布,所以有60%的概率落在[0, 0.6]区间内,这时候我们让它取0,剩下的区间取1,完美匹配你的概率要求。
方法二:用rbinom直接生成(更高效)
其实R里有专门生成二分类变量的函数rbinom,它是生成二项分布的随机数,当size=1时就是伯努利分布,刚好对应你的需求:
set.seed(123) # n是观测数,size=1表示每个观测是一次伯努利试验,prob是取1的概率 Var <- rbinom(n = 50000, size = 1, prob = 0.4)
这里prob=0.4代表取1的概率是40%,自然取0的概率就是60%,这个方法比ifelse更简洁,处理大数据量时效率也更高。
验证概率是否符合预期
你可以用下面的代码检查生成的变量比例:
table(Var) / length(Var)
运行后会输出类似下面的结果,比例会非常接近你设定的60%和40%:
0 1 0.59872 0.40128
内容的提问来源于stack exchange,提问作者MGaius
相关产品推荐
相关产品推荐

