« 心の風邪としてのうつ病 | トップページ | 入眠の困難 »

2006/10/06

Rの使い方メモ2

 Rを使っていると、なぜ統計の人たちがこれを使うことを好むのかが分かる気がする。手作りのような感覚がもたらされるのだ。SPSSであれば、例えばメニューから分散分析を選択すれば必要な手続きは自動で行われるが、Rでは分散の等質性の検定も、多重比較も行われない。分散分析によってなされるのは、本当に分散分析の部分だけだ。そもそも、分散分析を行ってから多重比較を行うという手続きは、検定の多重性の問題に引っかかるために行うべきではないという人もいて、本来的には両者はセットではない。Rはそれを正しく別物として扱っているのだ。

 そのため、自分がどのような手続きを持って統計的処理を行おうとしているかを理解しきれない私のようなものには、とても手ごわい相手になってくる。私も好き好んでこれを使おうとしているわけではなく、Universal Binary版のSPSSが出れば、そちらを使いたいと思っている。けれども、今のところそれは望めないうえにMac版は英語環境でなければ使えないようなので、普段の環境で使えるRに頼らざるを得ないという理由があるのだ。

 さて、いくつか分かってきたことを備忘録としてメモしておこうと思う。


(1) Excelファイルの読み込み
 まず、ExcelでデータをCSV形式で保存しておく。それをRで読み込む際のコマンド(という呼び方でいいのだろうか。関数?)は以下の通り。

   df <- read.csv("パス名")

 これで、Excelから書き出したデータファイルがdfというデータの集まりとしてR上で取り扱われるようになる。「パス名」にはExcelから書き出したファイルまでのパスを書けばよいが、それが分からない時にはファイルを直接ドラッグ&ドロップするとRが勝手にパスを入れてくれる。


(2)カテゴリーやグループの指定
 データをRに読み込んだ時点でカテゴリーやグループ(例えば性別)が名前(男, 女)で入れられている場合を除けば、たいてい数字(1, 2)がグループ分けを表わしている。Rにこれがグループ分けであることを伝える必要がある。

   df[,3] <- factor(df[,3], levels=1:2, labels="男", "女")

この関数の意味するところは、「データの集まりdfの3列目に次のものを代入する。それはカテゴリー(要因=factor)であり、データの集まりdfの3列目に1から2の数字で入っているものをそれぞれ男と女と置き換えたものである」というところだと私は理解している。labelsは指定しなくてもいいのだと思うが、ここで男・女などのラベルを付けておけば、後で統計処理をした時にそのラベルを使用してくれるので便利なようだ。


(3)基礎統計量
 基本的な記述統計は以下のコマンドで算出される。

   summary(df)

 これによって、平均値、中央値、最小値、最大値などが表示される。ちなみにこれではデータの集まりdfに含まれる全ての変数の基礎統計量が算出されるため、狙った変数だけを出すには以下の関数を用いる。

   summary(df[,25])

 どうやらdf[,25]という指定の仕方で、データの集まりdfの中の25列目を表わすことになるらしい。


(4)グループごとの統計量
 しかし、実際の記述統計量としては、グループごとの平均値、標準偏差などを算出することが多い。この場合の便利なやり方をまだ分かっていないのだが、私は今のところ2つの方法を使っている。1つは分散分析も一緒に行うもので以下の通り。

   breakdown(25, 3, df, latex=FALSE, test=c("oneway"), digits=3)

 breakdownという関数が何を意味するかは分からないが、これによって「データの集まりdfを使って、そのうちの25列目を従属変数、3列目を独立変数が入れられた列として捉え、一元配置の分散分析を行う」という命令になるようだ。ちなみにlatexはLATEXというアプリケーションで使うための諸々の記号が入った形での結果表示を意味するので、それを使わなければFALSEがいいように思う(必要な時はTRUEを入れる)。digitsは小数点以下を何桁で表わすかの指定。
 この関数によって、各群のn数、平均値と標準偏差も同時に表示される。onewayの代わりにnoneを入れれば、検定は行われないず、kruskalを入れれば、クラスカル・ウォリス検定が行われるようだ。ただし、ここでは分散分析にしろ、クラスカル・ウォリス検定にしろ、多重比較までは行ってくれない。このあたりが統計の苦手な私にはめまいがするところなのだ。

 もう1つは純粋にグループごとに集計を行うものだが、こちらは別の応用の仕方があるようだ。

   tapply(df[,25], df[,3], average)

 tapplyという関数が何を適用(=apply)させるものかはわからないが、これによって「データの集まりdfの3列目でグループ分けをして、それぞれのグループごとに25列目の平均(=average)を出す」という命令になるようだ。averageの部分にはいろいろな関数を入れられるようで、sumを入れれば合計が、sdを入れれば標準偏差が、varを入れれば分散が算出されるようだ。

 別の応用の仕方というのは例えば次のような時。
「分散分析を行おうと思ったら、分散の等質性が保証されないために、ノンパラメトリック検定であるクラスカル・ウォリス検定を使うことになり、青木先生のサイトのkruskal.wallis関数で多重比較まで一気にやってしまった。しかし、これはどのグループとどのグループに差があるかは分かっても、そのどちらが上なのか下なのかが分からない。分散分析は平均値の差を比較するものだが、クラスカル・ウォリス検定は被検者の得点に順位をつけて、その順位の平均を比較するものだ。そのため、各グループの順位の平均を知りたい。」
 このような時に以下の手続きで順位の平均を算出できる。

   r <- rank(df[,25])   ←dfの25列目に順位をつけ、それをデータの集まりrとする。
   tapply(r, df[,3], average)   ←dfの3列目でグループ分けして、rの順位のグループごとの平均を出す。

 ちなみに、この2つは次のように入れ子構造にして記述することもできるようだ。(下の関数のrのところに上の関数の右側部分を直接入れてしまっている)

   tapply(rank(df[,25]), df[,3], average)

 慣れてくると、こうした操作によって自由に変数を作ったり、処理を行ったりできるのだろう。私には到底無理に思えるけれども…。


 他にもいろいろメモしておきたいことはあるが、とりあえず長くなるので続きは次回に伸ばそうと思う。とりあえず統計用語や統計的な知識に間違いがなければいいのだけど、と思う。

|

« 心の風邪としてのうつ病 | トップページ | 入眠の困難 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/88325/12168980

この記事へのトラックバック一覧です: Rの使い方メモ2:

« 心の風邪としてのうつ病 | トップページ | 入眠の困難 »