1

我在一个非常基本的问题上遇到了一些问题。我试图找到任何有相同问题但找不到的线程。

我试图弄清楚如何根据我为每个观察生成的概率(z )生成伯努利变量( y )。我生成了下面的虚构数据集来代表我的问题。

x <- c("A", "B", "C", "D", "E", "F")
z <- c(0.11, 0.23, 0.25, 0.06, 0.1, 0.032)

df <- data.frame(x, z)

我想添加变量y,它是基于变量z的概率的二进制变量。

我尝试了以下方法:

df <- df %>%
  mutate(y = rbinom(1,1,z))

但似乎它为所有观察赋予了相同的价值,而不是基于观察自身的概率。

有谁知道如何解决这个问题?

谢谢!

4

1 回答 1

3

从在线文档rbinom

rbinom(n, size, prob)
n: number of observations. If length(n) > 1, the length is taken to be the number required.

所以

df <- df %>%
  mutate(y = rbinom(nrow(df), 1, z))
df
> df
  x     z y
1 A 0.110 0
2 B 0.230 1
3 C 0.250 0
4 D 0.060 0
5 E 0.100 0
6 F 0.032 0

为了证明事件以正确的概率生成:

df <- data.frame(x=rep(x, each=500), z=rep(z, each=500))
df <- df %>%
  mutate(y = rbinom(nrow(df), 1, z))
df %>% group_by(x) %>% summarise(y=mean(y), groups="drop")
# A tibble: 6 x 2
  x         y
  <fct> <dbl>
1 A     0.114
2 B     0.232
3 C     0.25 
4 D     0.06 
5 E     0.106
6 F     0.018
于 2020-07-20T10:18:42.517 回答