月別アーカイブ: 2012年5月

anobakun使ってみる(被験者間2要因3水準の分散分析)

では、気を取り直して、次回は被験者間、2要因3水準の分散分析にチャレンジしてみます。

まずはデータセットから。前回のデータをちょっとリミックスして、性別(male, female),
職種(Dr, Ns, CP), mscoreの3変数からなるデータセットを作ります。

anova2<-data.frame(anova$sex,anova$job,anova$mscore)

str()で構造を確認。これはデータセットを作った時は必ずやるようにする。
結構いままで単純なミスで苦労してきたので細かいチェックをしておけばあとあと便利なんだよね。

f:id:jigawa91:20120527220758p:image

ここでは性別をfactorにすることを忘れていた。

やれやれ。
anova$sex<-factor(anova$sex,levels=0:1,labels=c(“male”,”female”))
を追加。

さて、いよいよここから2×3の被験者間分散分析をしてみます。
ダミーデータのmscoreを従属変数、性別、職種を独立変数としての分析です。
ちなみに前回のデータだと結果がでなかったので少し数値を変更しています。

view(anova2) でデータセットを確認してみましょう。

f:id:jigawa91:20120527220805p:image

修正の前の画像なのでですが、この場合は従属変数を一番最後にする。そして、性別(要因A)、職種(要因B)を並べておくのがanovakunのポイント。
新しくデータセットを作らないといけないのがRの大変なところ。まあ慣れないと。

要因がAとBだから

anovakun(anova2,”ABs”,2,3)
2と3は水準数だよね。

anovakunのいいところは、多重比較が充実していることです。

主な効果が有意だった場合、デフォルトではShaffer法を使って多重比較をしてくれます。

オプションだと、holm = Tで修正版bonferroniが使えます。

詳細は井関先生のページを見るのが一番ですかね。

また、peta = Tとすることで,分散分析表に偏イータ二乗(partial eta squared)が追加されます。

今回のデータで多重比較は修正bonferrroni法、効果量を算出しようと思ったら、anovakun(anova2,”ABs”,2,3,holm = T,peta = T)
こんな感じのコマンドを書くのです~

f:id:jigawa91:20120527220820p:image

イータのところは長くなってしまって見にくいので注意が必要ですね~

僕は被験者間の調査ばかりなので、使った事はありませんが被験者内の球面性検定のオプションもつけることができます。

きょうはここまで。

いやー統計はほんと難しいぞ。まさしく七転八倒。

anovakunを使ってみる(1元配置の分散分析)

続いてanovakunを実際に使ってみようと思います。

とりあえずは一元配置の分散分析ということで前回の続きデータを使ってみます。

っと思ったら前回のデータは1要因2水準だからt検定とおなじじゃん。。。
だけどまあいっか。。

まずは、井関先生のページに行ってanovakunをゲットする。
http://www11.atpages.jp/~riseki/pukiwikiplus/index.php?ANOVA%B7%AF

ダウンロードしたテキストファイルをRのディレクトリに入れておきます。

こんな感じになっていれば大丈夫。

f:id:jigawa91:20120527175930p:image

続いて、edit→sourceといくとダイアルログが出てくるので、さきほどのテキストファイルを選択します。

すると。。

f:id:jigawa91:20120527175931p:image

??なんじゃそら??
以下にエラー make.names(col.names, unique = TRUE) :
1 は不正なマルチバイト文字です

よく井関先生のページを見てみると、どうやらMacの場合には文字コードを変更しておく必要があるみたい。確かに、Rstudioで開いても明らかに変だもんね。。

f:id:jigawa91:20120527175932p:image

その後もいろいろと四苦八苦したんだけど、RstudioのEdit →source からはなんかうまくできない(たぶんやり方が間違っているだと思うのでだれか知ってたら教えて)。

仕方がないので明示しました。
source(“/Users/☆/Dropbox/R/anovakun_420.txt”)
※ ☆はユーザー名、別に隠さなくてもいいけど。。

f:id:jigawa91:20120527175933p:image

見てみるとWorkspaceのところになんかそれっぽいものが入ってるのが分かります。
イイネ! ここの警告は無視して大丈夫。

ふう。

さていよいよ分散分析を開始。

anovakunの使い方は井関先生のページを見るとほとんどの人は分かるとは思うんですが、僕は結構苦労したのでメモしておきます。

anovakunの使い方は
anovakun(データ, “要因計画の型”, 各要因の水準数,…)
という形です。

僕が苦労したのは要因計画の型という部分。
ページの説明では、
「要因計画「分析したい計画の型を入力します。「A」~「Z」を各要因を表すラベル,「s」を被験者のラベルとします。被験者間要因は「s」の左側,被験者内要因は 「s」の右側に配置します。この表記法にしたがえば,例えば,2要因の被験者間計画は「ABs」,3要因の被験者内計画は「sABC」,2つの被験者間要 因と1つの被験者内要因を持つ混合要因計画は「ABsC」と表せます。なお,要因計画の型は「””」で囲む形で入力する必要があります。

となっています。

ここで書いてあるABsCというのは、A要因、B要因、C要因まで使えてそれぞれ被験者内計画、被験者間計画で使い分けるという意味だそうです。

今までのRの使い方だと、ここのABの部分に自分でつけた変数を入れていたのだけどanovakunの場合はこのまま使います。

今回のケースだと、職種の1要因なのでA、そして被験者間要因なのでsの左側に配置。

anovakun(anova1,”As”,2)

こんな感じです。
僕は最初は、anovakun(anova1,”sexs”みたいな感じで実際の変数名を入れようとしてドツボにはまりました。

ではとりあえず入れてみます。

f:id:jigawa91:20120527175934p:image

こんな感じで結果が算出されました。
赤線の所を見るとa1、a2 と出てきているのが分かります。僕の場合はここのnの数を調べて確認しました。
a1は、Dr、a2は、Nsということです。

ふう今回はnsだったので職種の主効果はなし。

!!
というか、一元配置の分散分析で2水準って普通にt検定じゃん。。。
ダミーデータの作り方がおかしかった。。

せっかくなので、t検定してp値の確認してみました。

t.test(anova1$mscore~anova1$job,var.equal=TRUE)

f:id:jigawa91:20120527175935p:image

うん(たぶん)合ってると思う。基本的にまだ分かってないんだけどt値とF値は違ってもいいだよね。。。このブログを信用してはだめですよ~。

気を取り直して、次回は被験者間、2要因3水準の分散分析にチャレンジしてみます。

anovakun使ってみる(データセット編)

久しぶりの更新。
今日は、anovakunの使い方についてのメモ。いつもの事ながらKosugitti先生に感謝。いろいろと復習しながら七転八倒します。

まずは、File→New→R scriptで新しいコマンドを用意。
今回はsave as anova.Rとしてみました。

f:id:jigawa91:20120525200815p:image

さて復習がてらデータの読み込み。

anova <- read.csv(file.choose(),head=T,sep=”,”,na.strings=”NA”)

今回のデータもブログ用のダミーデータです。
まずは変数と構造の確認
names(anova)
str(anova)
f:id:jigawa91:20120525200816p:image

いい感じです。ちなみにintというのは、数字データということ。
sex, age, job, jobposition, workinghourは個人属性で残りのM1~M6はちょっとした質問紙の質問項目のデータです。

さて、復習がてら個人属性の変数を加工します。
anova$sex<-factor(anova$sex,levels=0:1,labels=c(“male”,”female”))
#性別をカテゴリカルデータとして定義。maleとfemale

anova$job<-factor(anova$job,levels=0:2、labels=c(“Dr”,”Ns”,”CP”))
#職種を定義付け。今回は医師と看護師と心理士という名前にしてみました。

本当は他のvariablesも定義付けする必要があるけど、今日使うのこれだけなので置いておきます。

出来たかどうか確認。できてるみたいです。

f:id:jigawa91:20120525200818p:image

定義付けしたsexとjobに注目すると、int形式ではなく、Factorになっています。
w/ の後は水準数ですね。

とりあえず、質問紙の得点を従属変数、job(あえてDrとNsだけを使ってみる)を独立変数とした一元配置の分散分析を行おうと思うのでまずは質問紙の得点を算出(今回は適当に合算してます)

anova$mscore<-anova$M1+anova$M2+anova$M3+anova$M4+anova$M5+anova$M6)

続いてこれだけからなるデータセットを作成。
anova1<-subset(anova,job==”Ns”|job==”Dr”,select=c(job,mscore))

subset 関数を使えば使いたい水準を減らしたり、variablesを限定したデータセットを作るのも簡単簡単です。
ちなみに「|」はandというような意味でとらえればいいと思います。
もしたくさん水準があって1つの水準だけ減らしたい時は、「!=」とすれば~以外というような使い方もできるそうです。

ただ、subsetを使って水準数を減らした時には注意が必要です。
ためしにちょっとstr()を使って構造を確認。view()でデータを右上に表示しています。

f:id:jigawa91:20120525200819p:image

なんとsubsetを使って水準を減らした場合には、実際にはデータはないのに構造上は水準が減りません。このままだとanovakunではエラーが出てしまいます。

だからもう一度factor型にチェンジ。

anova1$job<-factor(anova1$job)
これでもう一度構造を確認。
str(anova1)

f:id:jigawa91:20120525200820p:image

はい、さっきは3水準のままだったのが2水準になりました。これは結構注意がいりそうですね。

これでデータセットは完了です。

今回七転八倒して分かったことは、なにか困った時にはstr()を使って構造を確認すること。エラーが出る時はこの型がうまくいっていないことが多いということですかね。。

とりあえず今回はここまで。
次回は、実際にanovakunを使ってみようと思います。