科学の箱

科学・IT・登山の話題

R 機械学習

R Dataset – bone

投稿日:2014年1月31日 更新日:

データの説明

261人の子供たちから得られた年齢別骨密度。

フォーマット

  • idnum: 識別コード
  • age: 測定時の年齢
  • gender: 性別
  • spnbmd: 骨密度

チェック

テーブル全体について理解する

> dim(bone)
[1] 485   4

> names(bone)
[1] "idnum"  "age"    "gender" "spnbmd"
> sapply(bone[1,], class)
    idnum       age    gender    spnbmd 
"integer" "numeric"  "factor" "numeric" 

> str(bone)
'data.frame':   485 obs. of  4 variables:
 $ idnum : int  1 1 1 2 2 2 3 3 3 4 ...
 $ age   : num  11.7 12.7 13.8 13.2 14.3 ...
 $ gender: Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 1 ...
 $ spnbmd: num  0.01808 0.06011 0.00586 0.01026 0.21053 ...

> head(bone)
  idnum   age gender      spnbmd
1     1 11.70   male 0.018080670
2     1 12.70   male 0.060109290
3     1 13.75   male 0.005857545
4     2 13.25   male 0.010263930
5     2 14.30   male 0.210526300
6     2 15.30   male 0.040843210

> summary(bone)
     idnum            age           gender        spnbmd         
 Min.   :  1.0   Min.   : 9.40   female:259   Min.   :-0.064103  
 1st Qu.: 60.0   1st Qu.:12.70   male  :226   1st Qu.: 0.005858  
 Median :124.0   Median :15.40                Median : 0.026591  
 Mean   :151.5   Mean   :16.10                Mean   : 0.039252  
 3rd Qu.:240.0   3rd Qu.:19.15                3rd Qu.: 0.064127  
 Max.   :384.0   Max.   :25.55                Max.   : 0.219913

個々の項目についてチェックする

> unique(bone$gender)
[1] male   female
Levels: female male

> table(bone$gender)
female   male 
   259    226

クロス集計

missing valueをみつける – gender

> any(is.na(bone$gender))
[1] FALSE

mising valueを見つける – spnbmd

boxplot(bone$spnbmd ~ bone$spnbmd != 0)

spnbmd0

データに関するメモ

  • idnum, ageでユニークになる
  • idnum, ageでデータを追いかけてもあまり意味がなさそう
  • ageあるいは男女別で層別にする
  • 数値データはspnbmdのみ
  • age, gender, spnbmdで回帰分析できそう

Tidy Data

Rで与えられているデータなのでTidyである前提で扱う。

Exploratory

メモ

  • 年齢と骨密度は相関しているはず
  • 男女で差があるはず
  • 個人の年齢別についてはなにか意味があるか

やってみること

  • 年齢と骨密度の散布図、男女で層別
  • 年齢別ヒストグラム
  • 年齢別男女別ヒストグラム
  • 骨密度の平均と分散の算出

対象者別観察数

> barplot(table(bone$idnum), col="blue")

observe

  • 観察数は最大で3、半数位が1となっている。IDが後半になると観察数が少なくなる傾向がある。

骨密度の男女別概観

> boxplot(bone$spnbmd ~ as.factor(bone$gender), col=c("red", "blue"), varwidth=TRUE)

boxplot

平均が男女で大きく異なることを予測していたがそれほど変わらない。女子が広がりが大きい。これは外れ値の出方にも共通している。

骨密度の分布をみる

hist(bone$spnbmd, breaks=50, col="blue", main="Spine bmd")

hist

平滑にして男女別で比べてみる

dens  <- density(bone$spnbmd)
dens.m <- density(bone$spnbmd[which(bone$gender=="male")])
dens.w <- density(bone$spnbmd[which(bone$gender=="female")])
plot(dens, lwd=3, col="black")
lines(dens.m, lwd=3, col="blue")
lines(dens.f, lwd=3, col="red")

dens

  • 男女別で骨密度に大きな違いは見られない。ただし年齢別にすると異なる可能性がある。
  • 骨密度の分布は0.01-0.0.3付近にピークがあり、ロングテールで0.25まで伸びている。
  • 正規分布とはいえない。

年齢と骨密度の散布図

 plot(spnbmd ~ age, data=bone, col=as.numeric(gender) + 1)

plot

  • 男女別にするとトレンドがある、ただし線形回帰ではない
  • 年齢が高くなるほど分散が小さいので予測可能
  • 年齢が低いときにははずれ値がある。これをはずして予測はできないか。
  • 移動平均でのプロットがあると便利かも

年齢別男女別で骨密度を見てみる

agegroup <- cut2(bone$age, g=5)
plot(spnbmd ~ age, data=bone, col=agegroup, cex=0.5, pch=as.numeric(bone$gender)+1)

plot

モデル

メタ情報

inarticle



メタ情報

inarticle



-R, 機械学習
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Rで%>%を利用する。

rvestでスクレイピングをしようとしたら、%>%という記述が大量頻出。これ何かということで調べてみた。 https://stackoverflow.com/questions/24536154 …

no image

分散分析のcase study

分散分析についてcase studyをしてみる。目的はRで分散分析を実行する際の手順を明確にすること、およびそれに付随するRの関数を理解することである。 目標として以下をあげておく テストデータを含め …

no image

findFn{sos}

findFn{sos} findFn(string, maxPages = 20, sortby = NULL, verbose = 1, …) 文字列から関数を探すことができる。パッケー …

no image

データ分析の基本と業務

開発生産性は調和平均で計算する。 安全性の在庫の計算には正規分布を利用できる。 標準偏差=5であることを利用すると何が言えるか。 Z=1.96で95%をカバーする。 よって 5 x 1.96でほぼ10 …

no image

Rでグラフを作成するときに参考にするサイト

金子 邦彦 研究室 Web ページ バイオスタティスティクス 奥村 晴彦研究室 Related posts:data.frameについて注意すること分散分析のcase study検定力分析(パワーアナ …

2014年1月
« 12月   2月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

side bar top



アーカイブ

カテゴリー