見出し画像

CreateTableOne()で簡単に表を作成

東京大学医学部老年病科の矢可部です。

基礎、臨床研究の統計解析でRを用いています。

学生や研修医の指導に使うという目的もあり、noteに記事を書いています。

さて、臨床研究の論文では対象者の特性をTable 1として最初に提示します。

今回は、Table 1を作るのに役立つCreateTableOne関数を紹介します。

サンプルデータ

今回は、"Rdata2.xlsx"ファイルを使います。以下のリンクからダウンロードできます。

前回まで使っていた"Rdata1.xlsx"に、DM(糖尿病)とMI(心筋梗塞)の既往の有無を追加しました。

パッケージtableoneをインストール

CreateTableOne関数は、tableoneというパッケージに入っています。

# パッケージ"tableone"をインストールする (初回のみ)
install.packages("tableone")

これでうまくいかない方は、こちらの記事をご覧ください。

CreateTableOneで表を作成

tableoneを呼び出します。

# パッケージ"tableone"を呼び出す
library(tableone)

そして、Rdata2.xlsxのデータ全体をRに取り込みます。

私はクリップボードにコピーしてから取り込んでいます。詳しくは以下の記事をご覧ください。

dat <- read.table(pipe("pbpaste"), sep="\t", header=T) # Macの場合
dat<-read.table("clipboard", sep="\t", header=T)  # Windowsの場合
attach(dat)

ここでデータセットのdatに対し、性別で層別化した年齢、BMI, SMI, DMとMIの有病率を表にします。

そのためには以下のようなコマンドを入力します。

# table1を作成
table1<-CreateTableOne(vars=c("age","BMI","SMI","DM","MI"), strata="sex", data=dat, factorVars=c("DM","MI"), test=TRUE)

vars=c( )の( )内には、表に含めたい変数を入れます。

strata=には層別化したい変数を入れます。ここでは性別なので"sex"とします。

data=で用いるデータセットを指定します。

factorVars=c( )の( )内には、表に含めたい変数のうちカテゴリー変数のみを入れます。DMとMIの既往は「無=0、有=1」という変数にしているので該当します。
年齢やBMIなど、他の変数は連続変数なのでここに入れてはいけません。もしよかったら、"age"を入れた場合にどのような結果が出るか試してみてください。

test=TRUEと入力しておくと検定を行ってくれます。デフォルトでは

連続変数 → t検定
離散変数 → カイ2乗検定

が選択されます。
2つの検定については以下の記事で解説しています。

なおtest=TRUEを省略しても検定を行う仕様になっています。test=FALSEとすると検定を行いません。

その後、以下のコマンドでtable1を表示させることができます。

# table1を表示
table1

以下のような結果が表示されます。

男性(0)と女性(1)に層別化して、
年齢とBMIとSMIについては平均、標準偏差、t検定の結果を
DMとMIについては有病率、カイ2乗検定の結果を
表形式で提示してくれました。

なおCreateTableOneはここではイエーツの連続性補正あり (correct=T) で比率の差の検定を行っています。

項目数が多い時

以上のやり方でも問題なく使うことができますが、表に入れたい項目が多いからとvars=やfactorVars=の中に多数の項目を入れると、コマンドの1行が非常に長くなってしまいます。

そのような場合、以下のように項目リストを文字に置き換えるのがお勧めです。

# 表に含めたい変数をkomokuに代入
komoku<-c("age","BMI","SMI","DM","MI")
# そのうち、カテゴリー変数をcateに代入
cate<-c("DM","MI")
# table1を作成
table1<-CreateTableOne(vars= komoku, strata="sex", data=dat, factorVars=cate)

見た目もスッキリしますし、間違いも少なくなります。


CreateTableOne関数は便利なので、ぜひ使いこなしてみて下さい。

今回は以上です。


この記事が気に入ったらサポートをしてみませんか?