从以从标准正态分布中提取的向量为条件的二项式分布中提取

Drawing from a binomial distribution conditional on a vector drawn from standard normal distribution

我正在尝试模拟数据,其中数据生成过程是 p(X, Y) = p(X)p(Z|X),其中二进制 Z 的分布取决于 X 的值,即从标准正态分布生成。

X 由下面的代码生成。

X <- rnorm(100, 0, 1)

我如何生成以 X 为条件的向量 Y? 我最初的想法是以某种方式使用 X 生成概率向量 P,然后 运行 下面的代码,但没有成功。

sapply(P,function(Y){rbinom(1,1,Y)})

X 会在 -Inf+Inf 之间变化,因此这不能作为二项分布所需的概率,但 pnorm(X) 会给你 0 到 1 的值,然后使用 ifelse() 语句将低于 .05 的值转换为 .05,将高于 .95 的值转换为 .95:

X <- rnorm(100)   # 0, 1 are the default values
Xp <- pnorm(X)    # transform to probabilities
Xp <- ifelse(Xp < .05, .05, ifelse(Xp > .95, .95, Xp)) # Bound the results
vals <- rbinom(length(Xp), 1, Xp)  # Your binary values