Rstudioにチャレンジ2
ということで怒涛の更新。
前回の設定でもう一度開いてみる。
ほうほう。作業ディレクトリの中にあるファイルは全て右下で管理してくれている。左下は正しくコンソールなんだな。
えっとこのめんどくさいブツブツ書いてあるのを消すのはどうだったけ??
edit→Clearconsole でOK。
配置に関して、多分それぞれいろいろやり方があるんだろうけど、僕の好みにちょっと変えてみよう。おおおサイズも結構変わるんだね。
変更は前回のRstdio→Prefarances→Panelayoutで。
僕は今まで流れに沿って、左にコンソール。右にエディタを配置。ワークスペースブラウザとFileはもともと使っていなかったのでちょっと小さめに配置してみた。
さて、これでちょっと昔ののデータを読み込んでみよう。
おおすげー。右上にタブが出来てる。Spacesに近い感じなんだろう。ということは同時に何個もプラグラムファイルを開けるんだな。何個か開いてみる。
うん。これは間違いなく使いやすい。お金が取れるレベルだ。
では次にちょとRを走らせてみよう。前回やったt検定と一元配置の分散分析にチャレンジ。
エディタ右上のRun Allをクリック。ちなみにRun Lineは読んで字のごとく一行のみコマンドを実行するみたいだ。
左のコンソールに source('~/) とかなんとか書いてある。
これはエディタの内容を読み込んだという状態のことを指すのだろう。
!!
左下になんかある!!そうかそういうことか、このワークスペースは、コンソールに読み込んでいる内容を分かりやすく表示してくれているんだな!これは便利。
試しにコンソールにコマンドを打ち込んでみる。
おみごと。前と同じデータが出てきました。パチパチ。
このまま保存すれば、次回はこの状態のままワークスペースは復活する。もし最初からしたければ、
WorkSpace →Clear all でOK。
いやあRstudio恐るべし。
多分これでRstudioはほぼ大丈夫かな?
(追加)
ちょっと追加
Rstudio → Preferences → Editing でHighlight selected line
にすれば、エディタの実行中にコマンドにラインがはいるので便利。
Rstudioにチャレンジ
本当は二元配置の分散分析を仕様と思ったのだが、話題のRstudioをインストールしてみる。
ダウンロード先はこちら。
こんな画面があって。
こんな画面があるので、デスクトップの方をダウンロード。
続いてまたしても英語でちょっと緊張するが、リンゴのマークを信じましょう。
さてダウンロードしたファイルをインストールしてみる。アプリのマークはRをちょっと可愛らしくしたような感じ。
このアプリそのものはRに乗っかるような感じでできているらしく、もともとのRは自動的に読み取られるみたいだ。
うん。なんか出てきた。結構直感的なインターフェースだな。。。
でも全部英語だよ。こんちくしょう。
たちまち環境設定をみてみよう。
Rstudio→Preferencesの画像。
まず一行目のDefault CRAN mirrorがわからん。なんなんじゃろこれ?
2行目のInitial working directoryは多分作業ディレクトリの変更。これは前と同じようにデスクトップの中のRフォルダにしてみる。
その下のRestore .RData into workspace at startup は最初からなので、多分設定の保存だろう。
Restore .RData into workspace at startup
は保存の設定。なにも考えずaskのままでいいと思う。
他のとこもいろいろ見てみたが正直よくわからんなあ。とくにAppearance のとこはちんぷんかんぷん。
ただ多分、このRstudioのキモは Pane Layout になるんだろうな。
左上にプログラムソースが開き、その下がコンソール。
右上がワークスペースブラウザ(未だにいまいち意味が分かっていないのだが)でその下にちょっとしたグラフか。
使いこなしたら結構楽しそうだな。2元配置の分散分析はちょっとおやすみしようかな。。。
分散分析(一元配置の分散分析)
t検定について考えていたらまたわからんくなったので、改めてやって見ることにした。
最初の頃の気持ちを思い出して丁寧にやっていく。だって結果がでて喜んでるだけでは結局使いにくいSPSSと同じだもん。ちゃんと勉強しましょう。
まずは、等分散性の検定について検討(F検定と呼ばれるもの)。
t検定とは違うところは、複数あることか。ちょっとおんなじ感じでやってみっと。3種類ある人種でトライ。
むむむエラーだ。なんでだろう。ちょっと本を読んでみよう。
わかった(多分ね)!!
3群以上の時は、bartlettを使うみたい。
bartlett.test(s$weight,s$race)
さあ出てこい!!
いえーーす!!これもp-value = 0.04765なので等分散性が棄却されます。サンプル数が少ないもんね。
ということで、等分散を規定しない分散分析。
ひつこいけどこれがデフォルトなんだよね。oneway.test
っとこれをみると、 p-value =0.3214 なので体重に人種の影響はないことがわかった。
一応、等分散を規定した上での分散分析も練習のためにしてみる。
t検定の時と同じでvar.equal=TRUEを付ける。
うん。p-value = 0.138で結果はかわらない。でも思ったより数字に変化があるんだな。
ところで、Rで分散分析には他にもいろんな種類があるみたいだ。本で読んだ限りでは、
aov関数(summaryも追加して結構一般的に使える、2元配置もできる)
anova関数(結構高度らしい)
anovakun関数(ツイッターで教えてもらったが、まだちょっと僕には早そうだ)
ここらへんを一応やってみよう。
ちなみに今気づいたのだが、summaryという関数はなんかざっくり見やすくしてくれるコマンドみたい。
試しにちょっとsをぶち込んでみる。
ほほう。なんかいい感じの表ができてる。たぶん、customとInheは順序尺度であることを一度どこかで定義付けせんとあかんみたいやな(なんで大阪弁だよ)。これはまた今後にしよっと。
ではまず、aovから。比較のためoneway.testの等分散とそうじゃないやつを上に並べてみた。
!! あれ?aovはデフォルトが等分散を規定しているのか??なぞだなあ。
ちなみにanovaだとこうなる。
こっちもそうだ。僕の中の認識では、デフォルトが等分散を規定していなくて、等分散よりも統計的なハードルが高いので気にしなくても大丈夫という感じだったんだけどちょっと違うのかな。。。
これは調べても見つからない。誰かに聞くべきか。ということで悩んでいたらツイッター上でmentionが。そもそもanovaは等分散を想定しているものだから、等分散以外はやっちゃいけないとのこと。
そういう場合は、oneway.testでやるのが普通らしい。
でもだったら2元配置の分散分析をするときはどうなんだろう?twoway.testみたいなのがあるのかな?
ということで次は二元配置の分散分析にチャレンジ。そして、anovakunもやってみよっと。
ところで、分散分析ではTukeyの下位検定が出てくるものが多い。
Rではこうなる。
TukeyHSD(aov(s$weight~s$race))
ok!だいぶいい感じですね。
t検定(追加)
ちょっといまいちわかってないのでもう一度最初からやってみる。
まずは、等分散性の検定について検討(F検定と呼ばれるもの)。
僕が習った方法としては、t検定では(分散分析でも)まず実際の分析にかける前に、このF検定を行って調べたい両者が同じ分散を持っているか、否かを判断する必要があるという。
もちろん、Rにもその関数はあった。
var.test というものだ。
今回のデータでは、体重のばらつきが、男性でも女性でも一緒なのか?という意味になる。バラつきが一緒な場合と、ばらつきが違う場合では検定の方法が違いますよということらしい。
(これは青木先生のページを見ると、必ずしもやらなくても最初から等分散を規定しない方法でやればいいとのことだが、難しいことはよくわからないので一応原則通りやってみる)
早速やってみよう。
ふむ。なんか出てきた。だいぶ分かってきた感じもするなあ。
これの見方は、えっとp-value = 0.03822 だから。。。
これは当分散性が棄却されたということに違いない(間違っていたら誰か教えてくれ)。
ということで、この場合には体重のばらつきは男性と女性で同じではないので、そのための分析をしなさいね。ということになるのだ。
Rではデフォルトでウェルチなので(等分散を規定しない)
t.test(s$weight~s$sex) となりました。
これは、 p-value = 0.001493 なので有意。男女間で体重には有意な隔たりがあるということだな。
※こういったデータの場合は普通は当分散になるはずだけど(実際に僕の少ない経験ではここが棄却されることはほとんどない。もし、棄却されたらなんか間違ってるかと思って見直す感じ)たぶん、この練習データはあまりにも人数が少ないので棄却されたんだろうと思う。
ということで、もし等分散性が棄却されなかったらどうするか?
その場合には、var.equal=TRUE を追加すればいい。
確かにあんまり数字としては変わらないね。。。
状況に応じて使い分けるという感じかな。。
だれかわかり安く教えてくれる人がいればお願いします。
χ二乗検定
練習用のデータでできそうな分析としてはχ二乗があった。
本当は残差分析という奴もあるらしいがまあ練習なのでちょっとほっとこう。
χ二乗検定は独立性の検定。
カテゴリカルデータ同士になんらかの関係があるかどうかを検定するものなので、例えば無作為に100人の外人さんを抽出したときに、人種と性別の間に一定の特徴があるかどうかみたいな検定を行うものだ。
よくある分析としては、エクセルなどの表を作成したそれぞれのセルがお互いに関係しているかどうかを検定するという考え方。
ここでいうと、ちょっと分かりにくいが性別によって人種に一定の傾向があるかどうかの検定ということになる。
まずは、Rで表を作成する。
これは読んで地のごとしtable というコマンドを使うみたい。
いつものように、カテゴリカルデータの定義づけも含めてコマンドを入力。
s<- read.csv("yome.csv",header=T,sep=',')
s$sex<-factor(s$sex,levels=0:1,labels=c("male","female")) s$race<-factor(s$race,levels=0:2,labels=c("white","black",'yellow'))
- table(s$sex,s$race)
これでどうだ??
イエス!!次にこのテーブルをデータフレームに設定して(ここれはvと名づけてみた)、chisq.testを使う。
なんかできたぽいが、、、よくわからんメッセージ。
警告メッセージ:
In chisq.test(v) : カイ自乗近似は不正確かもしれません
グーグル先生!!
http://www.aichi-gakuin.ac.jp/~chino/psycstat/chapter7/sec7.html
どうやらtable の中の数が少なすぎると計算そのものはしてくれるけど、出てきた数字には信頼性がないという事みたい。
ふむふむそういう場合にはどうしたらいいのかしら??
どうやらこういう場合にはフィッシャーの正確検定というのをやるらしいね。これはオッズ比というヤツともカラムみたいだけど、今んとこは無視!!
フィッシャーの正確検定をやってみる。
関数はfisher.test
できた。今日は調子がよいらしい。
ここの結果としては、人種と性別は独立しているということ。
なんとなく、データに偏りがないという認識でもいいのかな。
実際に使うときにまた考えてみることにしよっと。
t検定と分散分析
今日は分散分析を行ってみようと思ったのだ。
僕がいつも分散分析はWeb Anova(http://www.hju.ac.jp/~kiriki/anova4/)を利用しているが、もちろんRでも出来るだろう。
改めて分散分析について考えてみると、自分がよくわかってなかったことに気づく。 っということでメモ。
今回の練習用データで考えてみると、荒っぽく考えてみと分散分析は、要因の多いt検定。
男女によって体重の平均値を比べるときの検定はt検定を行うことができる。2つの平均値を比べるのでこれでよい。
ただ、黒人と白人と黄色人種によって体重が異なるかどうかを検定するためには、分散分析を使う。
えっ??だったらt検定を2回すればいいんじゃないの?ということになるのだが、どうやらダメらしい(第二種の過誤というのが起きるらしい)。
ということで、今回のデータで分散分析を行ってみる。
こんな感じ。関数は一元配置はoneway.test
ほほう。 anovaで見るような表ができた。
この結果だと、p-value を見るとどうやら人種と体重の相関はないみたいだ。
これは一元配置の分散分析。水準数は白、黒、黄色の3水準であるといえる。
余談だがもし、2水準で分散分析を行った場合、t検定と同じ結果になるらしい。ちょっとやってみよう。
まずは、t検定。男女によって体重に差があるのか?
続いて、一元配置の分散分析を2水準で。
OK!!なんか勉強になるなあ。改めて基礎から勉強している感じ。
あれ??そういえば、下位検定はどうやって出すんだろう?
まあ、とりあえずおいておいてここまでは一元配置の分散分析。
分散分析は一元配置ではなくこの配置の数を増やしていって交互作用ということも考えることができるらしい。
ここの例で言うと、
人種ごとに体重に差があるか?(人種の主効果)
性別ごとに体重に差があるか?(体重の主効果)
人種×性別ごとに体重に差があるか?(交互作用)
ということらしい。理論的にはいくらでも増やせるみたいなんだけど、解釈が難しくなるので2元配置くらいまでが普通ということ。
ではこの2元配置の分散分析をしてみる。関数はaov
なんのことやらよーわからんので、もうちょっと勉強してみよう。summary()を追加してみる。
コマンドは、summary(aov(s$weight~s$race+s$sex))
おお!なんかそれっぽいのが出てきたぞ!!
これあってんのかな???
性別の主効果は有意、人種の主効果はなし。
交互作用は何処?
試しにWeb Anovaで計算してみると数字がちょっと違う。。。改めてやってみると入力が結構大変だったなあ。
そうか、当分散の検定か。Rはウェルチがデフォルトなんだ。
ううーーん。酔っ払ったので今日はここまで。
というか本を忘れたので、ちょっと尻切れトンボですな。
今日の課題(というか本を見つけて追記すること)
1) tukeyの下位検定について
2) 交互作用はどうやって出力する?
3) 当分散を仮定しない分散分析を行ってその結果とWeb anovaの結果を照会する。
4) 当分散性の検定ってどうやるんだっけ?
ちょっとしたメモ。
1) Fix関数を使用したデータの変更と書き出し。
2) aggregateを使って一気に記述統計をまとめる(新しい練習用シートで)
3) χ二乗検定
カテゴリカルデータの定義付け2 とヒストグラム
前回、性別と人種という二つのカテゴリカルデータを定義づけたので、ちょっともう一度図にしてみる。
s<- read.csv("yome.csv",header=T,sep=',')
s$sex<-factor(s$sex,levels=0:1,labels=c("male","female"))
s$race<-factor(s$race,levels=0:2,labels=c("white","black","yellow"))
plot(s$race,s$weight)
こんな感じで散布図にしてみた。
あらかじめ、性別は、数字ではなくカテゴリカルデータとして扱っているのでplotを使ってもいい感じにしてくれるはず。
おう!なんかいい感じの図が出来てきた。
この図の形成はこれから考えるとしてと。
どうやって保存するんだろうといろいろいじってみると、
R→ファイル→別名で保存。でできるみたい。
でも。。。
サイズとかいろいろできるみたいだけどまあ今のところはいっか。
そういえば、度数分布表を作っていなかった。
練習用データの中のcutom(習慣)とInhe(遺伝)は5件法のデータなので、ヒストグラムを作る。
これは結構簡単だった。
hist(s$custom,right=FALSE)
これでよし。
こういうのをひっくるめてfurequency 関数というヤツもあるみたいなのだが、もっと根本的なことが分かってからにしよっと。
たちまち今までの復習。
Rエディタにまとめておいとく。#を使ってメモ。
とりあえず少しずつだな。
次は、分散分析にチャレンジ!!