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.

臨床心理学におけるR入門: データハンドリングから統計解析まで

3,433 views

Published on

ゼミ用資料「臨床心理学におけるR入門: データハンドリングから統計解析まで」

Published in: Science
  • Be the first to comment

臨床心理学におけるR入門: データハンドリングから統計解析まで

  1. 1. 臨床心理学におけるR入門 データハンドリングから一般化線形モデルまで 専修大学人間科学部 心理学科 国里愛彦 1
  2. 2. はじめに 2
  3. 3. 統計分析の前に・・・ • そもそも統計解析のまえに,研究計画が 一番重要! • 研究報告に関する各種ガイドラインを参 考にし,研究計画を立案する 日本語では,行動療法研究の特集がおすすめ https://goo.gl/mqSyBC 研究疑問の定式化 (PICO,PECO) 研究計画の立案 (倫理委員会へ申請) データ収集 データの前処理 統計解析 論文執筆 3
  4. 4. 再現可能な統計解析を目指す上で • 統計解析は,特殊な操作をしないかぎ りは,ある程度再現性が確保できる。 • 一方,データの前処理がいい加減だと 結果の再現性を大きく歪める。 • 統計解析だけでなく,データの読み込 みから解析可能な形にする整形(前処 理)までのプロセス全体の再現性を高 める。 研究疑問の定式化 (PICO,PECO) 研究計画の立案 (倫理委員会へ申請) データ収集 データの前処理 統計解析 論文執筆 4
  5. 5. SPSSではちょっと困る理由 1. SPSSでは,できない解析がある 2. 機能のわりに高価(卒業後は使えない) 3. 操作マニュアルは多いが,教育上は悪い影響 も(統計学を理解せずに解析するなど) 4. データの整形機能が貧弱 5. 解析過程が残らない(解析が再現出来ない可 能性がある) 6. 出力が非常に見にくい(好みの問題ですが・・・) 5
  6. 6. Excelではちょっと困る理由 • SPSSでデータ整形は難しいので,Excelでデー タ整形することも多いのでは?しかし,以下の 理由から,Excelもちょっと困る。 1. 操作の過程が残らない(Excelで行った操作 を別のファイルに記録しないと再現不可能 になる) 2. 生データ自体が改変される 3. 本格的な統計解析・可視化は難しい(HADと いう選択もあるが・・・) 6
  7. 7. RとRStuidoを薦める理由 • RとRstudioならSPSSやExcelの問題は,以下 のようにクリアできます。 1. できない統計解析はほとんどない 2. 解析過程がしっかり残る 3. データの整形,可視化,解析,解析レポー ト作成(マニアは論文やプレゼンも)可能 4. こんなにすごいのに,無料! 5. 学生が統計を学習する上で便利(自宅で もできる) 7
  8. 8. RとRstuidoの基本 8
  9. 9. RとRStudioのインストールとチー トシート • Rを使いこなすコツは,Google検索。 • よくわからないことは,「R 知りたい内容」で検 索(例. Rのインストールについて知りたい場合は,「R インストール windows10」で検索!) • RStudioは便利なチートシートを作っている。 https://www.rstudio.com/resources/cheatsheets/ 例えば,RStudioの使い方は,”RStudio IDE Cheat Sheet” が参考になる。データの読み込み,整形,可視化など便 利。一部は日本語化されている。 9
  10. 10. Rの使い方:標準関数 • Rは標準関数で色々な統計解析ができる。 • 詳しくは, RStudioチートシートの”Base R”を 参照したり,「R 使いたい解析名」などで グーグル検索して調べる。 • Rの関数名はわかっているけど,どう使った らわからない場合,「?関数名」をコンソール にタイプするとヘルプがでてきます。 例 t.testの引数に何を入れればわからない時 ?t.test 10
  11. 11. Rと関数 • Rを使いこなすには,関数の理解が大切で す。以下のように,関数の()内で,引数を指 定すると,左辺に結果が代入されます。 戻り値(結果) = 関数(引数(入力)) 例) 平均値の関数mean()の場合 結果 = mean(平均したいデータ) 11
  12. 12. Rの使い方:CRANパッケージ • Rでは,標準関数以外にも様々な解析パッケー ジが作成され,多くはCRAN(https://cran.r- project.org/)に登録されている。 • CRANにあるパッケージは以下のようにコン ソールにタイプするとインストールできます。 install.packages(“パッケージ名", dependencies = TRUE) • パッケージを使う場合は,以下のようにコン ソールにタイプして,呼び出します。 library(パッケージ名) 12
  13. 13. Rの使い方:CRANパッケージの検索 • 例えば,査読者から「効果量(Hedges‘s g)を 記載せよ」というコメントがついた。 Searchを クリック う〜。Hedges’s gっ てどうやって計算 するんや。とりあ えず,CRANで検索 してみよ。 Hedges’s gを 検索 13
  14. 14. Rの使い方:CRANパッケージの検索 • 3つほどパッケージに行き着く,私の専門は 精神医学系なので,rpsychiというパッケージ を使ってみる 14
  15. 15. • s パッケージの説明 をするページ 必ずPDFのマニュアルがついている ので,これを参照すれば良い。 15
  16. 16. Rの使い方:CRANパッケージのイン ストール&利用 • rpsychiパッケージをインストールし,呼び出す。 install.packages(“rpsychi", dependencies = TRUE) library(rpsychi) • rpsychiパッケージのマニュアルを見ると,独立 な2群の効果量(Hedges’sのg)を計算する関数 は,ind.t.testらしい。Usageをみる。 ind.t.test(formula, data, correct=TRUE, sig.level = 0.05, digits = 3) ↑黒字部分の引数を自分のデータに合わせれば 効果量が計算できる。 16
  17. 17. Rの使い方:CRANパッケージの利 用 • Rの基本はコピペ。マニュアルには必ずExamplesがついている ので,そちらをコピペして使ってみる(以下は,rpsychiパッケー ジのind.t.testのExamples)。 ## Kline (2004) Table 4.4 dat <- data.frame(y = c(9,12,13,15,16,8,12,11,10,14), x = rep(factor(c("a","b")), each=5) ) ind.t.test(y~x, data=dat, correct=FALSE) ・・・ $standardized.difference es lower upper std 0.800 -0.500 2.100 0.663 ・・・ 出力の一部 es(ここではHedges’s g)は0.8 17
  18. 18. Rmarkdown • コンソール画面にコマンドを打ち込むやり方だ と手元に解析過程が残らない(履歴はのこっ ていますが・・・),明示的にコマンドとその説 明文章を残す習慣をつける • Rmarkdownを使うと,便利なMarkdown記法を 使って,コマンドの説明文書も残せる。 • Rmarkdownを使うと, HTML出力もできるので, Rを使っていない共同研究者との共有も楽 (Rmarkdownをベースに論文を書くパッケージもあ る・・・)。 18
  19. 19. Rmarkdown:はじめの一歩 から,R Markdownをクリック 適当に名前を つけて”OK” 19
  20. 20. Rmarkdown:はじめの一歩 こんなテンプレートが出 てくる。自分用に改変。 20
  21. 21. Markdown記法 • RmarkdownでRコードの部分は,```{r}と```でくくる。 ```{r} summary(cars) ``` • 行頭に#(シャープと半角スペース)と見出しになりま す。 #を重ねるほど見出しは小さくなります。 • ただの改行はスペースになるので,改行をしたい場 合は,空白行を入れる。 • 行頭に*をいれると箇条書きリスト,行頭に1.をいれる と順序付きリストになる。 • LaTeX形式の数式や画像も挿入できます。 21
  22. 22. Rmarkdown:はじめの一歩 テンプレートを改変して, knitをクリック HTMLファイルが作成される • HTMLには最後にすればよくて,途中は,文章を書 きつつ,Rコードを をクリックして実行し,確認。 22
  23. 23. Windows – Mac間で の文字化け問題 • MacとWinで使用しているエン コーディングが違うので,文字 化けが生じる(MacはUTF-8, WinはShift-JIS)。 • 上のようになったら,Rstudioの Tools→Global optionsをクリック して,GeneralのDefault text encoding:をUTF-8やらShift-JIS に変えて開くと,文字化けがな くなります。 23
  24. 24. まとめ:Rを使いこなすコツ 1. 上手にググる & コピペ 2. Rmarkdownを使ってみる 24
  25. 25. R(tidyverse)による データの前処理と可視化 25
  26. 26. 本日使用するパッケージ • 本日は,以下のパッケージを用います。 tidyverse: データ整形と可視化 forcats: 因子型を扱う(tiyverseの一部) rpsychi: 効果量の算出 lme4: 線形混合モデル lmerTest: 線形混合モデルでの検定 phia: 線形混合モデルから調整平均を算出 HSAUR3: 解析で使用するデータ • 事前にインストールいただいていると思うので, library(パッケージ名)で,パッケージを呼び出しましょう。 26
  27. 27. tidyverse: データ整形と可視化の ための強力なパッケージ • R界で非常に有名な(RStudioにも努めている)Hadley Wickhamが作成したパッケージ群。以下がコアの パッケージ ggplot2:データの可視化 dplyr:データの操作 tidyr: データの整形 readr:データの読み込み purrr: 機能的プログラミング tibble:データフレーム 27
  28. 28. R for Data Science • Hadley WickhamとGarrett Grolemundの書籍。 • tidyverseをフル活用してデータ の整形方法,可視化,モデリン グ方法を説明 • Webでも閲覧できますし (http://r4ds.had.co.nz/),書籍と して購入もできます。 28
  29. 29. 使用するデータ • 政府統計の総合窓口(e-Stat)より,「平成26年度患者調査 上巻(全 国)」の「56 精神科病院の推計患者数,年齢階級 × 性・疾病分類 (精神及び行動の障害) × 入院-外来別」(j0056.csv)。 29
  30. 30. データの読み込み • tidyverseに入っているreadrパッケージを使用 • windowsとかで作ったデータっぽいので, encodingにcp932を指定し,最初の2行は無駄 なので,飛ばす(skip) data <- readr::read_csv("j0056.csv",locale = readr::locale(encoding = "cp932"), skip = 2) • Rを含むプログラミング言語でワーキング(カレント) ディレクトリがどこかが重要になる。最初のうちは, データファイルのある場所にディレクトリ設定する。 30
  31. 31. 読み込んだ内容を確認 1. 今回は入院患者に関心がある→入院に絞る 2. 空白の最初の2行が不要→削除 3. 総数,男性,女性ごとの患者数があるが,総数は不 要(各疾患をまとまて総数も不要)→削除 4. (再掲)精神及び行動の障害も不要→削除 • tidyverseに入っているdplyrパッケージを使用して整理31
  32. 32. 不要部分を削除(入院患者の男 女別データに絞る) inpatients <- data %>% fill(X1) %>% dplyr::slice(4:32) %>% dplyr::filter(X1 !="総数") %>% dplyr::filter(X2 !="総数") %>% dplyr::filter(X2 !="(再掲)精神及び行動の障害") パイプ演算子(前の ものを次の関数の第 1引数にいれる) fillで,欠測を1つ前の値で埋 める(X1が埋まる)。 sliceで,4~32列の データに絞る filterで,該当する行のデータに絞る。今回は,!=を 使っているので,X1やX2で「総数」,X2で「(再掲)精 神・・・」とあるもの以外に絞っている。 32
  33. 33. 操作の確認 • 段々ときれいになってきた。でも,X1とX2という変 数名は意味がないので変更したい。 33
  34. 34. 変数名の変更 • X1は性別に,X2は疾患名に変数名を変更します。 inpatients <- inpatients %>% rename(sex = X1, diseaseName = X2) renameで変数名を変更できる 34
  35. 35. 雑然データ • 変数が, sex, diseaseName, 総数, 0歳,1〜4,5〜 9・・・90歳以上・・・となっており,典型的な雑然 データになっている(年齢は変数にして年齢の列を 作るべきだが年齢が変数名になっている) sex diseaseName 0歳 1〜 4 5〜9 ・・・ 85〜8 9 90歳以 上 男 血管性及び〜 - - - ・・・ 0.9 0.4 男 アルコール使用〜 - - - ・・・ 0.2 0 男 その他の精神作用〜 - - - ・・・ 0- 35
  36. 36. 雑然データを整然データへ • 整然データの条件 1. 個々の変数が1つの列 をなす。 2. 個々の観測が1つの行 をなす。 3. 個々の観測単位のタイ プが1つの表をなす。 sex diseaseName 0歳 1〜 4 5〜9 ・・・ 85〜8 9 90歳以 上 男 血管性及び〜 - - - ・・・ 0.9 0.4 男 アルコール使用〜 - - - ・・・ 0.2 0 男 その他の精神作用〜 - - - ・・・ 0- sex diseaseName 年齢 カウント 男 血管性及び〜 0歳 NA 男 アルコール使用〜 0歳 NA ・・・ ・・・ ・・・ ・・・ 男 血管性及び〜 90歳 以上 0.4 男 アルコール使用〜 90歳 以上 0 36
  37. 37. 雑然データから整然データへ inpatients <- inpatients %>% tidyr::gather( ` 0歳`:`90歳以上`, key = "Age", value = "Count", na.rm = TRUE ) %>% select(sex,diseaseName,Age,Count) gatherを使って,年齢という変数と その年齢におけるカウントの変数 に変換する(ワイド型からロング 型への変換)。不詳,65歳以上 (再掲)・・・などは除いた。 37
  38. 38. 操作の確認 • かなりきれいになってきた。欠測が “-”になってい ること, Countが文字型になっているのを変更した い。 38
  39. 39. データの微調整を行う inpatients$Count <- ifelse(inpatients$Count == "-", NA,inpatients$Count) inpatients$Count <- as.numeric(inpatients$Count) inpatients <- inpatients %>% dplyr::mutate( nPatients= Count*1000) もし,inpatients$Countに”-”がは いっていたら,NAを返す。 Countの変数型を文字型から数値型に 変更する。 Countの単位が1000人単位なので,mutateをつかって, 1000書けたnPatientsを変数に追加する。 39
  40. 40. データの集計 • データ整形ができたら集計も楽。性別・疾患ごとの入 院患者数 inpatients %>% group_by(sex,diseaseName) %>% summarise(sum = sum(nPatients, na.rm=T)) group_byで分ける変数を指定し,summariseで集計方法を指 定する(今回はカウントなので,合計した)。 40
  41. 41. データの可視化 • 統計解析の前にかならずデータの可視化 (図の作成)を行う。 • tidyverseに入っているggplot2パッケージを が強力なデータ可視化ツール。ggplot2は, dplyrやtidyrなどのデータ整形からスムーズ に可視化できる。 • これまで整形したデータを使って,①男女✕ 疾患別の入院患者数,②気分障害における 男女✕年齢別の入院患者数をプロットする。 41
  42. 42. 男女✕疾患別の入院患者数 inpatients %>% group_by(sex,diseaseName) %>% summarise(total = sum(nPatients, na.rm=T)) %>% ggplot(aes(x=diseaseName,y=total,fill=sex,colour=sex)) + geom_point()+ scale_x_discrete(label=c("アルコール","その他","物質使用", “気分障害”,“認知症”,“神経症”,“知的障害”,“統合失調症”), name="疾患名")+ scale_y_continuous(name=“患者数”)+ scale_fill_discrete(name = "性別")+ labs(colour = "性別") + theme_gray(base_family = "HiraKakuPro-W3") データ整形 データ整形したものを%>%でひきとっ て,ggplot。処理は,+でつなげる 以降は,ラベル名を 日本語にしたり見や すくしているだけ 42
  43. 43. 男女✕疾患別の入院患者数 • s 43
  44. 44. 気分障害における男女✕年齢別 の入院患者数 inpatients %>% dplyr::filter(diseaseName ==" 気分[感情]障害(躁うつ病を 含む)")%>% group_by(sex,Age) %>% summarise(total = sum(nPatients, na.rm=T)) %>% ggplot(aes(x = Age, y = total,fill = sex, colour = sex)) + geom_point()+ scale_x_discrete(label=c("0","1~","5~","10~","15~","20~","25~","30 ~","35~","40~","45~","50~","55~","60~","65~","70~","75~","80~", "85~","90~"),name="年齢")+ scale_y_continuous(name="患者数")+ scale_fill_discrete(name = "性別")+ labs(colour = "性別") + データ整形 ggplot あとは,ただ の見栄えの 調整 44
  45. 45. 気分障害における男女✕年齢別 の入院患者数 • s 45
  46. 46. まとめ:前処置と可視化のコツ 1. Excel禁止 2. 『 R for Data Science 』や ウェブの情報を使って, tidyverseを使いこなす 46
  47. 47. Rによる統計解析 一般化線形混合モデル入門 47
  48. 48. 連続変数のパラメトリック分析: 一般化線形モデルによる理解 • 統計解析は種類が多い・・・ 説明変数 質的変数 連続変数 結果変数 (従属変数) 連続変数 独立な2群のt検定、対応 のあるt検定、分散分析 単回帰・重回帰 質的変数 χ2検定、正確確率検定、 ロジスティック回帰 ロジスティック回帰、 ポワソン回帰 生存時間変数 生存時間分析 一般線形モデル(General Linear Model: GLM) →結果変数は正規分布 一般化線形モデル(Generalized Linear Model: GLM) →結果変数に正規分布以外にポアソン分布なども使える 48
  49. 49. 一般化線形モデルによる理解 結果変数 = β0 + βi * 説明変数i + 誤差 0 20 40 20 40 60 selfrep.1 selfrep.5 説明変数(連続変数) 結 果 変 数 β(回帰係数):直線の傾きに対応しており、 説明変数が1変化した時の結果変数の変 化に対応している β0(切片): 説 明変数が0にお ける結果変数の 平均値 誤差(残差):回帰直線と各 データのズレ 49
  50. 50. 0 20 40 60 80 Medication Placebo heumatoidArthritisSymptoms(1year 一般化線形モデルによる理解 結果変数 = β0 + βi * 説明変数i + 誤差 • t検定や分散分析などのように、説明変数が質的変 数の場合も同様に一般化線形モデルによって理解で きる。 平均値 分散(誤差) 50
  51. 51. 一般化線形モデルによる解析手順 1.モデルの特定 →結果変数と説明変数を連結する関係式&反応変数 の確率分布の2つを指定 2.モデルのパラメータの推定 3.モデルの妥当性のチェック →モデルはどのくらいよくデータに当てはまり、データ を要約しているか 4.推測 →モデルのパラメータに関する仮説検定と信頼区間の 計算および結果の解釈 51
  52. 52. 一般化線形モデルによる解析手順 1.モデルの特定 →結果変数と説明変数を連結する関係式&結果変数 の確率分布の2つを指定 2.モデルのパラメータの推定 3.モデルの妥当性のチェック →モデルはどのくらいよくデータに当てはまり、データ を要約しているか 4.推測 →モデルのパラメータに関する仮説検定と信頼区間の 計算および結果の解釈 52
  53. 53. 一般線形モデルによる解析手順 1. モデルの特定:結果変数と説明変数を連結する関 係式&反応変数の確率分布の2つを指定 • 一般線形モデルにおける前提は以下の4つ 正規性 結果変数は、各説明変数に 対して正規分布 等分散性 説明変数の値にかかわらず 結果変数の分散は等しい 独立性 個々の観測値が独立 線形性 結果変数と説明変数は、測 定値範囲内で線形 53
  54. 54. 一般線形モデルにおける前提: 正規性、等分散性、線形性 • 結果変数は、各説 明変数に対して正 規分布 • 説明変数の値にか かわらず結果変数 の分散は等しい(緑 の両向き矢印) • 結果変数と説明変 数は、測定値範囲 内で線形 0 20 40 60 80 Medication Treatment RheumatoidArthritisSymptoms(1year 0 20 40 20 40 60 selfrep.1 selfrep.5 54
  55. 55. 一般線形モデルにおける前提: 独立性(個々の観測値が独立) • 以下のようなデータを抽出した場所や反復測定する 個人で階層構造をもつデータは独立性のないデータ になる。 →独立性のないデータは、一般化線形混合モデルを 用いる。 病院A 病院B 患者 1 患者 2 患者 i ・・・ 患者 1 患者 2 患者 i ・・・ 患者B 時点 1 時点 2 時点 i ・・・ 他施設共同研究 継時データ 55
  56. 56. 一般線形モデルによる分散分析の理解 • t検定、分散分析、重回帰は、一般線形モデルから 全て以下のような回帰モデルを作ることができる。 結果変数 = β0 + βi * 説明変数i + 誤差 ☆1要因分散分析(以降,説明変数をX、結果変数をY) 結果変数=β0+β1*説明変数1+ 誤差 ☆2要因分散分析 結果変数=β0+β1*説明変数1+β2*説明変数2 + 誤差 ☆2要因分散分析(交互作用 or 共分散分析) 結果変数=β0+β1*説明変数1+β2*説明変数2+β3*説明変数1*説明変数2+誤差 • 解析では、パラメータ(β0〜β3)を推定する。 56
  57. 57. 一般化線形モデルによる解析手 順 1.モデルの特定 2.モデルのパラメータの推定 3.モデルの妥当性のチェック 4.推測 →統計解析ソフトなどを用いてパラメータを推定する →モデルの評価では、R2値、残差分析、尤度比検定、 AICなどがある(R2値は、説明変数を増やせば高くなる ので、後者3つを使う)。 57
  58. 58. 正規性・等分散性が満たされない場合 • ヒストグラム、歪度、尖度、Kolmogorov-Smirnov(コ ロモゴロフ・スミノフ)検定などで確認 • データの分布によっては対数変換、外れ値の吟味 →現実にあわないデータ処理によって、データが歪 む可能性もあるので注意 • 平均値差の検定の場合は、Welch補正を使う。一 般線形モデルでは、ロバスト回帰分析もある。 • 一般線形モデルの仮定が難しいデータの場合は、 ノンパラメトリック分析へ 58
  59. 59. 連続変数のノンパラメトリック分析 • 正規性・等分散の仮定が満たせない場合ノンパラメ トリック分析を採用する • 2群の平均値の比較 →Mann-Whitney U検定 • 対応のある2群の平均値の比較 →Wilcoxonの符号付き順位和検定 • 独立な3群以上の平均値の比較 →Kruskal-Wallis検定 • 対応のある3群以上の平均値の比較 →Friedman検定 59
  60. 60. 連続変数のパラメトリック解析: 一般(化)線形混合モデル • 反復測定などにより階層性のあるデータは、一般(化) 線形混合モデル(Generalized Linear Mixed Model: GLMM)を用いる。 • 一般(化)線形混合モデルでは、固定効果(fixed effects) とランダム効果(random effects)の両方が含まれる。 患者B 時点 1 時点 2 時点 i ・・・ 継時データ (反復測定データ) • 集団全体の傾きや切片(固定効 果)に、切片と傾きの個人差(ラ ンダム効果)を考慮するモデルに なる。 60
  61. 61. 一般化線形混合モデル 結果変数ij = β0j + β1i * 説明変数ij + 誤差ij i: 繰り返し測定の場合は時点(1,2,・・・i)。 j: 個人(Aさん、Bさん、・・・jさん) • 切片(β0j)と傾き(βiJ)にランダム効果を考慮 β0j = γ00 + 誤差(レベル2)0j β1j = γ10 + 誤差(レベル2)1j γ00は、集団全体の切片、γ10は、集団全体の傾き 誤差(レベル2)0jと誤差(レベル2)1jは、全体の傾向から は説明できない個人差(ランダム効果) 61
  62. 62. 線形モデルからランダム切片モデルへ • 通常の回帰モデルは、全体 の回帰直線が描かれている が、ランダム切片モデルでは、 全体の傾向だけでなく個人の 直線が平行にはいる。 0 25 50 75 0 T1 T2 T3 4 RheumatoidArthritisSymptoms 0 25 50 75 0 T1 T2 T3 RheumatoidArthritisSymptoms 患者1 T1 T2 T3 患者2 T1 T2 T3 ・・・ 62
  63. 63. ランダム傾きモデルと ランダム切片&傾きモデル • ランダム傾きモデル:切片は全体と同じだが、傾きが 個人によって異なる • ランダム切片&傾きモデル:切片も傾きも個人によっ て異なる。 0 25 50 75 0 T1 T2 T3 4 RheumatoidArthritisSymptoms 0 25 50 75 0 T1 T2 T3 RheumatoidArthritisSymptoms 63
  64. 64. 一般化線形混合モデルのメリット • これまで使用されてきた反復測定分散分析に比べ て・・・ 1. ランダムな欠測には影響をうけない(利用可能な データをすべて使える) 2. 不等分散や非独立性に強い 3. 少サンプルでもバイアスが少ない(正確さが増す ので検出力も上がる) 4. 査読で求められることが増えてきている・・・ 64
  65. 65. 一般化線形混合モデルによる理 解 説明変数 集団全体の効果 集団+個人の効果 質的変数 連続変数 質的変数 連続変数 結果変 数 (従属 変数) 連続変 数 独立な2群のt検 定、対応のあるt 検定、分散分析 単回帰・重回帰 結果変数と説明変数を 連結する関係式&反応 変数の確率分布による 柔軟な統計モデリング 質的変 数 χ2検定、正確確率 検定、ロジス ティック回帰 ロジスティック回 帰、 ポワソン回帰 生存時 間変数 生存時間分析 一般線形モデル 一般化線形モデル 一般化線形混合モデル65
  66. 66. Beat the Blues(BtheB)データ • Proudfoot et al. (2003)による,Beat the Bluesという うつ病用コンピュータ化認知行動療法の効果を通 常治療(TAU)と比較した臨床試験データ • データンは,以下の8変数が含まれる drug(抗うつ薬を飲んでいるかどうか:YES・NO) length(現在の大うつ病エピソードの長さ: <6m・>6m) treatment(治療群かTAU群:BtheB・TAU) bdi.pre(治療前のベック抑うつ質問票) bdi.2m (2ヶ月後のベック抑うつ質問票) bdi.3m (1ヶ月フォローアップ時のベック抑うつ質問票) bdi.5m (3ヶ月フォローアップ時のベック抑うつ質問票) bdi.8m (6ヶ月フォローアップ時のベック抑うつ質問票) 66
  67. 67. データ整形(Wide型からLong型へ) • BtheBのデータはWide型(左)なの で,ベック抑うつ質問票(BDI)の データをLong型(右)に整形する。 BtheB$id <- factor(rownames(BtheB)) BtheBlong <- BtheB %>% tidyr::gather(time,bdi,- bdi.pre, -drug,-length,-treatment) BtheBlong$time <- as.factor(BtheBlong$time) BtheBlong$time <- fct_relevel(BtheBlong$time, "bdi.2m","bdi.3m","bdi.5m","bdi.8m") gatherで,変数名をtime, 値をbdiに。-がつくのは long型にしない変数 as.factorで, timeを因子型に。 fct_relevelで水 準を並べ替え id番号の追加 67
  68. 68. データの要約(群・time別のベック抑うつ質問 票得点の記述統計) BtheBlong %>% dplyr::group_by(treatment) %>% dplyr::summarise(Mean=mean(bdi.pre, na.rm=T)・・・ BtheBlong %>% dplyr::group_by(treatment,time) %>% dplyr::summarise(Mean=mean(bdi, na.rm=T)・・・ group_byで群やtimeで分けて, summarizeで平均,SD,最小・最大値を 計算する。 68
  69. 69. データの可視化(群と時間ごとのベック 抑うつ質問票得点のプロット) BtheBlong %>% ggplot(aes(x=time, y=bdi, colour=treatment, group=id))+ geom_line(alpha=.5)+ scale_x_discrete(label=c("Pre","Post","1mFU","3mFU","6mFU"), name="Time") + scale_y_continuous(name="BDI") 個人の得点をプロットする。 おもったよりもはっきりしな い結果,ややBtheBの方が 得点が下がっているよう な? 69
  70. 70. 一般(化)線形混合モデル解析 • ランダム切片モデルを使った一般化線形混合モデ ル解析を実施した(実際は複数のモデルで比較す る必要がある)。 result <- lmer(bdi~bdi.pre + time*treatment+(1|id),data = BtheBlong, REML = FALSE,na.action = na.omit) summary(result) result95ci <- confint(result,method = "Wald") result95ci lmerで線形混合モデル解析ができる。(1|id) のところで,ランダム切片モデルを指定してい る。summaryで結果を示す。 係数の95%信頼区間を出す 70
  71. 71. 一般(化)線形混合モデル解析の結果 • ベック抑うつ質問票得点に対して,Preの得点,時 期(5m(3mFU),8m(6mFU)),群が有意な効果を示し ている。 71
  72. 72. 調整平均の算出 resultAdjM <- interactionMeans(result) print(resultAdjM) • phiaパッケージのinteractionMeans関数を使って, 一般(化)線形混合モデルの解析結果から調整を 行った平均値を算出する(Adjusted Mean)。 72
  73. 73. 調整平均のプロット resultAdjM %>% dplyr::rename(adjMean = `adjusted mean`, se = `SE of link`) %>% ggplot(aes(x = time, y = adjMean, colour = treatment, group = treatment)) + geom_line(alpha=.5)+theme_classic(base_size = 12,base_family = “”) + geom_errorbar(aes(ymin = adjMean - 1.96*se, ymax = adjMean + 1.96*se,width = 0.1))+ ・・・以降は見栄えの調整 扱いにくいので変数名変更 平均値を折れ線でプロット 95%信 頼区間 を追加 73
  74. 74. まとめ:前処置と可視化のコツ 1. 統計解析は,一般化線形 モデルから理解する 2. 繰り返しデータは,一般 化線形混合モデルを使う 74
  75. 75. 推薦図書 • 『R for Data Science』(Wickham & Grolemund著、O'Reilly、 2016年) • 『Rグラフィックスクックブック: ggplot2によるグラフ作成のレ シピ集 』(Winston著、石井ら訳、O’Reilly、2013) • 『データ解析のための統計モデリング入門』(久保著、岩波 書店、2012年)。 • 『一般化線形モデル入門』(Dobson著、田中ら訳、共立出 版、2008年) 75

×