WaterMind PC Blog

PCとネットワークに関するニュースコラム.

感動の統計解析ソフト R とは?

2005-05-10 08:31:17 | ソフト
感動の統計解析ソフト R とは?

 自分は大学で心理学を専攻していた関係で,統計学をかじったことがある.また,レポートを書くために,簡単な統計処理のプログラムを,当時所有していたMZ-80KPASCAL言語(オプションで購入したSP-4001)で組んだこともあった.さらには,その統計処理のグラフ化を行い,それをNECのパソコン用小型カラー・プロッタ・プリンタPC-6022で描画するために,PPIのIntel8255と言う石を用いて,パラレルインターフェースをはんだごてで自作したり,プロットコマンドを直接プリンタに送り込むプログラムを記述したりもしていた.

 だがご存じのように,当時のマイコン(パソコンとは呼ばれていなかった)はあまりにも非力であり,本格的な統計処理は,大学のメインフレーム(HITAC)に任せるしかなかった.あまりにも涼しすぎる計算機センターの端末室と,自分の定位置であった実験室がかなり遠かったため,実験室のPC-9801VM2からΣ計画の一環で導入された専用モデム経由で,メインフレームに接続する端末プログラムをBASICで作成し,実験室で贅沢にも(?)TSSしていた.実験終了後,SASの統計処理スクリプト(理由ありの100回以上のANOVA)と,実験データをその自作プログラムでメインフレームに流し込み,センターの巨大ロボットの頭部に似た轟音ラインプリンタに出力させる.自分はENTERキーのPUSHとともに,実験室から計算センターへダッシュ.独特のにおいがするプリンタ室につくと,プリンタの裏側の窓をのぞき込みながら,自分の100ページに近い出力の順番を待つのだ.はたして実験群とコントロール群に有意な差はあるのか?ちょっとドキドキ,わくわくの瞬間だった.

 その後,実験データの多変量解析(特にクラスタ分析や重回帰分析)なども行い,そのたびにSASの実力を思い知らされたのだが,8年通った大学を卒業すると,これらの知識はみな無用なものとなっていった.

 ところがついこの間,パソコン用の最も優れた,最も安い統計処理ソフトを選定する必要に迫られた.MS-EXCELさえあれば,たいていのことでは不自由しないはずなのだが,様々な統計分析に,本格的に対応したソフトとなるとやはり自分の場合,SPSSか,SASぐらいしか思い浮かばなかった.しかし,SASにしろ,SPSSにしろ,個人が購入するにはあまりにも値段が高すぎる.ということで,フリーの本格的統計ソフト探してみると,なんと!あるではないか!

 ということで,今回はフリーで,オープンソースの統計処理ソフトの「R」をご紹介().このソフトは,「r-project.org」により開発が続けられており,現在の最新バージョンは「R version 2.1.0」.オープンソースなので,例によってUnix・Linux上で主に使用されているが,Windows,MacOSでも使用可能.ある程度の日本語化もされている.統計手法としては「線形・非線形モデル,古典的統計検定,時系列解析,判別分析,クラスタリング」などをサポートし,さらにはグラフィックスも提供する.かつて「自宅パソコンで,SAS」を夢見ていた自分にとっては,まさに夢が現実になる時がやってきたのだ!しかも無料で!

 ちなみに,統計処理ソフト「R」と,SPSSや,SASとの違いについては,こちら

 メインマシンに最新バージョンのRをインストールし,起動してみると,日本語メニューを持つMDIのWindowの中に,コンソール窓が開く.その中に,日本語メッセージが表示されているようだが,文字化けしていたため,「編集」メニューの「Rguiプリファレンス」のフォント設定に,日本語フォントを設定し,「保存」ボタンをクリックすると,文字化けが解消された.「demo()と入力すれば,デモが見られる」とのことなので,早速コンソールに「demo()」と入力.すると,別のWindowが開き,いくつかのデモについての英語の概説がなされていた.そこでとりあえず「demo(graphics)」と入力し,グラフ表示のデモを見てみた.

 「Type <return> to start :」と表示されたので,ENTERキーを押すと,グラフ用のWindowが開き,そのWindowをクリックすると,デモが始まった.コンソールに,グラフ表示のためのRスクリプトが表示されると同時に,様々なグラフが次々に表示されていった.グラフ表示のためのRスクリプトの行数は,最大20行,最小5行ぐらいで,非常に簡潔な表現でグラフ表示ができそうだ.例えば,ダミーデータを生成し,それを「箱ひげ図」でプロットするデモのRスクリプトは以下の通り(生成された図は,ブログ画像参照).
par(bg="cornsilk")
n <- 10
g <- gl(n, 100, n*100)
x <- rnorm(n*100) + sqrt(as.numeric(g))
boxplot(split(x,g), col="lavender", notch=TRUE)
title(main="Notched Boxplots", xlab="Group", font.main=4, font.lab=1)

各行を解説してみると…


1)par(bg="cornsilk")

par():

図の表示パラメータ(オプション)をセットする.

この例では,図の背景を「コーンシルク」としている.

bgは「Background」のこと.

2)n <- 10

変数nを10とする.

代入式は「<-」となる.

これは←を意味している.

ちなみに既に本物のデータがあれば,この2)~4)までは不要となる.


3)g <- gl(n, 100, n*100)

n個の水準(Level,ANOVA用語,グループ)を持ち,その水準値を100回繰り返す,1000個(n×100)の数列を生成し,gに代入する.

gl():

設定した要因(Factor,水準の集まり,ANOVA用語)を生成する.

「A,B,C」などの名義水準を持つ要因も生成できる.

この例では,数値を水準ととして生成している.

4)x <- rnorm(n*100) + sqrt(as.numeric(g))

プロット対象のダミー観測値(Observations)を生成する.

ダミー観測値はその水準を数値化し,その平方根を
標準正規分布からのランダムサンプルに加算したもの.

したがって,水準10の観測値群は,水準1の観測値群の値よりも,10の平方根分,値が高め傾向になっている.

rnorm(n*100):

平均=0,分散=1の標準正規分布から,1000個(n×100)の観測値をランダムに得る.


as.numeric(g):

gは水準(グループ名)であり,数値ではないため,それを数値に変換し,計算できる対象としている.

いわゆる「型変換(キャスト)」.


sqrt():

平方根をとる.

5)boxplot(split(x,g), col="lavender", notch=TRUE)

箱ひげ図をプロットする.

split(x,g):

ダミー観測値群xのデータを,要因gの水準に分類する.

xの1番目の観測値を,gの第1番目の水準に分類し,以下同様.


boxplot():

箱ひげ図をプロットする.

colはcolorのことで,この例では箱内部をラベンダーで彩色する.

notchは「箱のくびれ」のことで,TRUE(真)を指定すると箱に中央値のところで,くびれができる.

6)title(main="Notched Boxplots", xlab="Group", font.main=4, font.lab=1)

図のタイトルや軸名及びそれぞれのフォントの大きさを指定する.

title():

タイトル:「Notched Boxplots」,フォントサイズ4
X軸名:「Group」,フォントサイズ1

xlabは「x label」のこと.


 読んで頂ければわかるとおり,Rのスクリプトは,非常にすっきりとした記述ができる.すでに私の場合,統計解析ソフトを使う機会は今後ないと思われるが,実験や品質管理(QCC)等で統計的解析や図示が必要な場合に,「R」は大いに役立ってくれるだろう.オープンソース・コミュニティーの面々には,心からの賛辞を送りたい.

 今時の理系学生や心理学の学生たちは,自宅パソコンで実験データの統計解析ができるのかと思うと,ほんとうにうらやましい限りだ.

「自分の学生時代に,それができていたら…」

 かつて心理学の大学院をめざし,その後挫折した私なのだが,彼らのめぐまれた境遇に,未だジェラシーを感じてしまうのだった.<完>