Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

環境化学データ解析入門: 愛媛大講演資料 160728

3,698 views

Published on

愛媛大学で講演させて頂いた環境化学データ入門についてのスライドです。誤りもあるかもしれませんがお手柔らかにお願いします。

Published in: Data & Analytics
  • Be the first to comment

環境化学データ解析入門: 愛媛大講演資料 160728

  1. 1. 環境化学のデータ解析 Twi$er: @siero5335 @Ehime_Univ. 20160728
  2. 2. 注意 それなりにデータ解析について勉強はしましたが、独学 の上、解析の専門家ではないので背景、理論などには 間違いがある可能性があります。 使うときには鵜呑みにせず、自分でもある程度調べるよ うにしてください。
  3. 3. 目次 環境化学分野における多変量データ解析の必要性 R, Rstudio, EZRの紹介 データ読み込み, 編集: Rstudio データ集計: summary データの可視化: ggplot2, Plotly 検定: Welch’s t 検定, Brunner-Munzel 検定 統計モデル: 一般化線形モデル glm 機械学習: 主成分分析, caret 解析再現性, レポーティング: RMarkdown
  4. 4. 背景 社会におけるデータ解析の重要性が上昇(ビッグデータ等) 意思決定の場における客観的な指標や、正確な将来予測 に基づいた行動を取らないと、解析結果を運用している組 織と戦えない ちかごろでは大きいデータを持っている会社(検索、広告、 ソーシャルゲーム等)が活発に人材を収集 化学分析・機器メーカーなども少しづつ解析ができる人が必 要だと考えている空気を感じる
  5. 5. 環境化学分野における多変量データ解析の必要性 環境化学は総合的な学問 → 色々なデータが得られる (濃度, 毒性, 時間, 場所...) 濃度1つをとっても多用な化学物質、異性体を対象にするた め、データ量が増大 採取地域、個体情報、アウトカム、物性などが組み合わさる ことで解析が複雑化 どこから手を付けたら良いのかよくわからない 謎の卒業生に謎のツッコミを受けるがよくわからない
  6. 6. 環境化学分野における多変量データ解析の必要性  いきなり色々やるのは無理!  ただでさえ測定やゼミで大変なのに厳しい ある程度手順を作ればむしろ楽になるかも?
  7. 7. 実験で忙しい学生のための 環境化学のデータ解析
  8. 8. Rを使う ご存知R, 最新版はver 3.3.1 バージョンが古すぎると動かないパッケージがあったりす るので、気がついたらたまに更新したほうが良い。 ここからダウンロード h$ps://cran.r-project.org/ ベースになるプログラムなのでこれがないとこの後で 紹介するものも動いていくれない(EZRは動く?)
  9. 9. RstudioからRを使う 生のRはわりとそっけない Rエディタを使えばコンソールに直打ちしなくて済むし、 解析結果も保存しておけるけどもうちょっと便利に使いたい h$ps://www.rstudio.com/products/rstudio/ ここからダウンロード
  10. 10. RstudioからRを使う さらに移動 OSに合ったバージョンをダウンロード
  11. 11. どう変わる? ・現在使用しているデータやパッケージの管理が容易 ・作ったグラフのコピペが簡単 ・コード補完が強力なのでミスタイプが減る ・作業記録を残しやすいので再現性が上がる
  12. 12. どう変わる? ・現在使用しているデータやパッケージの管理が容易 ・作ったグラフのコピペが簡単 ・コード補完が強力なのでミスタイプが減る ・作業記録を残しやすいので再現性が上がる コマンド覚えるのは辛い場合は?
  13. 13. マウスで解析したい人のためのEZR h$p://www.jichi.ac.jp/saitama-sct/SaitamaHP.files/statmed.html
  14. 14. マウスで解析したい人のためのEZR h$p://www.jichi.ac.jp/saitama-sct/SaitamaHP.files/statmed.html これらを使えばある程度の解析ができる環境は整う
  15. 15. 今回はRstudioをベースに解説 (マウス操作のEZRであれば見たらなんとなくわかると信じて) マウスで解析したい人のためのEZR h$p://www.jichi.ac.jp/saitama-sct/SaitamaHP.files/statmed.html
  16. 16. データの読み込み CSV, エクセルファイルいずれも読み込み可能 (Preview版: h3ps://www.rstudio.com/products/rstudio/download/preview/) CSVファイルの読み込みが可能
  17. 17. 道具は手に入ったけど何からすべき? 初手検定、統計モデリング、機械学習や!
  18. 18. 道具は手に入ったけど何からすべき? 初手検定、統計モデリング、機械学習や! データの分布・正規性は確認した? なぜその因子を組み込んだ/組み込んでいないの? 欠損値・外れ値の影響はどう? そもそもデータ解析で何を明らかにしたいの?
  19. 19. 道具は手に入ったけど何からすべき? 初手検定、統計モデリング、機械学習や! データの分布・正規性は確認した? なぜその因子を組み込んだ/組み込んでいないの? 欠損値・外れ値の影響はどう? そもそもデータ解析で何を明らかにしたいの? 目的をまず設定する必要がある 初めに集計・可視化してデータの特徴を見るべき
  20. 20. 集計: summary() 関数 summary() 関数: () の中にデータセットの名前を入れて使う 今回のために作成したテストデータは下記にup済み 一部省略していることもありますがコード見ながら再現してもらえると幸いです。 h$ps://github.com/siero5335/test_data_PCB/blob/master/testdata.csv
  21. 21. 集計: summary() 関数 summary() 関数: () の中にデータセットの名前を入れて使う 最初に取り込んだ時には要素 (factor) で入っていて欲しいデータが 文字(character)で読み込まれているので下記コードでfactorにする
  22. 22. 集計: summary() 関数 summary() 関数: () の中にデータセットの名前を入れて使う データセット名$要素名で各要素にアクセス可能
  23. 23. 集計: summary() 関数 summary() 関数: () の中にデータセットの名前を入れて使う データセット名$要素名で各要素にアクセス可能 素早くTable用のデータを作ることができる
  24. 24. 可視化: ggplot2 package 層になるデータを加えると図が更新 ggplot(データ名, aes(要素1, 要素2)) + geom_point()で散布図が書ける
  25. 25. 可視化: ggplot2 package 思いつきで追加するのも簡単 さっきの図に + で加えるだけ
  26. 26. 可視化: ggplot2 package, 散布図のメリット 外れ値・入力ミスの発見などにも向くの で気になる要素についてはどんどん作 図する →作図から仮説が得られることも 今回の場合は身長、体重が入れ替わっ ている そうでない部分では相関がありそうに見 える 一般的に男性の方が身長、体重高め
  27. 27. 可視化: ggplot2 package, ヒストグラム データの分布を可視化するならヒストグラム 層化も可能
  28. 28. 可視化: corrplot package 相関解析の結果をまとめて確認したいという需要は多い 相関、相関係数を一気に表記 data_cor <- testdata[, -c(1, 3, 7:9)] #数値の列だけ抜き出す M <- cor(data_cor, method='spearman', use='pairwise.complete.obs') #methodの変更可能 corrplot.mixed(M, order = 'hclust') #近いクラスタを近くに 散布図行列を書くには: h$p://statmodeling.hatenablog.com/entry/sca$er-plot-matrix
  29. 29. 正規性の検定 コルモゴロフ・スミルノフ検定: Kolmogorov-Smirnov test ks.test(データ名,"pnorm",mean=mean(データ名),sd=sd(データ名)) シャピロ・ウィルク検定 shapiro.test(データ名) どっちじゃないとだめと言われることはあんまりない。 コルモゴロフ・スミルノフ検定の場合、“pnorm”部分を ppoisやpunifに変えるとポアソン分布や一様分布に変えて検定可 データセット名$要素名
  30. 30. 正規性の検定 コルモゴロフ・スミルノフ検定: Kolmogorov-Smirnov test ks.test(データ名,"pnorm",mean=mean(データ名),sd=sd(データ名)) シャピロ・ウィルク検定 shapiro.test(データ名) サンプルサイズが大きい場合はシャピロ・ウィルク検定では違いがあ まり出ず、逆の場合はコルモゴロフ・スミノルフ検定では違いが出ない という感じ。 データセット名$要素名 StatsBeginner: 初学者の統計学習ノート: 正規性の検定の違い h$p://statsbeginner.hatenablog.com/entry/2014/08/13/115744
  31. 31. 手法 正規性 等分散性 関数 Package Student’s t 要 要 t.test(group1, group2, var.equal=T) 不要 Welch’s t 要 不要 t.test(group1, group2, var.equal=F) 不要 Mann-Whitney 不要 要 wilcox.test(group1, group2) 不要 Brunner-Munzel 不要 不要 brunner.munzel.test(x,y) library(lawstat) 検定: Welch’s t 検定, Brunner-Munzel 検定 ほくそ笑む:マイナーだけど最強の統計的検定 Brunner-Munzel 検定: h$p://d.hatena.ne.jp/hoxo_m/20150217/p1 Brunner-Munzel検定: h$p://oku.edu.mie-u.ac.jp/~okumura/stat/brunner-munzel.html 正規性のある場合の検定だとStudent’s t 検定, ない時だとMann- Whitneyがしょっちゅう使われるが、等分散性が必要なことはあまり 知られてない。 Welch’s t 検定, Brunner-Munzel検定はあまり有名ではないが強力 な手法。使ってみてもいいかも? 理論の詳細は上記ブログに詳細。
  32. 32. 統計モデル: 一般化線形モデル glm 相関と回帰は別のもの 相関: 2つの変数のバラつきを見る スピアマン: cor(x, y, method="spearman") ピアソン: cor.test(x, y, method="pearson") 単回帰: 一つの変数 xの値からyの値を予測 glm(Y~X1, data = データ名, family = 分布の名前(リンク関数)) 重回帰: 複数の変数 xの値からyの値を予測 glm(Y~X1 + X2..., data = データ名, family =分布の名前(リンク関数)) とくにこれらを一般化線形モデルと呼ぶ データ中の要素名
  33. 33. 統計モデル: 一般化線形モデル glm 単回帰: 一つの変数 xの値からyの値を予測 glm(Y~X1, data = データ名, family = 分布の名前(リンク関数)) 重回帰: 複数の変数 xの値からyの値を予測 glm(Y~X1 + X2..., data = データ名, family =分布の名前(リンク関数)) 統計モデリング: 予測が目的ではあるが、従属変数が予測 にどのように関わっているのかというプロセスを解析するた めにも使われる データ中の要素名
  34. 34. 統計モデル: 一般化線形モデル glm 単回帰: 一つの変数 xの値からyの値を予測 glm(Y~X1, data = データ名, family = 分布の名前(リンク関数)) 重回帰: 複数の変数 xの値からyの値を予測 glm(Y~X1 + X2..., data = データ名, family =分布の名前(リンク関数)) なぜlmではなくglmなのか 正規性の確認でも見たように必ずしも目的変数が正規分布 に従うとは限らない 一般化線形モデルであれば正規分布に従わない目的変数 であっても、ある程度近似が可能になるためあてはまりがよ くなる データ中の要素名
  35. 35. 統計モデル: 一般化線形モデル glm 久保拓弥: 講義のーと : データ解析のための統計モデリング h3p://eprints.lib.hokudai.ac.jp/dspace/bitstream/2115/49477/4/kubostat2008c.pdf 目的変数(応答変数)の分布について気を使う
  36. 36. 統計モデル: より発展的なモデリング h3p://mc-stan.org/interfaces/rstan ベイズモデルに入門するならRstanが熱い
  37. 37. 統計モデル: より発展的なモデリング h$p://www.slideshare.net/berobero11/glmglmm-36809949
  38. 38. 統計モデル: より発展的なモデリング マニュアル日本語翻訳プロジェクト進行中 h3ps://github.com/stan-ja/stan-ja
  39. 39.  機械学習 (Machine Learning) データ解析における研究課題の一つで、人間が自然に 行っている学習能力と同様の機能をコンピュータで実現 しようとする技術・手法
  40. 40. データ解析における研究課題の一つで、人間が自然に 行っている学習能力と同様の機能をコンピュータで実現 しようとする技術・手法 ある程度の数のサンプルデータ集合を対象に解析を行 い、そのデータから有用な規則、ルール、知識表現、判 断基準などを抽出する。なおデータ集合を解析するので 統計学との関連が深い。  機械学習 (Machine Learning)
  41. 41. データ解析における研究課題の一つで、人間が自然に 行っている学習能力と同様の機能をコンピュータで実現 しようとする技術・手法 ある程度の数のサンプルデータ集合を対象に解析を行 い、そのデータから有用な規則、ルール、知識表現、判 断基準などを抽出する。なおデータ集合を解析するので 統計学との関連が深い。 例えば ? 回帰分析・主成分分析・クラスター分析・ベイズ...  機械学習 (Machine Learning)
  42. 42.  教師あり・なし学習 教師なし学習 出力したいものが最初から決まっていない 主成分分析 教師あり学習 事前情報(教師の助言)にあわせてデータをフィッ ティングする 回帰分析
  43. 43. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法
  44. 44. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法
  45. 45. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法 形・色・重さ・模様・材質など様々な情報(次元)をもつ
  46. 46. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法 形・色・重さ・模様・材質など様々な情報(次元)をもつ 影を見れば他の要素が消えて形だけの情報が残る
  47. 47. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法
  48. 48. 主成分分析(Principle component analysis, PCA) 次元を縮小・データを可視化するための手法 影しか見えないので何の影なのかは自分で考えないといけない
  49. 49. 主成分分析(Principle component analysis, PCA) 主成分分析の際には各変数の標準化が重要になる 標準化しない場合だと数値が大きく分散の絶対値が大きい因子の 寄与が大きくなってしまう
  50. 50. 主成分分析(Principle component analysis, PCA) 標準化なし 標準化あり summaryの結果
  51. 51. 主成分分析(Principle component analysis, PCA) 標準化なし 標準化あり 上記黄色部分が各種成分の寄与率を表す 標準化あり、なしで結果が大きく変わっている summaryの結果
  52. 52. 主成分分析(Principle component analysis, PCA) 標準化なし 標準化あり 上記黄色部分が各種成分の寄与率を表す 標準化あり、なしで結果が大きく変わっている →図でも確認する summaryの結果
  53. 53. 主成分分析(Principle component analysis, PCA) (98.2%) (1.04%) (47.2%) (15.7%) 標準化の有無でPlotの様子だけではなく、 寄与する因子のパターンも大きく異る なしではPCB総濃度や濃度の高いPCB異性体しか目立たないが ありでは第2主成分に身長, 体重, BMIが寄与していることが分かる
  54. 54. その他機械学習: caret package 重回帰分析 (MLR) 部分最小二乗法 (PLS) →次元縮約により潜在変数を作成 Elastic net (Enet) →正則化により不要なパラメータを削減 Support vector regression (SVR) →非線形に対応: カーネル法(高次元に射影) Gradient boosting Decision Tree (GBDT) →非線形に対応: 多重更新重み付け決定木 線形回帰と その応用
  55. 55. 重回帰分析 (MLR) 部分最小二乗法 (PLS) →次元縮約により潜在変数を作成 Elastic net (Enet) →正則化により不要なパラメータを削減 Support vector regression (SVR) →非線形に対応: カーネル法(高次元に射影) Gradient boosting Decision Tree (GBDT) →非線形に対応: 多重更新重み付け決定木 目的変数を予測するのが目的 統計モデリングとの違いは? 線形回帰と その応用 その他機械学習: caret package
  56. 56. 重回帰分析 (MLR) 部分最小二乗法 (PLS) →次元縮約により潜在変数を作成 Elastic net (Enet) →正則化により不要なパラメータを削減 Support vector regression (SVR) →非線形に対応: カーネル法(高次元に射影) Gradient boosting Decision Tree (GBDT) →非線形に対応: 多重更新重み付け決定木 従属変数の寄与よりも 予測の良さを良しとすることが多い 線形回帰と その応用 その他機械学習: caret package
  57. 57. 重回帰分析 (MLR) 部分最小二乗法 (PLS) →次元縮約により潜在変数を作成 Elastic net (Enet) →正則化により不要なパラメータを削減 Support vector regression (SVR) →非線形に対応: カーネル法(高次元に射影) Gradient boosting Decision Tree (GBDT) →非線形に対応: 多重更新重み付け決定木 GCのリテンションタイム予測, 結合能・活性の予測等 線形回帰と その応用 その他機械学習: caret package
  58. 58. 機械学習: caret package データサイエンティスト養成読本R活用編 P45参照 データ全体を訓練データと検証データに分割して検証 することで、未知データに対応可能か確認 データ 訓練データ 検証データ モデル構築 モデル検証 予測モデル Cross validationで 訓練モデルの最適化
  59. 59. 機械学習: caret package データサイエンティスト養成読本R活用編 P45参照 データ全体を訓練データと検証データに分割して検証 することで、未知データに対応可能か確認 なんか難しいしめんどくさそう → 実際闇は深い データ 訓練データ 検証データ モデル構築 モデル検証 予測モデル Cross validationで 訓練モデルの最適化
  60. 60. 機械学習: caret package データサイエンティスト養成読本R活用編 P45参照 データ 訓練データ 検証データ モデル構築 モデル検証 予測モデル Cross validationで 訓練モデルの最適化 データ全体を訓練データと検証データに分割して検証 することで、未知データに対応可能か確認 caret packageで多少改善?
  61. 61. h3p://topepo.github.io/caret/index.html Kuhn M (2008) Building predic^ve models in R using the caret package. J Stat So`w 28:1–26 機械学習: caret package さっきのフローを一括して行うためのpackage
  62. 62. 機械学習: caret package, データ分割 createDataParggon() 関数 データの分割はランダムに行われるため、解析の再現性を重視 するのであればset.seed()関数で乱数を固定しておくこと この後の解析においても乱数が絡むものであれば乱数を固定す ることで再現性上がる trainIndex <- createDataParggon( y, #目的変数, データセット$変数名で設定 gmes = 1, #何種類分割データを作るか p = 0.5) #何対何で分割するか(0.5なら半分) Train <- データ名[ trainIndex,] #分割データを入れる Test <-データ名[-trainIndex,] #分けて残ったデータを入れる
  63. 63. 機械学習: caret package, 学習の設定 trainControl 関数(とりあえずクロスバリデーションの設定のみ) example_train <- trainControl(method = "repeatedcv", number = 5, #5-fold の場合, 1つ抜きならLOOCVと記述 repeats = 3, #分割の組をいくつ作るか, LOOCVなら不要 allowParallel = TRUE) #マルチコア計算, 早く計算が終る 後で説明するtrain関数内に上記条件を記述することも可能だが、 条件を変えて色々試したいことも多いので別に記述して保存してお くのが吉 本当はもっと詳細な設定が可能、helpを参照のこと
  64. 64. 機械学習: caret package, チューニング設定 学習の際に色々設定しないと思ったほど性能が出ない 例えば? みんな大好きPLS -> 何次元目まで学習に使う? Randomforest -> 木の深さをどのくらいにするか 最近流行りの深層学習 -> 死ぬほど設定するパラメータがある (ある程度)効率良くパラメータを探索できる Randomforestなら下記 test_grid <- expand.grid(mtry = c(1:10)) #木の深さを1~10の間で探す パラメータは手法ごとに違うのでcaretのHPで確認のこと expand.grid 関数(caretにかぎらず使用可)
  65. 65. 機械学習: caret package, 学習 train 関数 set.seed(71) Fit <- train(Class ~ ., data = training, method = ”rf“, #randomforestのとき trControl = example_train, #trainControlで設定 tuneGrid = test_grid) #expand.gridで設定 上記を実行すると解析開始。誤差最小のmtryが入った結果 をFitに入れてくれる(正確には違うが…) methodの中身を入れ替えると色々なモデルが学習可能
  66. 66. 機械学習: caret package, 予測 testPred <- predict(Fit, tesgng) 新しいデータセットに対してさっき作ったモデルを当てはめ 実測値等と比較し、当てはまりの良さを確認する。 回帰分析なら cor(testPred, tesgng$outcome)など 判別なら confusionMatrix(testPred, tesgng$Class)など 他にもいろいろな指標はあるがまずはここから
  67. 67. 解析再現性, レポーティング: RMarkdown ここを選んで.Rmdファイルを作る
  68. 68. 解析再現性, レポーティング: RMarkdown #は目次、見出し ##のように増やすと章、節…み たいな感じで文章を区切ること ができる ```{r} ``` 上記の括弧で囲んだ中身にR のコードを書く 囲んだ外の部分には普通に日 本語を記入してメモや考察を 書くことも可能 解析用の実験ノートとして使う と良い
  69. 69. 解析再現性, レポーティング: RMarkdown ここを選ぶと.htmlファイルが出力される
  70. 70. 解析再現性, レポーティング: RMarkdown 出力されると右のような感じ コードが灰色の、実行結果が白の枠の中に 出力される {r pressure, echo=FALSE}でecho=FALSEと しておくと、コードが出力されなくなる データ・乱数が固定されていれば変わらない 結果がいつでも出力されるので、データ解析 の再現性を確保できる
  71. 71. Rの疑問に関する質問サイト RおじさんがRの疑問に答えてくれる場 h3p://qiita.com/uri/items/5583e91bb5301ed5a4ba
  72. 72. Rの疑問に関する質問サイト 下記サイトにメアドを登録すればO.K。登録者は他の参加者のアドレスを 見ることができるので気になるようなら捨てアドで良い h3ps://r-wakalang.herokuapp.com
  73. 73. 機械の体を手に入れるのよ、 鉄郎!!!: h3p://www.slideshare.net/teramonagi/ss-52463319? qid=c38069a7-51e0-425a-9a3d-945412d41e2b&v=&b=&from_search=3 Rの疑問に関する質問サイト
  74. 74. Rの疑問に関する質問サイト
  75. 75. おすすめ本(読んだもの)
  76. 76. もっと基礎から固めたいなら 線形代数と微積は簡単な本で良いので抑えておくと 統計や機械学習の理論についての本を読む時にとても楽 (楽というか抑えてないと読めない)
  77. 77. まとめ Rstudioがおすすめ まず集計、可視化していくところから始める 外れ値・誤入力などに注意 分布には気をつける 分布を気にし始めるとlm → glm → ベイズモデルになるか も 機械学習は予測第一, 統計モデリングは従属変数の寄与も重視する 再現性・レポーティングにも気を使う もっと色々な手法があるのでRで動かしてみると良い
  78. 78. おわりに 環境化学は総合的な学問 愛媛大の環境であれば化学分析・毒性についてはみんな卒 業時にはある程度の力量がついてくる が、研究で生きていくなら本筋のテーマ以外にサブで個人的 に突き詰めていくテーマがないと、“総合的”の部分に対応し にくくて苦しくなる可能性がある 今回は解析の話だったが、 bioinfo, 動物実験, 分析法開発 など、サブの武器は自分で好きな分野を選べば良い 今日は実験しんどいけど解析ならやる気分になる、とかであ れば気分の切り替えにもなるしいいかも?
  79. 79. Enjoy!

×