0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rでの性別、身長、体重、血液型データの作成方法

Last updated at Posted at 2021-02-17

はじめに

こちらの記事で作成したデータをもっと扱いやすいデータフレームにきちんとまとめようと思い執筆。男女の割合をデータ数に反映する事など改良を行った。データ生成の参考文献については、記事末尾に記載した。

※追記:2021/02/18 コメントで頂いた通り、性別と血液型の生成に sample 関数を使う場合のコードも示した。

データ生成

$N$人についてランダムサンプルを行った際の性別、身長、体重、血液型の模擬データの作成コードを以下に示す。最初の変数指定でデータのパラメータが調整可能なようにした。

###パラメータ
#人口の男女比
male <- 6143 #万人
female <- 6480 #万人

#男女の身長、BMIの値
male.height.mean <- 171.7 #cm
male.height.sd <- 6.6 #cm
male.bmi.mean <- 23.12
male.bmi.sd <- 4.24
female.height.mean <- 158.3 #cm
female.height.sd <- 5.7 #cm
female.bmi.mean <- 20.82
female.bmi.sd <- 3.42

#血液型の割合
A <- 0.39
B <- 0.22
O <- 0.29
AB <- 0.10

#データ数
N <- 1000


###男女のベクトルを作成
mf <- c()
for(i in 1:N){
  tmp <- runif(1)
  if (tmp < (male/(male+female))) mf <- c(mf, "male")
  else                            mf <- c(mf, "female")
}

###血液型のベクトルを作成
bt <- c()
for(i in 1:N){
  tmp <- runif(1)
  if (tmp < A)                           bt <- c(bt, "A")
  else if (A <= tmp & tmp < (A+B))       bt <- c(bt, "B")
  else if ((A+B) <= tmp & tmp < (A+B+O)) bt <- c(bt, "O")
  else                                   bt <- c(bt, "AB")
}

###身長、体重のベクトルを作成
h <- c()
w <- c()
for (i in 1:N) {
  if (mf[i] == "male") {
    height <- rnorm(n=1,mean=male.height.mean,sd=male.height.sd)
    bmi <- rnorm(n=1,mean=male.bmi.mean,sd=male.bmi.sd)
  } else {
    height <- rnorm(n=1,mean=female.height.mean,sd=female.height.sd)
    bmi <- rnorm(n=1,mean=female.bmi.mean,sd=female.bmi.sd)
  }
  weight <- (height * 0.01)^2 * bmi
  h <- c(h, height)
  w <- c(w, weight)
}

###data.frame化
df <- data.frame(SEX=mf,HEIGHT=h,WEIGHT=w,BLOOD=bt)

生成されたデータを見てみると…、

コード
head(df)
出力
     SEX   HEIGHT   WEIGHT BLOOD
1 female 158.4726 40.46012     B
2   male 178.1273 68.64015     A
3   male 176.7241 65.13530     O
4 female 166.6573 44.02083     A
5   male 168.1153 57.24288     A
6   male 179.5274 82.10058     A

となる。一応できてそう。

sample 関数を使った場合

上記のコードの26行目から42行目を下記の様に書き換える。

###男女のベクトルを作成
mf <- sample(c("male","female"), N, replace = TRUE, prob = c(male, female))

###血液型のベクトルを作成
bt <- sample(c("A","B","O","AB"), N, replace = TRUE, prob = c(A,B,O,AB))

こうすると1行で書けるのでだいぶすっきりする。コメントありがとうございました!

データの可視化

作成したデータの可視化についてはこちらの記事でいろいろなプロットを作ってみる事とする。

参考文献

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?