最近、文系の友人が回帰曲線を描きたいと言い出したので、その手伝いをするために統計用のプログラミング言語Rをちょこっと勉強したので、そのメモ。
###Rのインストール
僕はLinuxMint(Ubuntuの亜種)を使っているので、http://sites.psu.edu/theubunturblog/installing-r-in-ubuntu/ を参考に簡単にインストールできた。
sudo apt-get install r-base r-base-dev
をターミナルで叩けばよい。
###インタラクティブモードでの実行
自分の場合は、常にこのモードを使っていた。非常に簡単で、ただコマンドラインで、Rと入力してReturn(Enter)を叩くだけである。すると、Rの説明みたいな文章が表示されて下にプロンプトが現れる。そこに、数式とか関数を入力していけばよい。スクリプトを書いて、それを実行したい場合は、
source("スクリプトのパス")
とすればいいらしい。
基本的には計算、グラフィックス、データの入出力機能がかなり充実したプログラミング言語であり、とくにインタラクティブモードに至ってはほとんどPythonやRubyと同じように扱える。if文やfor文などの制御文もちゃんとあるし、自分で関数定義もできるので結構よい。(当初は、ここまで柔軟なのものだとは思っておらず、言語であるとも認識していなかったので若干驚いた)
Rには元からいろいろな関数が用意されており、目的ごとに分類されたパッケージに入っている。また、デフォルトではロードしていないパッケージもあり、それらは
library("package-name")
で使えるようになる。例えば、友人が最初によこしたデータは、STATAという統計ソフトが使っているデータ形式である.dtaだった。これをRで読み込むためには、foreignパッケージのread.dta()を使う。このパッケージはデフォルトでロードされていないので、
library("foreign")
とする必要がある。
###データの取り込み
データ解析するには、何よりもまずデータがなければならない。このデータは大抵はテキストやCSV、あるいはExcelなどで手に入る。それらをRで処理するためには、Rに取り込まなければならない。Rにはデータ形式に応じて適切にデータを取り込むための関数群が用意されている。テキスト、あるいはCSVなど形式を取り込む最も汎用的な方法は、read.table()関数を使うことである。
data <- read.table("~/data.txt", skip=1, header=T, sep=",")
のようにすることによって、"~/data.txt"からデータを読込み、それをデータフレームという型のオブジェクトに変換し、それをdataという変数に代入してくれる。ちなみに、skip=1は、データの1行目にデータの説明などの余計なものがついているから、それを無視してねと指定する。header=Tは、データの各フィールドのラベルが読み込むデータにあるから、それも取り込んでねという意味。また、sep=","は、各フィールドがコンマで区切られているからねと関数に教えている。この他にもいくつかオプションがあるので、適宜確認すべし。
データフレームは、いわゆるデータベースのテーブルみたいなものである。データフレームは行列のようなもので、各行1つのレコードに、各列がフィールドに対応する。我々はいつでも、x番目のレコードのフィールドa、フィールドb、フィールドcを取り出すことができる。
read.table関数は割と汎用的な読み込み関数であるが、頻繁に使われるデータ形式に関してはそれ専用のラッパー関数がある。例えば、CSVファイルを読み込みたいのであれば、read.csvを使ったほうが便利である。これの使いかたは簡単で、引数にデータファイルのパスを指定するだけである。また、Microsoftのxlsx形式だったら、xlsxパッケージのread.xlsx関数を使う。ただし、このパッケージはデフォルトではインストールされていないので、
install.packages("xlsx", dep=T)
library("xlsx")
data <- read.xlsx("~/excel_file.xlsx", "Sheet1")
という感じで使う。
###回帰分析
今回Rを勉強した目的なので、とりあえずのラスボス。凝ったことをしないのであればめっちゃ簡単で、
result <- lm(formula=y~x1 + x2 + x3, data=my_data)
summary(result)
とすれば、分析結果が変数resultに代入され、それがsummary関数によって表示される。coefficientを見ればどの説明変数がどれだけ従属変数に影響を与えているかをみることができる。ここで、dataに指定しているmy_dataはデータフレームで、y, x1~x3はmy_dataのフィールドの名前である。また、formulaは回帰分析のモデルを指定するためのものである。詳しくはドキュメント等を参照していただきたいが、ここでは、y = a + b1x1 + b2x2 + b3*x3 + e というモデルに当てはまるように各係数b1~b3と切片aを求めるように指定している。
今回初めてRに触ってみて、とても便利だなと感じた。今後も勉強を続けていきたいと思う。とくに、参考にさせて頂いたサイトに、"グラフィックも充実"と書いてあったので、それも使いこなせるようになりたいと思う。これでgnuplotともさよならできる!かもしれない。
###参考文献
Rの基礎とプログラミング技法 U.Ligges 著 石田基広 訳 Springer Japan社