【问题标题】:Binomial distribution by row using R使用 R 按行进行二项式分布
【发布时间】:2018-04-04 09:33:48
【问题描述】:

有两列,ID和概率

        ID probability
        1  0.5
        2  0.8
        3  0.3

我想模拟每个 ID 的疾病状态,0 代表健康,1 代表生病。每个 ID 生病的概率在第二列。

我试过了

df$sick <- rbinom(1,1,df$probability)

但我要么全零要么全一。我究竟做错了什么?提前感谢您的帮助!

【问题讨论】:

  • 试试rbinom(nrow(df), 1, df$probability)。由于您正在模拟 only one 随机二项式数字,因此整个列向量 sick 等于该数字。你必须模拟nrow(df) 数字才能得到你想要的。
  • 我正在尝试模拟我的 ID 是否生病/健康,因此选择了二项分布。所以 ID1 有 50% 的几率生病,ID2 有 80% 等等。我将运行模拟几百次,想知道 ID1 生病/健康的次数(0/1)。我知道如何循环,但无法为每个 ID 分配不同的结果概率。
  • 参数prob 是矢量化的,因此您不必循环。这 3 个随机数中的每一个都将使用不同的 prob(向量中的值 df$probability)生成。

标签: r simulation distribution


【解决方案1】:

您的问题是,您仅将 n 设置为 1,因此 rbinom 仅返回一个可用于所有行的值(根据 R 的标准重用规则)。见?rbinom。像这样的东西应该可以解决问题:

df <- read.table(header=TRUE,text = "ID probability
    1  0.5
    2  0.8
    3  0.3")

df$sick <- rbinom(n = nrow(df), size = 1, prob = df$probability)
print(df)
#  ID probability sick
#1  1         0.5    1
#2  2         0.8    1
#3  3         0.3    0

【讨论】:

  • 感谢您的清晰解释和解决方案!它就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2019-08-02
  • 2021-10-11
相关资源
最近更新 更多