科学の箱

科学・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

dataanalysis-002-week2

Structure of Data Analysis 質問を定義する 理想的なデータセットの定義 アクセスできるデータの検索 データの取得 クレンジング Exploratory 統計的予測・モデリング …

no image

R Dataset – AirPassengers

データの説明 1949~1960年における月別飛行機搭乗者数 フォーマット このデータは時系列データであることがわかる。 > str(AirPassengers)  Time-Series [1 …

no image

tracertの分析

tracertを繰り返し実行した結果を分析し、経路上のホストについてどの程度時間がかかっているかを分析してみる。 tracertの結果は以下のように取得される。 $ tracert www.googl …

no image

線形回帰とリッジ回帰を比較する

リッジ回帰はL2ノルムの正則項を導入することで、過学習を防ぐ。この場合過学習を防ぐとは、重みを0の方向に動かすという意味である。実際に線形回帰とリッジ回帰を比べてみて、どのようにモデルが変わるかを確認 …

no image

Pythonではじめる機械学習 – KDE

カーネル密度分布とは カーネル密度分布とは一言でいうと滑らかなヒストグラムであり曲線になっている。標本データから確率密度を計算することにより標本がない部分についても確率密度を計算できる。 例えば犯罪の …

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

side bar top



アーカイブ

カテゴリー