4 Excel・Stata・SASとの比較

本章では、他のソフトウェアから R に移行する場合に役立つヒントや注意点について解説し、参考になる資料を紹介します。

R は1990年代後半に導入されて以来、利用者を飛躍的に拡大してきました。R の機能が非常に広範であるため、代替となる商用のソフトウェアは競争力を維持するために、R の開発に対応してきました。(R、SPSS、SAS、STATA、Python を比較したこちらの記事をご覧ください。)

さらに、R は 10 年前よりもはるかに学びやすくなっています。以前は、R は初心者には難しいと評判でしたが、RStudio のような使いやすいユーザー・インターフェースや、tidyverse のような直感的に理解しやすいコード、そして多くの教材を利用すると、作業はずっと簡単になります。

怖がらずに、R の世界に踏み入れてみてください!

4.1 Excel からの移行

Excel から R への移行は、非常に達成しやすい目標です。気が遠くなるかもしれませんが、あなたならできます!

確かに、Excel のスキルに長けていれば、VBA のようなスクリプトツールを使用して、Excel だけで非常に高度な操作を実行できます。Excel は世界中で使用されており、疫学者や疫学業務担当者にとって不可欠なツールです。しかし、R で補完することで、ワークフローを劇的に改善し、拡張することができます。

メリット

R を使用すると、時間の節約、より一貫性のある正確な分析、再現性、共有性、および迅速なエラーの修正という点で大きな利点があります。他の新しいソフトウェアと同じように、慣れ親しむために投資しなければならない時間の「学習曲線」があります。しかし、R を使うことで得られるメリットは非常に大きく、R によって新たな可能性が開かれるでしょう。

Excel はよく知られたソフトウェアで、初心者でもカーソル操作で簡単に簡素な解析と視覚化を行うことができます。それに比べて、R の機能やインターフェースを快適に使えるようになるには数週間かかるかもしれません。しかし、近年、R は初心者にも使いやすいように進化しています。

多くの Excel ワークフローはメモリと反復に依存しているため、エラーが発生する可能性が高くなります。さらに、一般的には、データのクリーニング履歴、解析方法、および使用されている方程式は表示されません。新しい仕事仲間が Excel ブックの動作とそのトラブルシューティング方法を習得するには、かなりの時間がかかります。R を使用すると、すべてのステップがスクリプトに明示的に書き込まれ、簡単に表示、編集、修正、および他のデータセットへの適用が可能になります。

Excel から R への移行を始めるにあたり、いくつか重要な点で、基本的に考え方を変える必要があります。以下に詳しく説明していきます。

データの整理

「人間だけが読める」乱雑なデータの代わりに、機械で可読なきちんとした「整然(tidy)」データを使用します。こちらの R の「整然」データに関するチュートリアル で説明されているように、「整然」データには主に以下の 3 つの要件があります。

  • 各変数がそれぞれ独自の列となっていること
  • 各観測値がそれぞれ独自の行となっていること
  • 各値がそれぞれ独自のセルとなっていること

Excel ユーザーの方は、Excel の「表」 が担う、データを標準化して書式を予測しやすくする役割と同じように捉えてください。

「整然」データの例としては、このハンドブックを通して使用されている症例リスト(linelist)が挙げられます。各変数はそれぞれ 1 列で表され、各観測値(症例)は独自の行を持ち、各値はそれぞれ 1 つのセルに収められています。以下に、症例リストの最初の 50 行を表示します。

整然としないデータに遭遇する主な理由は、多くの Excel スプレッドシートが、機械やソフトウェアによる読みやすさではなく、人間にとっての読みやすさを優先するように設計されているためです。

この違いを理解しやすくするために、人間の可読性を機械の可読性より優先した整然としないデータの架空の例を以下に示します。

例 1:

問題点:上のスプレッドシートには、R が解読しにくい結合されたセルがあります。どの行を「ヘッダ」と見なすかが、明確ではありません。右側には色付けされた辞書があり、セルの値は色で表されますが、これも R は簡単に解釈できません(また、色覚多様性への配慮も欠けています!)。さらに、異なる情報が 1 つのセルにまとめられているのも問題です(複数の組織が1 つの領域で作業している、または「TBC」というステータスが「パートナー D」と同じセルにある)。

例 2:

問題点:上のスプレッドシートでは、データセット内に空の行と列が多数あります。これは、R でクリーニングする際に頭痛の種になります。さらに、GPS 座標は、1 つの施設につき、2 つの行に書かれています。その上、GPS 座標は 2 つの形式で書かれています!

「整然」データセットは人間の目には読みにくいかもしれませんが、データのクリーニングと分析を簡単にしてくれます!整然データは、例えば「縦型」や「横型」(詳しくは、データの縦横変換 の章を参照ください)など、さまざまな形式で格納できますが、上記の原則は守られています。

関数

R の単語「関数」は新しいかもしれませんが、この概念は Excel にも数式として存在します。Excel の数式も、セミコロンと括弧の配置など、正確な構文で書かれている必要があります。R の関数を学ぶにあたって必要なのは、いくつかの新しい機能と、それらが R でどのように連携するかを学ぶことだけです。

スクリプト

R では、ボタンをクリックしてセルをドラッグする代わりに、すべての処理順と処理内容を「スクリプト」に書きます。Excel ユーザーは、スクリプトによって処理する「VBA マクロ」と同じように捉えるとわかりやすいでしょう。

R のスクリプトは、段階的な手順で構成されています。これにより、第三者がスクリプトを読んだ際、あなたがどのような手順を実行したか簡単に確認でき、デバッグ(エラーや間違った計算の修正)にも役立ちます。R の基礎 の章で説明されている例をご覧ください。

ここでは、Rスクリプトの一例を紹介します。

Excel から R への移行に関するリソース

以下に、Excel から R へ移行する際に役立つ資料を紹介します。

R と Excel の相互干渉

R には、Excel ブックのインポートおよびデータの操作、Excel ファイルのエクスポートや保存、また Excel シートの操作に十何位対応する方法が複数あります。

イタリック体や補足のためのテキストなど、見た目を美しくする Excel の書式設定の一部は、翻訳時に失われる可能性があります。ワークフローで、元の Excel フォーマットを保持したまま R と Excel の間でドキュメントをやり取りする必要がある場合は、openxlsx などのパッケージをお試しください。

4.2 Stata からの移行

Stata から R へ

多くの疫学者や疫学業務担当者は、最初に Stata の使い方を教わっており、R へ移行するのが難しく感じるかもしれません。しかし、もしあなたが Stata を快適に使用しているのであれば、R への移行はあなたが考えているよりも確実に行いやすいでしょう。Stata と R の間には、データの作成方法と変更方法、および分析機能の実装方法に関していくつか重要な違いがありますが、このような重要な違いを学習すると、あなたの Stata スキルを R で使用できるようになります。

以下に Stata と R の主な違いをいくつか紹介します。

一般的な注意事項

STATA R
一度に表示および操作できるデータセットは 1 つのみ。 複数のデータセットを同時に表示および操作できるため、多くの場合、コード内でデータセットを指定する必要がある。
利用可能なオンラインコミュニティは、https://www.statalist.org/ 利用可能なオンラインコミュニティは、RStudio,、StackOverFlowR-bloggers
カーソル&クリック機能をオプションで提供。 最小限のカーソル&クリック機能。
help [command] コマンドでヘルプが利用できる。 [function]? コマンドでヘルプが利用でき、ヘルプウィンドウで検索を行える。
コードをコメント化する際には、* または /// または /*TEXT*/ を使用する。 # を使用してコードをコメント化する。
ほとんどすべてのコマンドは Stata に組み込まれている。新しい関数やユーザーが作成した関数は、ssc install [package] を使用して ado ファイルとしてインストールできる。 R は基本的な関数である base と一緒にインストールされるが、一般的な使用方法では、CRAN から他のパッケージをインストールする必要がある(R の基礎 の章を参照) 。
分析用のコードは通常、do ファイルに書き込まれる。 分析用のコードは、R Studioの source ペインで R スクリプトに書かれる。R Markdown に書く方法もあり。

作業ディレクトリ

STATA R
作業ディレクトリは絶対ファイルパスで表される。(例:“C:/usename/documents/projects/data/”) 作業ディレクトリは、絶対ディレクトリにすることも、here パッケージを使用してプロジェクトのルートフォルダからの相対ディレクトリにすることもできる(データのインポート・エクスポート の章を参照)。
pwd で現在の作業ディレクトリを参照する。 getwd() または here()here パッケージを使用している場合)で参照する。
cd “フォルダの場所”で作業ディレクトリを設定する。 setwd(“フォルダの場所”)、または set_here("フォルダの場所")here パッケージを使用する場合)で設定する。

データのインポートと表示

STATA R
ファイルタイプごとに専用のコマンドがある。 ほとんどの種類のファイルに対して、rio パッケージの import() を使用できる。特定の種類のファイルを扱う代替の関数もある(データのインポート・エクスポート の章を参照)。
csv ファイルの読み込みは、 import delimited “filename.csv” で行う。 import("filename.csv") を使用。
xslxファイルの読み込みは、 import excel “filename.xlsx” で行う。 import("filename.xlsx") を使用。
browse コマンドを使用して、新しいウィンドウでデータを閲覧できる。 View(dataset) を使用して、RStudio の soruce ペインでデータセットを表示できる。R は複数のデータセットを同時に保持できるため、View() 関数の括弧内でデータセット名を指定する必要がある。また、関数名は大文字「V」で始まることに注意。
変数名と基本情報を提供する summarize を使用してデータセットの概要を取得できる。 summary(dataset) を使用してデータセットの概要を取得できる。

基本的なデータ操作

STATA R
データセット列は、多くの場合「変数」と呼ばれる。 より一般的には 「列」 と呼ばれ、場合によっては 「ベクトル」 または 「変数」 と呼ばれます。
データセットを指定する必要がない。 各コマンドで、データセットを指定する必要がある。例を確認したい場合は、データクリーニングと主要関数 の章を参照してください。
新しい変数を作成する場合は、コマンド generate varname = を使用する。 関数 mutate(varname = ) を使用して新しい変数を作成できる。dplyr 関数の詳細は、データクリーニングと主要関数 の章を参照してください。
変数名を変更する場合は、rename old_name new_name を使用する rename(new_name = old_name) 関数を使用して列の名前を変更できる。
変数を削除する場合は、drop varname を使用する。 select() でマイナス記号と削除したい列名を括弧内に書き、変数を削除することができる。
因子型の変数にラベルを付ける場合は、 label define などのコマンドを使用する。 値をラベル付けしたい場合は、対象の列を因子型に変換し、レベルを指定する。詳しくは、因子(ファクタ)型データ の章をご参照ください。R では通常、Stata のように列名をラベル付けすることはしません。

記述的分析

STATA R
変数のカウントを表示したい場合は、tab varname を使用する。 table(dataset$colname) のように、 table() にデータセット名と列名を指定する。または、データのグループ化 の章で説明するように、 dplyr パッケージの count(varname) を使用する方法もある。
2x2 テーブルのような 2 つの変数のクロス集計表の作成には、tab varname1 varname2 を使用する。 table(dataset$varname1, dataset$varname2 または count(varname1, varname2) を使用する。

上の一覧表では、Stata コマンドを R に変換する概要を説明しましたが、すべてを網羅しているわけではありません。Stata ユーザーが R に移行する上で役立つ資料は他にもたくさんあり、以下にいくつか紹介します。

4.3 SAS からの移行

SASから R への移行

SAS は公衆衛生機関や学術研究分野で一般的に使用されています。新しい言語への移行は簡単ではありませんが、SAS と R の主要な違いを理解することは、すでに習得済みの言語を使用して新しい言語を操作するのに役立ちます。SAS と R の間のデータ管理および記述分析における主な違いについて、概要を以下に示します。

一般的な注意事項

SAS R
利用可能なオンラインコミュニティは、SAS Customer Support 利用可能なオンラインコミュニティは、RStudio,、StackOverFlowR-bloggers
help [command] コマンドでヘルプを利用できる。 [function]? コマンドでヘルプが利用でき、ヘルプウィンドウで検索を行える。
* TEXT ; または /* TEXT */ を使ってコードをコメント化できる。 # を使用してコードをコメント化する。
ほとんどすべてのコマンドは SAS に組み込まれている。ユーザーは、SAS マクロ、 SAS/IML、 SAS Component Language (SCL)、および最近では、プロシージャ Proc FcmpProc Proto を使用して新しい関数を作成できる。 R は基本的な関数である base と一緒にインストールされるが、一般的な使用方法では、CRAN から他のパッケージをインストールする必要がある(R の基礎 の章を参照) 。
分析は通常、Editor ウィンドウで SAS プログラムを書くことで実行される。 分析用のコードは、R Studioの source ペインで R スクリプトに書かれる。R Markdown に書く方法もあり。

作業ディレクトリ

SAS R
作業ディレクトリは、 %let rootdir=/root path; %include “&rootdir/subfoldername/filename” を使用してルートフォルダを定義することで、絶対的またはプロジェクトのルートフォルダからの相対的に指定することができる。 作業ディレクトリは、絶対ディレクトリにすることも、here パッケージを使用してプロジェクトのルートフォルダからの相対ディレクトリにすることもできる(データのインポート・エクスポート の章を参照)。
現在の作業ディレクトリは、%put %sysfunc(getoption(work)); で参照できる。 getwd() または here()hereパッケージを使用している場合)で参照する。
作業ディレクトリは、libname “フォルダ場所” で設定できる。 setwd(“フォルダの場所”)、または set_here("フォルダの場所")here パッケージを使用する場合)で設定する。

データのインポートと表示

SAS R
Proc Import プロシージャを使用するか、 Data Step Infile ステートメントを使用してインポートする。 ほとんどの種類のファイルに対して、rio パッケージの import() を使用できる。特定の種類のファイルを扱う代替の関数もある(データのインポート・エクスポート の章を参照)。
csv ファイルの読み込みは、 Proc Import datafile=”filename.csv” out=work.filename dbms=CSV; run; または Data Step Infile statement を使用することで行うことができる。 import("filename.csv") を使用。
xslx ファイルの読み込みは、 Proc Import datafile=”filename.xlsx” out=work.filename dbms=xlsx; run; または Data Step Infile statement を使用することで行うことができる。 import("filename.xlsx") を使用。
データを閲覧する際は、Explorer ウィンドウを開いて、対象のライブラリとデータセットを選択し、新しいウィンドウで閲覧する。 View(dataset) を使用して、RStudio の soruce ペインでデータセットを表示できる。R は複数のデータセットを同時に保持できるため、View() 関数の括弧内でデータセット名を指定する必要がある。また、関数名は大文字「V」で始まることに注意。

基本的なデータ操作

SAS R
データセット列は、多くの場合「変数」と呼ばれる。 より一般的には 「列」 と呼ばれ、場合によっては 「ベクトル」 または 「変数」 と呼ばれます。
新しい変数を作成する際には、特別な手順は必要なく、新しい変数名、等号、値の式の順に入力する。 関数 mutate(varname = ) を使用して新しい変数を作成できる。dplyr 関数の詳細は、データクリーニングと主要関数 の章を参照してください。
変数名を変更する場合は、rename *old_name=new_name* を使用する。 rename(new_name = old_name) 関数を使用して列の名前を変更できる。
変数を保持・選択する場合は、**keep**=varname を使用する。 select() の括弧内に保持したい変数名を書き、変数を選択することができる。
変数を削除する場合は、**drop**=varname を使用する。 select() でマイナス記号と削除したい列名を括弧内に書き、変数を削除することができる。
因子型の変数は、 Label ステートメントを使用して Data Step 内でラベル付けできる。 値をラベル付けしたい場合は、対象の列を因子型に変換し、レベルを指定する。詳しくは、因子(ファクタ)型データ の章をご参照ください。R では通常、Stata のように列名をラベル付けすることはしません。
観測値や行は、Data Step の Where または If ステートメントを使用して選択できる。選択条件が複数ある場合は、“and” コマンドで区切る。 filter() の括弧内に AND 演算子(&)またはコンマで区切られた複数の選択条件を指定し、観測値や行を選択できる。
データセットは、Data Step の Merge ステートメントを使用して結合できる。マージするデータセットは、最初に Proc Sort プロシージャを使用して並び替える必要がある。 dplyr パッケージには、データセットをマージするための関数が複数ある。詳細は、データの結合 の章を参照ください。

記述的分析

SAS R
データセットの概要を確認するには、変数名と記述統計を表示する Proc Summary プロシージャを使用する。 skimr パッケージの summary(dataset) または skim(dataset) を使用してデータセットの概要を取得できる。
変数のカウントを表にするには、proc freq data=Dataset; Tables varname; Run; を使用する。 記述統計表の作り方 の章を参照してください。base R の table()janitor パッケージの tabyl() など複数の方法があります。Rは複数のデータセットを保持するため、関数を使用する際はデータセットと列名を指定する必要があることに注意してください。
2x2 テーブルのような 2 つの変数のクロス集計表を作成するには、 proc freq data=Dataset; Tables rowvar*colvar; Run; を使用する。 上と同様に、 table()tabyl() または 記述統計表の作り方 の章で説明されている方法を使用する。

参考資料:

R for SAS and SPSS Users (2011)

SAS and R, Second Edition (2014)

4.4 データの相互運用性

R の rio パッケージで STATA .dta ファイル、SAS .xpt および .sas7bdat ファイル、 SPSS .por および .sav などのファイルをインポートまたはエクスポートする方法については、データのインポート・エクスポート の章をご覧ください。