質問: 性別によって心疾患の罹患割合が違うデータを作成したいとする ``` 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) ``` とすると、なぜか全てゼロになります。 なぜでしょうか? どうすれば作成できるのでしょうか?
回答: rbinom(1,1,riskA) ではなく rbinom(n,1,riskA) のようにすると うまくいくと思います。 ``` 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)) ``` で確かめて下さい。 以下の説明は伝わりにくいかもしれません。 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となったものと考えられます。