基于条件概率及已有模拟数据生成0/1变量A3的问题咨询
解决方案:根据条件生成A3变量
方法1:Base R实现
直接用嵌套ifelse定义概率,再通过rbinom生成0/1变量:
set.seed(47) df <- data.frame(A1 = rnorm(1000, mean=0.7, sd=0.1), A2 = rnorm(1000, mean=4, sd=1)) # 计算每个观测对应的A3取1的概率 df$p_A3 <- ifelse(df$A1 >= 0.7 & df$A2 >= 0.8, 0.7, ifelse(df$A1 >= 0.7 & df$A2 < 0.8, 0.3, ifelse(df$A1 < 0.7 & df$A2 >= 0.8, 0.9, 0.1))) # 生成A3变量(0=失败,1=通过) df$A3 <- rbinom(nrow(df), size=1, prob=df$p_A3)
方法2:dplyr实现(代码更易读)
用case_when清晰定义多条件逻辑,适合复杂规则场景:
library(dplyr) set.seed(47) df <- data.frame(A1 = rnorm(1000, mean=0.7, sd=0.1), A2 = rnorm(1000, mean=4, sd=1)) df <- df %>% mutate( # 定义每个观测的A3取1概率 p_A3 = case_when( A1 >= 0.7 & A2 >= 0.8 ~ 0.7, A1 >= 0.7 & A2 < 0.8 ~ 0.3, A1 < 0.7 & A2 >= 0.8 ~ 0.9, TRUE ~ 0.1 # 匹配剩余的A1<0.7且A2<0.8的情况 ), # 生成A3变量 A3 = rbinom(n(), size=1, prob=p_A3) )
验证结果(可选)
可以通过分组统计验证A3的比例是否符合设定概率:
df %>% mutate( A1_status = ifelse(A1 >= 0.7, "通过", "失败"), A2_status = ifelse(A2 >= 0.8, "通过", "失败") ) %>% group_by(A1_status, A2_status) %>% summarise( 样本量 = n(), A3通过比例 = mean(A3) )
内容的提问来源于stack exchange,提问作者Language. Do you believe in it
相关产品推荐
相关产品推荐

