独学で始める統計×データサイエンス独学で始める統計×データサイエンス記事一覧R自己紹介サイトマップ2019年12月31日2019年の振り返りと2020年の目標2019年もあと1日となりました。昨年末からブログを初めて1年。マイペースに続けているブログですがブログやtwitterを通じて色々な出会いがある1年となりました。今回は来年に向けてということで、今年の振り返りと来年の目標を表明していきます。ちなみに昨年の記事がこちらです。昨年末に上げた目標がこちらでした。・Edxで勉強しているRを終了させる・4月からpythonを勉強する・アウトプットを引き続き行う1.Edxで勉強しているRを終了させる2018年夏にRを独学で学ぼうと始めたEdxのdatascienceのシリーズです。9つコースがあるのですが、無事修了できました!!!最初はRのコードを書くのに精一杯で、最後は英語のレポートに大苦戦したのも楽しい思い出です。推定や機械学習はまだ勉強が必要ですねー。してだけでなくデータを使って職場に価値を生み出す力を手に入れたい。2019本来このコースは週2〜3時間勉強すると約1年半かかるコースのようです。毎日3時間(多い時は15時間)学習して、9ヶ月(学会などでできない時期もあったので実質には7ヶ月程度)くらいかかりました。個人の感想ですが、このコースが終了できれば以下のことは出来るようになるのではと感じています。・初心者を脱して今から中級者を目指す・Rの書籍がアレルギーを起こさずに読めるようになる・(Rを使う)職場なら教えてもらったことが理解できる・今後も自習で学ぶことが出来る・パッケージ開発はできない修了証をもらわず勉強するだけなら無料なので興味がある方は是非挑戦してみてください!2.pythonを勉強する2019年末に東京大学グローバル消費インテリジェンス寄付講座を受講したいと思っていて、そのためにはpythonを学ぶ必要がありました。一度アップされている資料を見たのですがRとどこが同じで違うのかを中々理解できませんでした。そのための準備として村本先生の非エンジニアのためのプログラミング入門講座を受講することにしました。2019今は予定通り東京大学グローバル消費インテリジェンス寄付講座の受講真っ最中で、3月の修了を目指しています。今回はKaggleのようなコンペが3回あり、Edxの時よりもより実践的にデータ分析を勉強しています。記事は50記事書いてました。現在はハルさんと「シロート統計学」のEZRでやった解析をRで行うとどうなるか?といった記事を作成しています。Fukuoka.REdxでRのコースを終了してからFukuoka.Rの勉強会にも参加するようになりました。今年はLT(5分程度の発表)を2回行いました。来年も発表できるようネタを考えてみたいと思います。神経はチームの後輩の分も関わっていたので主に3つ行いました。今年は学会を通じて、twitterで関わった方と直接お話できました。その節は本当にありがとうございました!来年の目標GCI(東京大学グローバル消費インテリジェンス寄付講座)の修了まずは医療統計だけでなくデータサイエンスのスキルを上げるためにこの講座の修了を目指します。毎週課題がありコンペもありますが、1年前のRの経験があるので今回もやりきれると思っています。自分でコンペは最初よりもスコアが下がっているのでコツコツがんばります。大学数学をやったことないのに線形代数を勉強が必要なので、出来る範囲で勉強していきます。統計を勉強しているので統計検定2級は取得したいと考えています。秋に「GCIがないかも」という情報だったのでpythonより統計検定を先にしようか?とも思っていたのですが、GCIを受けられることになったので4月以降に始めたいと考えています。来年は神経理学療法学会と回復期の学会で発表できないか検討しているところです。発表だけでなく論文も考えていきたいです。部署のデータ分析を勧めたい現在行っている部署のデータ分析をまとめたいと考えています。部署でデータを取ると色々問題も発生することが多く、頭を悩ませながら進めています。みんなに頑張ってもらっている分、成果がでるように踏ん張ってスタッフや患者さんへ還元できるよう踏ん張って結果を出したいと思ってます。始めたけど時間が取れていないレセプトのデータ分析も結果を出して職場の収入へ貢献したいと考えています。新しい挑戦まだ公表してませんが、ブログやtwitterを通じて新しい話を頂いています。ことで不安もありますが、誠意をもって対応していきたいと思います。まとめ昨年は「勉強を始めよう」と1歩踏み出したところでしたが、この1年で多くの経験が行えたと思います。目に見えた成果物があるわけではありません。データ分析も職場に貢献できて初めてやった意味があると思うので、結果を出すことを目指して頑張りたいと思います。第4章は統計を扱います。今回も「シロート統計学」のハルさんとコラボレーションすることとなりました。シロート統計学はEZRを使った統計分析をわかりやすく解説されています。第4章はシロート統計学で使われていたEZRをRで行うとどうなるのか?といった視点で進めていきます。今回使うデータもハルさんのサイトと同じものを使わせでいただく事になりました。それぞれ見比べることで参考にしてみてください!今回はFriedman(フリードマン)検定を紹介しますまずFriedman(フリードマン)検定についてはハルさんのサイトをご参照ください。1.準備〜4.データの読み込みまでは【4-1】Rでt検定を行う方法と全く同じ流れになります。1〜4まででわからない部分があれば確認してみてください。第4章は毎回ExcelデータをダウンロードしてRを使うのでプロジェクトで管理して行うことを勧めています。ここではR練習というプロジェクトを作り、Excelファイルを入れるためのdataフォルダを作っています。これを前提に次から進めていきます。次にRのコードを書くためのスクリプトファイルを作ります。3.データのダウンロード今回もハルさんのサイトのデータを使わせていただきます。デモデータ(Friedman検定)この章ではRを使ってダウンロードしています。リンクのアドレスをコピーdestfileは保存場所と保存のファイル名を指定します。実際のコードは以下になります。"の中)とdestfileのdata/以降を変更するだけでOKです。destfile)dataフォルダにダウンロードできたことを確認します。4.データの読み込みデータを読み込みます。今回は【4-0】第4章を進めていく上での準備で行った方法で進めます。Fileでデータを確認します。データが入っているセルを確認します。Datasetでデータを取り込みます。Sheet,Rangeを指定します。Name:ハルさんのサイトではgripでしたがgrip_friedmanとします(大文字・小文字は別物とされます)Sheet:このExcelは1つしかデータがないのでDefaultのままでOKRange:先ほど確認したB2:D32(実は今回のように表以外に余計なものがなければ空欄でもOK)Importボタンを押す前に右にあるコードをコピーしスクリプトファイルに貼り付けることも忘れずに行います。read_excel("data/demo-friedman-rank-sum-test.xlsx")View(grip_friedman)データが正しく入っていることを確認します。これでデータの取り込みは完成です。Friedman検定は繰り返しのデータ(被験者内要因)なのでデータを横につなげています。5.Friedman検定を行う(wideデータの場合)ハルさんのサイトでは早速Friedman検定を行っていますのでこちらも早速行います。今回はwideデータなのでまずwideデータの場合を紹介します。Friedman検定はfriedman.test関数を使います。friedman.test(cbind(繰り返しデータのある列))friedman.test(cbind(grip_friedman$W0,grip_friedman$W1,grip_friedman$W2))EZRと同じ結果が出ました。6.Friedman検定を行う(longデータの場合)次にlongデータでFriedman検定を行う方法も紹介します。○○)Friedman検定は対応のあるデータになります。今回は30人がW0,W1,W2の3回データを取っているので3*30=90データあります。そのため作るlongデータは上記のイメージになります。gripとしてますが自分がわかれば好きな名前を付けてOKです。W2の3つgrip:今回測定した握力のデータwideデータをlongデータに変えるにはgather関数、もしくはpivot_longer関数を使います。gather関数に関しては【2-5】Rでデータを集計するのに便利なlongデータとgather関数で紹介しています。データの扱いはtidyverseパッケージに含まれていますので。library関数でtidyverseパッケージを読み込みます。今回はgrip_friedman_longという名前にします。ポイントはもともとのExcelデータにidにあたる列がないことです。そこでrowid_to_column関数を使います。""の中身が列名になります。これで準備が整いました。longデータでFriedan検定を行う場合は改めてこうなります。grip_friedman_long)もちろん結果は同じです。7.多重比較を行うFriedman検定で多重比較を行いたいのですがwideデータだとEZR専用のパッケージでしかできません。そのためRで行うにはlongデータで行う必要があります。longデータで多重比較を行うにはpairwise.wilcox.test関数を使います。U検定を行いその結果を元にp値の調整を行います。FALSEを入れています。FALSE)EZRとほぼ同じ結果になりました。8.どうしてもwideデータのままなら手計算が必要wideデータのまま多重比較を行う方法がEZRのパッケージしかありません。そのためどうしてもwideデータのまま行うにはwilcox.test関数、もしくはcoinパッケージのwilcox_test関数を使い、1つずつ組み合わせを行い、BonferroniやHolm、Hochbergそれぞれの方法で自分でp値を直接計算することになります。この方法は統計ERさんの記事に詳しく紹介されています。Bonferroni、Holm、Hochbergって何をしてるの?という疑問も解決するかもしれません。仕組みがわかればp値に2とか3とかかけるだけなので意外と単純です。8.まとめ今回はFriedman検定を紹介しました。Rで行う場合はwideデータで分析するかlongで分析するかをあらかじめイメージしていた方がその後の解析もスムーズかもしれません。記事一覧はこちらになります。第4章では統計を扱っています。その中で何度か分散分析のを紹介してます。(repeated-measures-ANOVA)を行う方法2Rで分散分析を行う関数はいくつかあり、今までaov関数、lm関数→anova関数、Anova関数など紹介してきました。RにはANOVA君という分散分析に特化したスクリプトがあります。ANOVA君を使えばどんな形式の分散分析でも行え、多重比較も一気にできます。今回はANOVA君を紹介します。今回は前回のデータを使います。記事の1~4までをご準備ください。前回の記事を見るなんて面倒くさい!という方は以下のコードを実行してください。"B2:E32")View(grip_rep_anova)前回はある運動プログラムを行い、0週目・1週目・2週目で握力を測定した、ということを想定した仮想データとなっています。男女の群分けも行います。2.被験者間要因と被験者内要因と分散分析のデザインについて分散分析を行う上で大切なのが被験者間要因と被験者内要因についてです。被験者間要因はいわゆる対応のないデータのことで被験者全体をA法、B法の2つに割り振るといった方法です。同じ人がA法とB法を行うことはありません。被験者内要因はいわゆる対応のあるデータのことで同じ人が繰り返し測定します。被験者間要因は列の左側に、被験者内要因は列の右側に並べると後々分析しやすくなります。被験者間要因は縦に、被験者内要因は横につなげると分析を行うには都合がいいです。仮に下のデータがあったとします。この並びが分散分析を行う上での基本的な形になります。繰り返し)あるのでABC被験者間要因と被験者内要因の間にsを付ける上記の場合はABsCデザインと言います。被験者間要因と被験者内要因が両方あるデザインを混合計画とも呼んだりします。ANOVA君を使うためにはこのデザインの名付け方とデータの並べ方が鍵になります。3.ANOVA君の導入ANOVA君は通常のインストールでは行なえません。ANOVA君の作者である井関龍太さんのホームページでダウンロードする必要があります。上記記事でtxtファイルを保存します。保存場所は作業フォルダに入れておくとすぐに使えますが、どこでも大丈夫です。作業フォルダはgetwd関数を使えばわかります。()内は何も入れません。Fileでダウンロードしたファイルを指定すればOKです。4.ANOVA君を使うためのデータの準備ANOVA君を使うには次の情報が大切です。1何デザインか?2デザインに併せたデータの並び順にする1何デザインか?今回は以下の列があります。(repeated-measures-ANOVA)を行う方法1ではBのみで分散分析を行いました。この場合は被験者間要因がありませんのでsAデザインとなります。(repeated-measures-ANOVA)を行う方法2では被験者間要因がA被験者内要因がBなのでAsBデザインとなります。分散分析には一元配置とか二元配置とか反復測定とか混合モデルとかいろいろあるのですが、なれない方はまず上記のデザインが付けられることを優先してもいいと思います。その後書籍で二元配置とか出てきた時にそのデータをみながら「あぁ、これは○○デザインのことだな」と理解できればいいと思います。2デザインに併せたデータの並び順にするそしてANOVA君はデザインの順にデータを並べることが必須です。これはtidyverseパッケージのselect関数を使えばできます。今はW0,W1,W2,sexの順に並んでいます。sAデザインならsexを消し、W0,W1,W2のみの列にします。select関数は【2-4】Rで指定した列や行だけを取り出すselect関数、slice関数、filter関数を紹介しますで紹介しています。今回はgrip_anovakun_1_wideという変数名を付けました。tidyverseパッケージを読み込んでから行います。W2)もしAsBデザインならsex,W0,W1,W2の並び順にする必要があります。W2)これでデータができました。5.ANOVA君を使うANOVA君で分散分析を行うにはanovakun関数を使います。各要素のグループの数)ポイントはAやBの要素の数を入れることです。今回の結果をそれぞれ表示します。3)sAデザインと書いています。AがW0,W1,W2だったので、a1,a2,a3と表記されます。それぞれの平均と標準偏差が書いてあります。つぎに反復測定分散分析に必要な球面性の検定を行っています。(repeated-measures-ANOVA)を行う方法1をご参照ください。sAデザインは要素が1つしかないので交互作用はありません。有意差があれば多重比較を行います。多重比較をは何も指定しないとShafferの方法になります。TRUEを付け加えます。ひつような球面仮定性についてみています。次に分散分析表がでています。timeで有意差がでているので時間経過の影響はあるようですが、その傾向は男女で違うようです。timeで有意差が出ていたので男女合わせたtimeで多重比較の結果が出ています。timeの交互作用についてです。女性・男性それぞれ時系列に差があるようです。W2はW0においてFとMに差があるか?という意味ですが今回知りたいことではありません。男女ともに時系列で有意差が見られたのでそれぞれの多重比較の結果が出ています。W2で大きいようです。7.まとめ今回はANOVA君について紹介しました。