タグ:統計

第4章は統計を扱います。


今回も「シロート統計学」のハルさんとコラボレーションすることとなりました。


シロート統計学はEZRを使った統計分析をわかりやすく解説されています。


 


第4章はシロート統計学で使われていたEZRをRで行うとどうなるのか?といった視点で進めていきます。


今回使うデータもハルさんのサイトと同じものを使わせでいただく事になりました。それぞれ見比べることで参考にしてみてください!


今回はWilcoxon符号付順位和検定を紹介します



まずWilcoxon符号付順位和検定についてはハルさんのサイトをご参照ください。



また1.準備〜4.データの読み込みまでは【4-1】Rでt検定を行う方法と全く同じ流れになります。
もし1〜4まででわからない部分があれば確認してみてください。

 

1.準備

第4章は毎回ExcelデータをダウンロードしてRを使うのでプロジェクトで管理して行うことを勧めています。

 

ここではR練習というプロジェクトを作り、Excelファイルを入れるためのdataフォルダを作っています。
これを前提に次から進めていきます。
スクリーンショット 2019-10-20 7.54.14


2.スクリプトファイルの作成

次にRのコードを書くためのスクリプトファイルを作ります。

スクリーンショット 2019-11-04 0.47.12



3.データのダウンロード

今回もハルさんのサイトのデータを使わせていただきます。

デモデータ(wilcoxon符号付順位和検定)


この章ではRを使ってダウンロードしています。


download.file(url = “ファイルのURL”,
        destfile = “保存したい場所/ファイル名”)
urlはデモデータで右クリック → リンクのアドレスをコピー
destfileは保存場所と保存のファイル名を指定します。


実際のコードは以下になります。
前回のコードのURL(" "の中)とdestfileのdata/以降を変更するだけでOKです。
url <- "https://haru-reha.com/wp-content/uploads/2018/04/demo-wilcoxon-rank-sum-test.xlsx"
destfile = "data/data/demo-wilcoxon-rank-sum-test.xlsx"

download.file(url, destfile)
スクリーンショット 2019-11-04 7.41.18

dataフォルダにダウンロードできたことを確認します。




4.データの読み込み

データを読み込みます。
今回は【4-0】第4章を進めていく上での準備で行った方法で進めます。

View Fileでデータを確認します。

スクリーンショット 2019-11-04 7.44.03



データが入っているセルを確認します。
B2からC62までデータが入っています(B2:C22と表記)
スクリーンショット 2019-11-04 1.12.29


次にImport Datasetでデータを取り込みます。
スクリーンショット 2019-11-03 18.53.56

Import画面ではName, Sheet,Rangeを指定します。

Name:ハルさんのサイトと同じborgとします(大文字・小文字は別物とされます)
Sheet:このExcelは1つしかデータがないのでDefaultのままでOK
Range:先ほど確認したB2:C22

スクリーンショット 2019-11-04 7.41.10

Importボタンを押す前に右にあるコードをコピーしスクリプトファイルに貼り付けることも忘れずに行います。
library(readxl)
borg <- read_excel("data/demo-wilcoxon-rank-sum-test.xlsx", 
                   range = "B2:C22")
View(borg)

データが正しく入っていることを確認します。
スクリーンショット 2019-11-04 7.46.22

これでデータの取り込みは完成です。


5.データを要約する

次にデータを要約します。

データの要約は【4-1】Rでt検定を行う方法で紹介しました。
group_by関数とsummarize関数を使って要約しましたが、今回はsummary関数を使います。
summary関数は平均、中央値、最大・最小値、四分位範囲をまとめて出してくれますが、標準偏差はだしてくれません。ただ今回はノンパラメトリックなので標準偏差はいらないだろうという理由です。

そして今回はwideデータになっています。
スクリーンショット 2019-11-04 8.05.00
なのでコードはこうなります。
summary(borg$pre)
summary(borg$post)
スクリーンショット 2019-11-04 19.56.42


6.Wilcoxon符号付順位和検定を行う

次にWilcoxon符号付順位和検定を行います。

【4-3】Rで対応のあるt検定を行う方法で紹介しましたが、対応のあるとなしはt.test関数paired = TRUEをつけるかどうかの違いでした。

実はWilcoxon符号付順位和検定も同じです。

wilcox.testにpaired = FALSEをつける(もしくは何も付けない)とMann-Whitney U 検定
wilcox.testにpaired = TRUEをつけるとWilcoxon符号付順位和検定


ということで、wilcoxテストを行ってみます。
t.test関数もそうでしたが、longデータとwideデータで書き方が違います。

wideデータの場合 → , を使う
wilcox.test(1列目, 2列目, paired = TRUE)

longデータの場合 → を使う
wilcox.test(数値 ~ グループ, paired = TRUE)


今回はwideデータなのでこうなります。
wilcox.test(borg$pre, borg$post, paired = TRUE)
スクリーンショット 2019-11-04 20.38.57

EZRと同じ結果になりましたが、Mann-Whitney U 検定のときに悩ませたたアレが出てきました。
今度はもう1行増えてます。
タイがあるため、正確な p 値を計算することができません 
ゼロ値のため、正確な p 値を計算することができません
ちなみにEZRでも警告が出ています。
スクリーンショット 2019-11-04 20.59.27

cannot compute exact p-value with ties
cannot compute exact p-value with zeroes


7.タイのあるデータの対処法

EZRでも使われているwilcox.test関数はタイ(同順位)があると正確なp値を計算できず、近似値を計算する設定になっていました。





今回も同じ問題が出ています。
ブログではある程度のn数があればEZR(wilcox.test)でもいいのではという話がありました。
ただ警告が気持ち悪い!正確なp値も知りたいというための方法も紹介します。

タイに対しては奥村先生の記事が参考になります。



①coinパッケージのwilcoxsign_test関数

Mann-Whitney U 検定ではタイがあっても正確なp値を計算するcoinパッケージwilcox_test関数がありました。coinパッケージを使ってWilcoxon符号付順位和検定を行う場合はwilcoxsign_test関数を使います。

まだcoinパッケージを1度も使ったことがなければインストールします。

coinパッケージのインストール
install.packages("coin")

wilcoxsign_test関数の書き方はちょっとクセがあります。。。

スクリーンショット 2019-11-04 23.11.32
#パッケージの読み込み
library(coin)

wilcoxsign_test(borg$pre ~ borg$post, distribution = "exact", zero.method="Wilcoxon")
スクリーンショット 2019-11-04 23.12.57


exactRankTestsパッケージのwilcox.exact関数

もう1つexactRankTestsパッケージがあります。
このパッケージは開発が終わっており、インストールするとcoinパッケージ使ってねと警告が出ます。それでもcoinパッケージのwilcoxsign_test関数と同じ結果になります。
スクリーンショット 2019-11-05 0.06.33

まずexactRankTestsパッケージをインストールします。
#exactRankTestsパッケージのインストール
install.packages("exactRankTests")
wilcox.exact関数はwilcox.testと似たような書き方ができるのでわかりやすいのが特徴です。
スクリーンショット 2019-11-04 23.53.16
library(exactRankTests)
wilcox.exact(borg$pre, borg$post, paired = TRUE, exact=TRUE)
スクリーンショット 2019-11-04 23.55.13

どちらも同じになりました。


8.まとめ
今回はWilcoxon符号付順位和検定を紹介しました。
Mann-Whitney U 検定との共通点や相違点を比較するとイメージが深まると思います。

4章を順に見ていくと重複する箇所も出てきますので検索で来られた方はサイトマップを見ていただければ別の発見があるかもしれません。

 


9.今回使ったコード

今回使ったコードをまとめて置いておきます。

#データのダウンロード
url <- "https://haru-reha.com/wp-content/uploads/2018/04/demo-wilcoxon-rank-sum-test.xlsx"
destfile = "data/demo-wilcoxon-rank-sum-test.xlsx"

download.file(url, destfile)


library(readxl)
borg <- read_excel("data/demo-wilcoxon-rank-sum-test.xlsx", 
                   range = "B2:C22")
View(borg)

summary(borg$pre)
summary(borg$post)

summary_pre <- summary(borg$pre)
summary_post <- summary(borg$post)


#Wilcoxon符号付順位和検定
wilcox.test(borg$pre, borg$post, paired = TRUE)


#coinパッケージのインストール
install.packages("coin")

library(coin)
wilcoxsign_test(borg$pre ~ borg$post, distribution = "exact", zero.method="Wilcoxon")

#exactRankTestsパッケージのインストール install.packages("exactRankTests") library(exactRankTests) wilcox.exact(borg$pre, borg$post, exact=TRUE, paired = TRUE)

第4章は統計を扱います。


今回「シロート統計学」のハルさんとコラボレーションすることとなりました。


ハルさん、ありがとうございます!


シロート統計学はEZRを使った統計分析をわかりやすく解説されています。


 


第4章はシロート統計学で使われていたEZRをRで行うとどうなるのか?といった視点で進めていきます。


今回使うデータもハルさんのサイトと同じものを使わせでいただく事になりました。それぞれ見比べることで参考にしてみてください!


今回はMann-Whitney U 検定を紹介します



まずMann-Whitney U 検定についてはハルさんのサイトをご参照ください。




また1.準備〜4.データの読み込みまでは【4-1】Rでt検定を行う方法と全く同じ流れになります。
もし1〜4まででわからない部分があれば確認してみてください。



1.準備

第4章は毎回ExcelデータをダウンロードしてRを使うのでプロジェクトで管理して行うことを勧めています。



ここではR練習というプロジェクトを作り、Excelファイルを入れるためのdataフォルダを作っています。
これを前提に次から進めていきます。
スクリーンショット 2019-10-20 7.54.14


2.スクリプトファイルの作成

次にRのコードを書くためのスクリプトファイルを作ります。

スクリーンショット 2019-10-29 19.25.29


3.データのダウンロード

今回もハルさんのサイトのデータを使わせていただきます。

スクリーンショット 2019-11-01 1.21.02


デモデータ(Mann-Whitney U検定)

前回Rを使ってダウンロードしましたが、まだ慣れないと思いますので再度説明します。


download.file(url = “ファイルのURL”,
        destfile = “保存したい場所/ファイル名”)
urlはデモデータで右クリック → リンクのアドレスをコピー
destfileは保存場所と保存のファイル名を指定します。


実際のコードは以下になります。
前回のコードのURL(" "の中)とdestfileのdata/以降を変更するだけでOKです。
url <- "https://haru-reha.com/wp-content/uploads/2018/04/demo-mann-whitney-u-test.xlsx"
destfile = "data/demo-mann-whitney-u-test.xlsx"

download.file(url, destfile)
スクリーンショット 2019-10-29 19.43.04


dataフォルダにダウンロードできました!
スクリーンショット 2019-10-29 19.36.48


4.データの読み込み

データを読み込みます。
今回は【4-0】第4章を進めていく上での準備で行った方法で進めます。

View Fileでデータを確認します。
スクリーンショット 2019-10-29 19.46.19

データが入っているセルを確認します。
B2からC62までデータが入っています(B2:C62と表記)

スクリーンショット 2019-10-29 19.47.48

次にImport Datasetでデータを取り込みます。
スクリーンショット 2019-10-29 19.46.19


Import画面ではname, Sheet,Rangeを指定します。

Name:ハルさんのサイトではMMTでしたがここではmmtとします(大文字・小文字は別物とされます)
Sheet:このExcelは1つしかデータがないのでDefaultのままでOK
Range:先ほど確認したC2:C62




Importボタンを押す前に右にあるコードをコピーしスクリプトファイルに貼り付けることも忘れずに行います。
library(readxl)
mmt <- read_excel("data/demo-mann-whitney-u-test.xlsx", 
                  range = "C2:D62")
View(mmt)
スクリーンショット 2019-10-29 21.03.46

データが正しく入っていることを確認します。
スクリーンショット 2019-10-29 21.05.01

これでデータの取り込みは完成です。


5.Mann-Whitney U 検定を行う

早速Mann-Whitney U 検定を行ってみます。

Mann-Whitney U 検定(マン・ホイットニーのU検定)は別な言い方もあります。

Wilcoxon-Mann-Whitney検定
Wilcoxon の順位和検定


EZRで使われているMann-Whitney U 検定はwilcox.test関数を使っています。

wilcox.test(MMT ~ category, data = mmt)

スクリーンショット 2019-11-01 1.02.29
スクリーンショット 2019-11-01 0.40.49


EZRの結果はこうです。
スクリーンショット 2019-11-01 1.07.20


EZRと同じ結果がでました。警告が気になりますがひとまず置きます。

もしp値だけがほしいときは変数名を付けて変数名$p.valueとします。
mmt_wilcox <- wilcox.test(MMT ~ category, data = mmt)
mmt_wilcox$p.value


6.グラフの作成
EZRでは同時に箱ひげ図を作成しますがRでは自作する必要があります。

箱ひげ図の作成に関しては第3章で紹介しています。



ggplot(data = mmt) +
  geom_boxplot(aes(x = category, y = MMT))
スクリーンショット 2019-11-01 1.16.42

もしEZRと同じグラフにしたい場合はboxplot関数を使うという選択肢もあります。
boxplot(MMT ~ category, data = mmt)
スクリーンショット 2019-11-01 1.19.01



7.一旦まとめ

RでMann-Whitney U 検定を行う方法を紹介しました。
wlcox.testを使えばEZRと同じ結果になります。

ただ警告が出てしまい心配な方はいると思います。

以下からは少し応用編となりますがこの警告について進めていきます。




8.タイがあるため、正確な p 値を計算することができません

スクリーンショット 2019-11-01 0.40.49

Rでノンパラメトリックの検定を行っているとこういった画面が出ることがあります。

cannot compute exact p-value with ties
タイがあるため、正確な p 値を計算することができません
正確なp値が計算できないと言われるととても心配になります。

実は先程のEZRでも警告は出ていました。
一番下の行です。
スクリーンショット 2019-11-01 1.35.45

cannot compute exact p-value with ties


8.タイ(ties)って何?

タイというのは同順(同じ数値)のことです。

タイがないデータ:1,2,4,5,7,10,11,12
タイがあるデータ:1,2,2,4,6,6,6,7,9,11


詳細は成書に譲りますがMann-Whitney U 検定は平均ではなくデータを少ない順に並べてデータに順位を付け計算するため、同順位があるとそれをどう計算するかといった問題や様々な対処法が出てきます。


9.タイに対してどう考えるか?

正確なp値を求めるには膨大な計算が必要になるらしく、そのため正規近似というものを使って計算するようです。EZR(wilcox.test)はタイがなければ正確なp値を求めるオプションがありますが、タイがあるとオプションを付けても正確なp値を求めることができないようです。近似値ではなく正確なp値を求めるにはcoinパッケージwilcox_test関数を使う必要があります。coinパッケージに関しては奥村先生の記事や裏 RjpWikiの記事に詳しく説明があります。






10.coinパッケージを使ってみる

wilcox_test関数を使うためにはcoinパッケージをインストールする必要があります。
パッケージのインストールは今までinstall.packages関数を紹介していましたが、今回はRStudioのPackagesタブからインストールしてみます。
PackagesタブのInstallをクリックしてパッケージ名を入れます。

スクリーンショット 2019-10-29 21.37.10

これでインストールは完了です。
これでlibrary関数を使ってcoinパッケージを呼び出せます。
wilcox.testとの違いは主に3点あります。
①グループの箇所は必ずfactor型に変換(as.factor関数またはfactor関数を使う)
(わからないときは【4-1】Rでt検定を行う方法を参照)
②正確なp値を求めるためにはdistribution = "exact"を追加
③実はwilcox.testはlongデータでもwideデータデータでも使えるが、wilcox_testはlongデータしか扱えない
(わからないときは【1-10】Rでよく使われる型について説明しますを参照)
スクリーンショット 2019-11-02 4.52.27

library(coin)
mmt_coin <- wilcox_test(mmt$MMT ~ as.factor(mmt$category), distribution="exact") mmt_coin
スクリーンショット 2019-11-02 4.35.30


もしp値だけを出したいときはpvalue関数、95%信頼区間を出したいときはpvalue_interval関数を使います。
pvalue(mmt_coin)
pvalue_interval(mmt_coin)
スクリーンショット 2019-11-02 4.35.45


これで正確なp値を求めることができました。


11.じゃあEZRはダメなのか?

ただ必ず正確なp値を求めないといけないかというとそうではないようです。

ちゅんたろさんからアドバイスを頂きました。







ある程度n数があればEZRでも利用可能と考えることもできます。
このあたりは統一見解があるわけではなさそうです。

そしてそもそもp値がより小さければより差が大きいわけではありませんので、ここのp値をどうするかよりも研究デザインが適切かどうかの方が大切になるかもと言うのが個人的なイメージです。


12.今度こそまとめ

今回はMann-Whitney U 検定を紹介しました。
実はwilcox.test(EZR)でタイが無いときの正確なp値の求め方などwilcox.testのオプションなど話は割愛させてもらっています。

qiitaの記事ではwilcox.testとwilcox_testのオプションやタイの有無で結果がどう変わるかについての解説をしていますので、興味があればぜひこちらも併せてご覧ください。



13.今回使ったコード

今回使ったコードをまとめて置いておきます。
coinパッケージのインストールに関してもコードにしています。

#Mann-Whitney U 検定を行うためにcoinパッケージのインストール
#1度でもしていればしなくてOK
install.packages("coin") #もしtidyverseパッケージをインストールしていなければインストール。 #1度でもしていればしなくてOK install.packages("tidyverse") #パッケージの読み込み library(coin) library(readxl) library(tidyverse) #データのダウンロード url <- "https://haru-reha.com/wp-content/uploads/2018/04/demo-mann-whitney-u-test.xlsx" destfile = "data/demo-mann-whitney-u-test.xlsx" download.file(url, destfile) #データの読み込み mmt <- read_excel("data/demo-mann-whitney-u-test.xlsx", range = "B2:C62") View(mmt) #wilcox.test wilcox.test(MMT ~ category, data = mmt)
boxplot(MMT ~ category, data = mmt) #wilcox.testでp値を求めたい時(EZRと同じ) mmt_wilcox <- wilcox.test(MMT ~ category, data = mmt) mmt_wilcox$p.value #coinパッケージのwilcox_testを使う mmt_coin <- wilcox_test(mmt$MMT ~ as.factor(mmt$category), distribution="exact") mmt_coin pvalue(mmt_coin) pvalue_interval(mmt_coin)

どんな分野に関わらずデータ分析に興味があるけどどうしたらいいか全然わからないという方向けの無料講座が開設されました。実際に受講してみたので、どんな内容か?どんな人向けなのか?を紹介しましす。



gacco

gaffoとは大学教授をはじめとした一流の講師陣による本格的な講義を、誰でも無料で受けられるウェブサービスです。
 
gaccoはMOOCというオンラインで講義や課題を受けられるサービスの1つです。
今回紹介する講座の提供元は総務省統計局です。この講座を登録・受講したからといって「続きはこちら」などと言って高額な有料講座を勧められることもありません。


今回gaccoにデータ分析未経験者向けの口座が開講されました。


社会人のためのデータサイエンス入門
社会人のためのデータサイエンス演習
スクリーンショット 2019-10-13 19.28.17



今回社会人のためのデータサイエンス入門が開講されたことに併せ、2019年5月14日に開講された社会人のためのデータサイエンス演習が再び受講できるようになりました。



講座内容

「入門」ではデータ分析の基本的な言葉やデータの見方を紹介しているのに対し、「演習」では実際のExcelのデータを使ってデータ分析の基本を学ぶことができます。

社会人のためのデータサイエンス入門
今、ビジネスの現場では、統計的な思考力によって様々な課題を解決していく能力、すなわち"データサイエンス"力の高い人材が求められている。このようなことを踏まえ、本コースでは"データサイエンス"力の向上を目指し、事例なども踏まえ、データ分析の基本的な知識を学ぶ。

この講座は4週間のコースになります。

第1週:統計データの活用

第2週:統計学の基礎

第3週:データの見方

第4週:公的データの使い方とコースのまとめ



社会人のためのデータサイエンス演習

総務省統計局が提供する講座、ビジネスの現場で求められているデータサイエンスをわかりやすく解説します。

今、ビジネスの現場では、統計的な思考力によって様々な課題を解決していく能力、すなわち“データサイエンス”力の高い人材が求められている。本コースでは“データサイエンス”力の向上を目指し、事例なども踏まえ、ビジネスの現場で使われる実践的なデータ分析(統計分析)の手法を身につける。

この講座は5週のコースになります。

第1週:データサイエンスとは

第2週:分析の概念と事例

第3週:分析の具体的手法

第4週:ビジネスにおける予測と分析結果の報告

第5週:ビジネスでデータサイエンスを実現するために



必要なこと

Excelを使います。



どうやって勉強するの?

どちらの講座も2つのパートからなっています。

動画による講義

各週に5〜10個程度のyoutubeの動画で学びます。
それぞれの動画は10分前後なのに加えyoutubeなので再生速度を上げることもできるので通勤時間などすきま時間でも勉強ができます。

課題

各週の最後に課題があります。

課題は今の所全て選択形式です。内容としては講義動画を見れば全て解答できるレベルになっています。

加えてExcelの実際のデータを使った課題でもアドインツールやピボットテーブルを使うことで関数を使った計算などを必要としないので1問1問の時間もさほどかかりません。


教材

動画があるので無くても受講可能ですが、もし紙媒体でも欲しいという方がいればスタディーノートがAmazonで発売されています。






何が学べるか?

基本的な統計量
「平均値に騙されない」という内容で平均値・中央値・最頻値の紹介や分布によってどの値を使えばいいのかを紹介しています。

表・グラフの使い方

どういった場面にどんなグラフを使えばいいのか?といった紹介やExcelを使ったグラフの作成方法について紹介しています。

表はピボットテーブルを使ったクロス集計表、グラフは棒グラフや折れ線グラフ・散布図が紹介されています。またこういったグラフはダメ!といった注意点も紹介されています。

相関と因果関係、単回帰直線

データから散布図を作り相関係数や単回帰直線を作成します。
また相関関係と因果関係の用語の説明と相関関係と因果関係は違うことを丁寧に紹介しています。

Excelで単回帰直線を作り予測をするといった流れも紹介されていますが、重回帰やロジスティック回帰などは今回の講義の範囲外となっています。

時系列分析

時系列データの基本的な見方(傾向・循環変動 + 季節変動 + 不規則変動に分けるなど)やExcelを使った分解方法などについて紹介があります。


データの報告の仕方

こういった内容を講座で見たことがなかったのですが個人的に参考になったのが「演習」にあった分析結果の報告の仕方でした。

こういったところに気をつけないと、データは正しくても誤って解釈して報告する恐れがありますよ!といったところに時間を割いて説明されています。

それだけでなく悪意のあるデータの見せ方を見抜く力がつくと感じました。



公的データの使い方

公的統計データの入手方法について紹介があります。



実際に受講して感じたこと








ツイートでも紹介しましたがデータ分析未経験な方こそ向いていると感じました。既に研究をしていたり統計学を勉強している方には講義動画を見なくても課題を全問正解できるような内容かもしれません。

そもそも統計学が好きな人なんてマイノリティで、数学や統計学の用語はわかりにくいものが多いです。

講義では数式とかExcelの関数を使うことが無く、数学や統計学の話に寄りすぎていないので数学・統計学とかよくわからない、Excelの操作がよくわからないという方でもとっつきやすい構成になっていると感じました。

今回の内容がわかればデータに関するリテラシーは確実に上がると思いますし、個人的にはこの内容を押さえてくれてたら相談されたとしてもすごく話がしやすい!と感じました。

・データ分析何もわからんという状態をなんとかしたい
・今までしたこと無いけどデータ分析が必要になった
・統計の本とか読んでもわからん(そもそも「読む」なんて選択しがない)
・Excelでの分析は職場の報告書を使っているだけで、新たに分析しようとなっても使い方がわからない

上記のような方は今回の受講は何かのきっかけになるかもと感じました。


講座のスケジュールについて

どちらの講義も期限があります。


社会人のためのデータサイエンス入門

スクリーンショット 2019-10-14 1.42.28

Week1は動画はすきま時間でも見れる分量で、課題も講義を見れば確実に正解できる内容で5問しかない(計算もExcelも必要ない)のでその気になれば1日でも何とかなるかもしれません。

すべての課題を締切日までにパスできれば修了証がもらえます。



社会人のためのデータサイエンス演習

こちらは過去の授業のアーカイブなので5週分の全講義がアップされています。

開講日:2019年10月8日(火)15時
閉講日:2019年12月17日(火)23時59分

自分のペースで勉強できるのもgaccoのいいところです。




まとめ

今回は社会人のためのデータサイエンス入門・演習を紹介しました。
データとか苦手という方がとっつきやすい講座ですので、興味があれば期限もありますので受講をおすすめします。







医療統計でよく出てくるtable1について質問がありました。





ということで今回は医療統計で使われるtable1を作る時に便利なtableoneパッケージについて紹介します。


以下に今回使う仮のデータを作りました。set.seed(1)とかfloor()とかsampleとか訳のわからないものがいっぱい出てきますが、とりあえずRに全部コピーして1行ずつ実行するとdataという名前の表が完成します。(もしくはスクリプトウィンドウにコピペして全部選択した状態でRunを押してください)

set.seed(1)
年齢 <- floor(rnorm(100,60,10))
性別 <- sample(c("男性","女性"),100,replace = TRUE)
体重 <- floor(rnorm(100,60,7))
MMT <- sample(c(1:5), 100, prob = c(0.1,0.1,0.2,0.3,0.3), replace = TRUE)
術側 <- sample(c("右","左"),100,replace = TRUE)
治療 <- sample(c(0,1),100,replace = TRUE)
data <- data.frame(年齢,性別,体重,MMT,術側,治療)
data


tableoneの使い方

0.tableoneパッケージを使えるようにする

1.事前に理解しておくこと

2.CreateTableOne関数でtable1の下地を作る

3.print関数でExcelに貼り付けるための形式に直す

4.Excelでインポート

5.できるだけプログラムを書きたくない人向けの方法



0.tableoneパッケージを使えるようにする

まずはtableoneパッケージを使えるように準備をしてください。

なおパッケージの導入方法については以下の記事で解説しています。
Rで使うパッケージのインストールについて紹介します。 : 独学で始める統計×データサイエンス



1.事前に理解しておくこと


table1はそもそも各群のベースラインを比較します。

スクリーンショット 2019-01-29 13.41.06
そのためには各変数(評価)がどんなデータか理解している必要があります


数値かカテゴリーか?

集計を行うにはその変数が数値なのか?カテゴリー変数なのか?の理解が必要です。

数値:年齢・体重

カテゴリー:性別、MMT、術側

MMTは「1が7人、2が5人・・・」と集計を行いたいとすると、値は数値ですがカテゴリー変数として集計を行う必要があります。


数値の場合は正規分布なのか?そうでないのか?

同じ数値でも正規分布かそうでないのか?を決めておくことが必要です。

正規分布であれば平均±標準偏差ですが、正規分布でない場合は中央値(四分位範囲 or 最大値〜最小値)で表現したりします。

正規分布かどうかを確認するにはヒストグラムやQ-Qplotを作成したり、シャピロ-ウィルクの正規性の検定を使ったりします。


カテゴリー変数の検定はカイ二乗検定なのかFisherの正確確率検定なのか?

カテゴリー変数の場合カイ二乗検定かFisherの正確確率検定なのかを決めておくことが必要です。

データ数が少なく各期待数が5未満だとFisherの正確確率検定を使うなどありますが、詳細は今後説明していくかもしれません。


以上を踏まえた上でtableoneパッケージを使っていきます。


2.CreateTableOne関数でtable1の下地を作る

table1の下地を作るにはCreateTableOne関数を使います。

コード(1行で書く場合)
スクリーンショット 2019-01-29 17.43.23

コード(複数行に渡って書く場合。要素の間の , を忘れずに)
スクリーンショット 2019-01-29 17.30.54

t1を表示して結果を見ます
スクリーンショット 2019-01-29 17.49.04


結果
スクリーンショット 2019-01-29 17.31.09

コード(コピペ用)
t1 <- CreateTableOne(data = data, 
                     vars = c("年齢", "性別", "体重", "MMT", "術側"), 
                     factorVars = "MMT", 
                     strata = "治療")
t1


コードはスクリプトウィンドウを使うと数行にまたがって書くことができます。


(スクリプトウィンドウについてはRコマンダーの基本的な画面の説明を行いますをご参照ください。)


CreateTableOne関数には主に4つの要素があります。


data = ○○

○○には今回使用する表の変数名が入ります。

今回は「data」という名前の表を作ったのでdataになっていますが、別の名前を使った時はその名前になります。大文字と小文字は区別しますので注意。



vars = "○○"

○○には表に乗せたい変数名を並べます。

複数の変数がある場合はc("変数名1", "変数名2")とc関数を使います。

変数名が1つなら vars = "変数名"

変数を" "ではさみ、を使って区切ってください。


factorVars = "○○"

vars = "○○"の中で「数値なんだけどカテゴリー変数」というものがあればfactorVarsに加えます。

今回でいうとMMTの1〜5の値です。

性別や術側のように数値でないカテゴリー変数は自動的にカテゴリー変数とみなしてくれるので、ここに入れるのはあくまでも「数値なんだけどカテゴリー変数」だけです。

ちなみにそういう変数がなければfactorVars = "○○"自体を消してしまってOKです。


strata = "○○"

今回の治療のように分けたいグループがここに入ります

またグループ間ごとの検定を行うこともできます。

2グループならt検定とマンホイットニーのU検定、3グループ以上なら一元配置分散分析とクラスカル=ウォリス検定を行います。

もしstrata = "○○"自体を消すとグループ分けせずに全体の要約が表示されます。

コード
スクリーンショット 2019-01-29 17.55.31
結果
スクリーンショット 2019-01-29 17.55.44



3.print関数でExcelに貼り付けるための形式に直す

これでもある程度表になっているのですが、もう一つ作業が残っています。

まだ「正規分布かそうでないか?」「見た目をもう少し修正」といったところです。

ここではprint関数を使います。

今度はtable1という変数を使います。違う名前でも構いません。


コード
スクリーンショット 2019-01-29 20.09.46


コード(コピペ用)
table1 <- print(x = t1, 
                cramVars = c("性別", "術側"),
                exact = "MMT",
                nonnormal = "体重")

write.csv(table1,"table1.csv")        

print関数にもいくつかの要素があります。

x = ○○

xには先程のcreateTableOne関数の結果を入れます。

先ほどで言う「t1」です。違う名前にした方はその名前にしてください。

" "はいりません。


cramVars = "○○"

改めてt1の性別や術側の項目を見てください。

スクリーンショット 2019-01-29 20.15.45

基本設定では2つのカテゴリーの場合、1つの要素しか出してくれません。
もちろん全体数から引けばいいといえばいいのですが、女性の数も欲しいところです。

そんな時cramVars = c("性別", "術側")を入れると以下のようになります。

スクリーンショット 2019-01-29 20.22.43


exact = "○○"

カテゴリー変数の検定は何も指定しないとカイ二乗検定を行います。

もしFisherの正確確率検定を使いたい場合(ここではMMTとする)、exact = "MMT"とします。

ちゃんとなっているかどうかは一番右のtestを見ます。exactとなっています。

nonnormal = "○○"

同じ数字でも正規分布に従わないデータがある場合は中央値(四分位範囲)で示します。

たとえば今回のデータで体重が正規分布でなかったとします。

その場合はnonnormal="体重"とすることで平均(標準偏差)ではなく中央値(四分位範囲)に変えることができます。

ちなみに四分位範囲でなく(最小値〜最大値)で表現したい場合はminMax= TRUEを付け加えます。

スクリーンショット 2019-01-29 20.35.02


write.csv(○○, "保存したい名前.csv")

table1で表示したい表を作成したあとはcsv形式で保存します。

csv形式で保存するにはwrite.csv関数を使います。

○○はprint関数で使った変数名(ここではtable1)です。

" "の中はファイル名.csvとします。


プロジェクトを作っているとfileビューでファイルを確認できます。

スクリーンショット 2019-01-29 20.59.49

もしプロジェクトを作っていなくて保存場所がわからない場合はgetwt()とコードを書き実行してください。

getwt()     

()の中は何も入れなくて大丈夫です。保存先がわかります。


4.Excelでインポート

csvファイルを作成したので、今度はExcelで読み込みます。

読み込む時はインポートを使います。

スクリーンショット 2019-01-29 13.34.04


csvファイルを選択します。

スクリーンショット 2019-01-29 13.34.54


先程作成したファイルを選択します。
スクリーンショット 2019-01-29 13.35.23


macだと文字化けします。UFT-8を選択します。

スクリーンショット 2019-01-29 13.38.09



フィールドの区切りはカンマを選択します。

スクリーンショット 2019-01-29 13.38.35


ここは特に何もせず完了します。

スクリーンショット 2019-01-29 13.38.51


貼り付ける場所を選択します。

スクリーンショット 2019-01-29 13.39.09


無事完成!
スクリーンショット 2019-01-29 21.13.01



5.できるだけプログラムを書きたくない人向けの方法


慣れると早くなるのですが、どうしてもまだ慣れないということもあると思います。

2つの方法を紹介します。


①createTableOne関数の後、printを行わずデータを直接見ながらExcelに手打ちする

print関数を使わずにsumarry関数を使います。

スクリーンショット 2019-01-29 21.16.49
スクリーンショット 2019-01-29 21.17.02
スクリーンショット 2019-01-29 21.17.21

ここにグループ毎の結果が入っています。

<数値の場合>
平均(mean)
標準偏差(sd)
中央値(median)
最小値(min)
最大値(max)

t検定か一元配置分散分析(pNormal)
マンホイットニーのU検定かクラスカル=ウォリス検定(pNonNormal)

標準化平均差(Standardize mean differences)


<カテゴリーの場合>
カテゴリー名(level)
各変数の数(freq)
各変数の%(percent)
累積%(cum.percent)

カイ二乗検定(pApprox)
Fisherの正確確率検定(pExact)


これらを見て直接Excelに打ち込んでもいいかもしれません。


②EZRを使う

EZRの「サンプルの背景データのサマリー表の出力」は実はtableone関数を使っています。

スクリーンショット 2019-01-29 21.36.32

今回の記事を見た上でこの画面を見て、どの項目がどの関数を使っているかイメージできるでしょうか。


まとめ

今回はRやプログラミングに慣れていない方でもイメージできるよう、tableone関数についてできるだけ細かく解説しました。

学会や論文の作成のサポートになれば幸いです。


次回は性別から男性だけを抜き出すなど条件に合うデータを抜き出す方法を紹介します。



全ての記事一覧はこちらです。
 







前回の記事ではRコマンダー(EZR、改変R)とRStudioについて解説しました。

しかしRコマンダーやRStudioといっても、どれを使えばいいのか?という疑問も出てくると思います。

今回はチャートを作成しましたので目的別にソフトを紹介します!


Rのソフト、何を選ぶか


先に全体像を貼っておきます。時間がない方はこの図だけでもご参照ください。
以下それぞれの解説を書いています。

スクリーンショット 2018-12-16 6.00.42





①結果がわかればいい。グラフも標準で十分。


スクリーンショット 2018-12-16 6.01.14


統計はあくまでもツールなので統計に時間をかけるよりも研究に時間を割いたほうが効率的です。

そのような意味でプログラムを書かなくても統計ができるRコマンダーが適しています。

Rコマンダーは改変RコマンダーやEZRがありますが改変RコマンダーはWindows専用ソフトなので、Macの場合は自動的にEZRになります。

ただ2つ確認したいことがあります。


  • どの本(セミナー)で統計を勉強しているのか?
統計を勉強するのに何かしらの書籍やセミナーに参加すると思いますが、その本が何の統計ソフトを使っているかを確認することをおすすめします。

弘前大学の対馬栄輝先生の書籍やセミナーを受講されている場合は改変Rコマンダーを使う方がスムーズに進められると思います。EZRに関する書籍も多くあり、その場合はEZRを選ぶとおすすめします。

ソフトでメニューの位置や特徴が微妙に違うので、本と同じソフトを使ったほうが効率的です。


  • Macで日本語が使えない場面がある問題
MacでEZRを使う場合はExcelデータに日本語が入っている場合注意が必要です。EZRに日本語が直接入力できなかったり、作ったグラフに日本語があると□□□みたいに文字化けします。

変数名を全て英語にするなら問題ありませんが(年齢→age)、日本語を使いたいなら次の②を検討する必要があります。




②Rコマンダーからステップアップをしてみたい
スクリーンショット 2018-12-16 6.01.22


もちろんですが、Rコマンダーにない統計手法やグラフはそのままでは使えません。

例えば下図の左のグラフはRの標準的なものを使っています。それでもエクセルよりは十分多くのグラフが作れますが、右のように自分でグラフが作れるようになるとできることが大きく増えます。

またEZRは慣れてきたけど、実際にRも使ってみたいという声も聞きます。
スクリーンショット 2018-12-16 5.40.17


このような場合はRStudio+EZRを使う事をおすすめします。実はRコマンダーでも「パッケージ」をインストールして機能を追加することはもちろんできます。しかしR Studioはプログラムの書きやすさや、パッケージの管理がR コマンダーより勝っています。

加えて言うとEZRは「パッケージ」として登録されています。そのためRStudioからクリックするだけでEZRを呼び出すことができます。改変R はできませんのであしからず。

なので基本EZRを使いながら少しずつR も勉強していくという使い方ができます。私は「EZRで出したのをRStudioでもやってみる。逆にRStudioで挑戦してできなかったらEZRで補完する」といった勉強をしています。



③統計も必要なんだけど、実は研究よりも機械学習、AIに興味がある

スクリーンショット 2018-12-16 6.01.33



Rもパッケージを使うことで機械学習は可能です。しかし近年、機械学習の分野ではPythonというプログラム言語の方が多く使われています。私はRとPythonどちらも勉強していくつもりですが、統計はRコマンダーに任せて、Pythonで機械学習を勉強するのはありだと思います。

現在統計の分野ではR の方が得意とされてますが、今年に入りPythonで統計をするための本も出版されてきました。もし研究や統計以上に機械学習・プログラミングに興味があればPythonに挑戦するのもいいかもしれません。学会の統計でPythonを使っていたらレアキャラかも!


まとめ

今回は目的別にRのソフトを選ぶ方法を紹介しました。

今からRを勉強してみたい方も、すでにEZRなど使っていて「次はどうすればいいか?」と思われている方の参考になれば幸いです。

それぞれのソフトの簡単な解説は「RコマンダーやRStudioなどRのソフトにも色々あるので解説してみる」でも紹介していますので、興味のある方はあわせてご覧ください。


次回はRStudioの紹介を行います。



全ての記事一覧はこちらになります。

↑このページのトップヘ