ここでは、フリーの統計解析ソフトRの使用にあたってflourishにとって必須のメモ事項を置きます。RjpWikiすらもどこに何が書いてあるのか分かりませ〜ん、と言う人間のためのものです。即ち、熟練者にとってはあまりにも当たり前過ぎる馬鹿馬鹿しいような事が、平然と書き連ねてあります。だが、初心者はそういう所においてこそ躓きます。
ところで、大事な大前提が。
「プログラムを組むのでない限り、Rの上で行列やデータをちまちまと入れ替えたり合成したりしないようにしましょう。」
それは表計算ソフトでやってしまい、黙って読み込ませ、黙って計算だけRにさせましょう。万能な人間がいないように、万能のソフトもありません。
以上のような趣旨から、Rを使う最小限の目的に徹底的に限定した部分のみを選択しています。
超低レベルなワタシ向けのリンク集はこちら

○ 履歴はそこに
作成したオブジェクト等は「作業ディレクトリ」の中の.RData,.Rhistoryと言う二つのファイルに保存される。
これらはデフォルトでは「マイドキュメント」に作成されるが、
そもそも「マイドキュメント」は
Windowsは通常スワップファイルをCドライブにおいており、
これが消耗すると暴走してしまうのでCドライブの容量を食いたくない、
Cドライブに置いておいてWindowsがお亡くなりになった場合、救出出来ない、
このフォルダは変なサブフォルダが勝手に出現するので目障り、
などなどで使わないのが幸せ。
そこで、作業ディレクトリを変更する。
「ファイル」→「ディレクトリの変更」
で、手頃なディレクトリを指定する。
○ あ、キー入力間違えちゃった
↑キーを押すと、直前にコンソールに入力したものがそのまま出てくる。←→を使って修正してから再リターン。
○ なにこれ、キモッ!
ちゃんとしたコマンドを打ち、答えが返ってくると
[1] …
[2] …
と、答えに行番号がついて順次返ってくる。最初は何のことか分からないので、非常に混乱させられる。
○ へるぷ
例えば、
help("TukeyHSD")
で、多重比較法の一つであるTukey's honestly significant difference testの使い方のヘルプが
別ウインドウで開く。
○ コンソールが覚えていることの一覧を出す
ls()
○ 覚えているオブジェクトの一覧を出す
objects()
○ オブジェクトを消す
rm(オブジェクト名)
Windows版の場合、コンソールメニューの「その他」から「全てのオブジェクトを消す」を選ぶと
全てのオブジェクトを消せる。
○ 代入
<-
○ オブジェクトの属性
オブジェクトとは、Rが直接操作する対象そのもののこと。
オブジェクトには以下の属性(class)の何れかがついている。
数値 :numeric 数値単体
論理値 :logical TRUE or FALSE
ベクトル :vector 数値で、1列か1行のもの。
行列 :matrix 数値でm×nの値が並ぶもの
データフレーム:data.frame 数値、文字、論理値を混在させられる
配列 :array 数値で、複数の行列が重なったもの
オブジェクトの属性を調べるにはclass()関数を用いる。
○ ファイル読み込み
変数 <- read.table("c:/..../....txt")
面倒がなくて使いやすい読み込み関数だが、
読み込んだオブジェクトは全てデータフレームになってしまうので、
そのまま計算等が出来ないのが玉に瑕。
データフレーム形式のままで結構数値処理が出来る関数が多いので、うっかりし勝ち。
数値のオブジェクトつまりは行列に変換するには data.matrix()関数 を用いる。
もうひとつ問題なのは、0のカラムがあった場合、強制的にデータフレームの扱いにしかしない。
全て実数形式で「0.0」と言うストリングにしてから読み込ませないといけない。
○ ファイル書き出し
write(変数,"c:/..../....txt")
各種データを吐き出す一般的な関数。
行列のデータフレームの場合には次の書式を用いる。
write(t(変数),"c:/..../....txt",ncolumns=n)
変数にどうして転置行列関数をかましてあるかと言うと、
恐ろしいことに、Rのコンソールに表示される順とは転置行列の順に出力されるから。
また、ncolumnsによって列数を指定することも必須。
そうでないと、勝手に4列程度で改行を入れて出力してしまう場合がある。
なお、ncolumnsパラメータは昔の解説書ではcolumnsになっていて現在は間違いなので注意。
○ べたべたにコンソールに表示されるものをファイルにする
Rは様々な定義が厳密なため、
初心者はファイルの出力でさえ動きが取れなくなることがある。
そんなときのお助けコマンド。
sink("d:/.../...txt")
で、当該ファイルにコンソールに表示されるべきものが全て吐き出される。
このコマンドはコンソール←→ファイルの切り替えコマンドとして定義されており、
このコマンドが効いている間はコンソールに結果は表示されない。
sink()でまたコンソールにのみ出力されるようになる。
○ 様々な分析の結果を”見る”
例えば重回帰分析をしてその結果をある変数に入れたとする。
当該変数名をタイプしたとしても、結果の全容を返してはくれない。
(※多数のファンクションを繋げて複雑高度な計算をするために
こういう仕様にしているんだろうな…)
結果全体を表示等する場合には
summary(変数名)
とする。
ただし、また元の計算を延々とやるので、やや時間がかかる。
だから、最初からsummary関数を使って代入してしまう。
○ 突然、嵐のように
Rも突然調子が悪くなることがある。
再インストールを。
ついでにバージョンアップのためにサイトを見ましょう。
○ 逆行列
solve()
○ 転置行列
t()
○ 行列積
変数 %*% 変数
○ 三角行列を対称行列にする
三角行列とは、正方行列の中で対角線以上または以下だけしか値が入っていない行列のこと。
典型的には、多数の変数間の相関係数を三角行列で出力する計算ソフトは多い。
対角成分を軸として対称側には同じ値が入っているのですから、表示するだけならばこのほうが見やすい。
だが、この相関係数を使って更に何か計算しようとする(例えば回帰法により因子得点を算出するとか)場合、
三角行列をちゃんと埋めてやらなければいけない。
この、残り半分も埋まった行列は対称行列。
まず、ファイルからRに読み込む前の処理が必要。
三角行列を吐き出す計算ソフトそのものが空欄を本当に何もない状態で吐き出す場合が多く、
表計算ソフトで一度読み込んで0.0を全部に入れてやらないといけない。
ここから本番。
x_corrを三角行列だとして…
y <- x_corr + t(x_corr) : まず転置行列を作り、行列の要素毎の和を作る。
diag(y) <- diag(y)/2 : 対角成分が倍になっているので、半分に。
x_corr <- y : 元の変数に書き戻し。
○ 行列の正負を逆転する
ある列の数値を全て正負を逆にする、と言うような用途はちょくちょくある。
これは、Rで行うアイテムではなく、表計算で事前処理として行うべきことですが、要するに
「−1を掛ける」
でおしまい。
※これは小学校の算数なのだが、あまりにも基礎的あまりにも当たり前なので、
オトナは忘れてしまうこと、と日記には書いておこう。(^_^;)
○ 因子分析は別のソフトで
Rの因子分析機能はかなり出来が悪いです。
例えば、デフォルトでは因子負荷行列は殆どまともに表示してくれないので、
因子間の相互相関性が高い原因がどこにあるのかのインスペクションが出来ません。
また、主因子解で繰り返し打ち切り基準が何なのか不明瞭だったりします。
このいい加減さは、”所謂理数系”の人たちには、
因子分析が前提としているような
「一つ一つの測定項目の精度は悪いが、
それらを合成して高い信頼性や妥当性を目指す」
と言う方向性が理解出来ず、
よって因子分析は非常にいい加減なtrialなだけのもの、
だと理解されているからと思われます。
彼らの使っている道具を幾多の先人が血みどろになって改善することで、
今の”理数系”の立派な道具立てが存在しています。
彼らは、それらに甘えているだけなのです。
因子分析も進歩している!
結局自分でスクリプトを書かないといけないような。
○ 重回帰分析
lm(data)で普通はおしまい。
この際、dataとしては第1列に目的変数のデータ値を入れ、
第2列目から説明変数を入れるのがデフォルト。
○ 共分散構造分析(SEM)はMxで
共分散構造分析のライブラリはsemだが、これはグラフィカルではないので、どうやらMxを使った方が良いらしい。
○ 対応のない1要因の分散分析から多重比較のTukey's WSD testを実施
1要因の分散分析を実施し、
アポステオリな多重比較法
(※一次元分散分析をやって有意差があった後に、個別にどの群同士が有意差があるかを調べる方法)
の中で最も良いとされるTukey's wholly significant difference testのやり方のメモ。
教科書(森敏明他、1992、心理学のためのデータ解析テクニカルブック、北大路書房)が
とっても分かりにくいので、まとめ直し。
特に、群毎のn数が等しくない場合(世の中普通はこれ)をしっかり記載。
必ずしもRのネタではない上に、この方法は直接にはRの関数にも入っていない。
Tukey's honestly significant difference test(Tukey's HSD)は最初から関数に入っており、
これは一般的であるようだが、検定力が低すぎるとされている、つまりお点が辛すぎる。
まぁ、「スチューデント化された統計量・q」はRの関数にあるから、いいか。
△ まず、分散分析
…を良くやるのだが、
永田靖 1998 多重比較法の実際
応用統計学 27,93-108
(※この文献はオンラインで公開)
によれば、多重比較と分散分析を同時に行うのは駄目との事。
分散分析で有意差なしなのに多重比較で有意差ありと言うことも、
その逆もあり得る―そんなバナナ、と誰もが思う。
同じことは、
Wilkins et al.1999
Statistical Methods in Psychology Journals: Guidelines and Explanations
American Psychologist August 1999, Vol. 54, No. 8, 594?604
(※この文献はAPAのサイトに公開)
のMultiplicitiesの節に記載されている。
つまり、
「個々の群間の有意差があるかどうかを論証すること」
と
「全体として群間に際があるかどうかを論証すること」
は全然違うのだ、と言うこと。
とは言え、
いずれ多重比較で算出すべき値と分散分析で行う計算はかなり重なっているので、
計算方法を以下に記載する。
分散分析→多重比較、を墨守する人を一応説得するためにも、
取り敢えず計算だけはやっておく、と。
順次次の値を計算する。
値の一部は、多重比較でも使用する。
Σは全データや全群に亘り加算することを意味する。
[X] =(Σデータ値)^2/データ数
[AS] =Σ(データ値^2)
[A] =Σ(群毎のデータ値の総和^2/群のデータ個数)
要因間平方和 :SSA =[A]−[X]
誤差平方和 :SSWC=[AS]−[A]
全変動平方和 :SST =[AS]−[X]
要因間自由度 :dfA =群数−1
誤差自由度 :dfWC=総データ数−群数
要因間平均平方:MSA =SSA/(群数−1)
誤差平均平方 :MSWC=SSWA/dfWC
F=MSA/MSWC
なお、MSWC=MSeとして多重比較で再利用する。
F0(有意水準,dfA,dfWC)よりもFは大きいか?
の判断が分散分析。
△ さて、Tukey's WSD testは段階法と呼ばれる方法。
平均値の差が大きい群同士から順番に小さい群に向かって一対比較をやっていく。
有意差がなくなったらば、そちらの”枝”の探索はそこでおしまい。
△ この方法は、「スチューデント化された範囲」統計量(略称q)を用いる。
この統計量はRのTukey関数で算出出来る。
△ 「チューキーのHSD検定におけるqの臨界値」を求める。
設定したい有意水準:α、群数:m、自由度:df
で統計量qを読み出す。
これをq(α,m,df)と置く。
ここで自由度df=総データ数−群数
これは分散分析本体と同じ。
※ちなみに、Tukey's HSD testはこの基準で以下のステップを全て判断する。
より簡略で一般的だが、検定力が乏しい大雑把な方法。
△ 平均値を小・左→大・右の順にソートする。
△ さて、比較しようとしている群の”段階数”を数える。
例えば、平均値が全て相互に異なる4群がある場合、
第1段階の分析では段階数は”4”である。
”間隔の数”ではないことに、ご注意。
以下同様。
△ ここからがstep by stepでやっていく段階
□ 比較しようとしている群間の平均値の差の絶対値を求める。
この値は、スプレッドシートに平均値の小さい順からカラムを横縦に並べたら、
三角行列にして関数を埋め込んで計算させれば良い。
□ 「ニューマン・クールズ検定におけるqの臨界値」を求める。
設定したい有意水準:α、段階数:r、自由度:df
で統計量qを読み出す。
これをq(α,r,df)と置く。
ここで自由度df=総データ数−群数
これは分散分析本体と同じ。
これも三角行列にして並べておく。
□ NDを求める
各群のデータ数が全て等しい幸せな場合には、
群内のデータ数を入れる。
よって、この場合にはstep by stepの中で再計算する必要は当然なし。
等しくない通常の現実のデータにおいては、
今比較している2群の各データ数の調和平均を
NDとする。
調和平均とは、「逆数の算術平均の逆数」のこと。
これも、三角行列にして並べておく。
□ 次の式にこれまで計算した値を代入する。
q(α,m,df)*q(α,r,df)*sqrt(MSe/ND)
この値を群間の平均値の差の絶対値が超えたらば、
群間には差がある、とする。
この値は、これまで作った三角行列等から一気に引いて計算させる。
□ 判定基準と、次のステップへの移行の仕方
両端の群同士即ちステップ数mの比較は、
既に分散分析で有意性が得られているので、当然有意になる筈。
三角行列の右上は少なくとも”○”が付くことになる。
次に、m−1のステップに進む。
ここでm−1のステップは右端と左端をひとつづつずらした
二つの”枝”が出来る。
これらの”枝”それぞれについて有意性を点検する。
もし、一方の枝では有意ではなかったならば、
それ以上その”枝”を縮めての検定をしてはいけない。
※これは人工知能論における探索判断打ち切りの一種のαカットですね。
より具体的には、あるカラムで有意でなかった(×)らば、
その下と左のカラムは全て×になると言うこと。
△ 全ての”枝”が×になったらばおしまい。
ステップ数2をやったらば、勿論おしまい