53912


性別によって心疾患の罹患割合が違うデータを作成したいとする

[code]

    n <- 100
    id <- 1:n
    sex <- rbinom(n,1,0.6)
    X <- data.frame(id,sex)
    riskA <- 0.20
    riskB <- 0.05
    X$card <- ifelse(X$sex==1,rbinom(1,1,riskA),rbinom(1,1,riskB))
    summary(X$card)
    
[/code]

とすると、なぜか全てゼロになります。

なぜでしょうか？  
どうすれば作成できるのでしょうか？


CC BY-SA 4.0
2019-04-04T04:29:44.943
53905
2019-04-04T06:39:17.553
2019-04-04T04:42:40.897
31615
31615
question
r
Rで二項分布がデータフレームで機能しない


rbinom(1,1,riskA) ではなく rbinom(n,1,riskA) のようにすると  
うまくいくと思います。

[code]

    library(tidyverse)
    X$card <- ifelse(X$sex==1,rbinom(n,1,riskA),rbinom(n,1,riskB))
    summary(X$card)
    X %>%
        group_by(sex) %>%
        summarise(M = mean(card))
    
[/code]

で確かめて下さい。

以下の説明は伝わりにくいかもしれません。  
rbinomの最初の引数は返す乱数の個数です。  
なので1にすると X$sex==0 と X$sex==1 の場合とで  
それぞれ固定された数（rbinom(1,1,riskA)の返り値とrbinom(1,1,riskB)の返り値）  
がX$cardに代入されることになります。

rbinom(n,1,riskA)およびrbinom(n,1,riskB)の場合には  
それぞれ作成されたn個の乱数からsexに応じて値が選ばれます。

また、今回の場合  
riskA <\- 0.20  
riskB <\- 0.05  
と1を返す確率が小さいため0となりやすいため  
すべて0となったものと考えられます。


CC BY-SA 4.0
2019-04-04T06:39:17.553
53912
2019-04-04T06:39:17.553
20086
53905
answer