草薙の研究ログ

英語の先生をやってます。

直交表実験計画→ロジスティック回帰

はじめに

直交表実験計画→ロジスティック回帰の流れは経済学というかマーケティングとかで,コンジョイント分析っていうので使うのよね。

自分の研究でもこれをやる機会が来た。

文法性判断課題(GJT)の分析で,もう古典的テスト理論ではなくて,つまり被験者正答率,項目困難度,項目弁別力とかの平均差を検討するのじゃなくて,もう1施行1施行を従属変数として見て回帰分析しちゃおうっていうアイデアはよく聞く。確かに被験者ひとりひとりについてまとめる意味がない研究テーマも多い(被験者内要因の影響を見たいのに人のスコアを比べている)。

 

Rで直交表のデザインメモ:DoE.base

GJTの成績(従属変数)は0/1なので,ロジスティック回帰分析になる。たとえば,ある研究テーマにおいて,刺激文の条件(被験者内)が4条件で3水準ずつあるとする。ここで4条件間の交互作用は見ないこととする。3×3×3×3の実験がfull factorial(完全実施)だと3^4で81。こりゃ無理なので,一部実施方法,直交表を使った実験計画を組みたい。3水準系4列9行の直交表(L9-3-4)が最適そうだ。この二つの手法の親和性はすごく高そう。

 

で,直交表は組み方がめんどいので,Rでやっちゃう。DoE.baseというパッケージがある。

install.packages("DoE.base")

library(DoE.base)

一番簡便な感じだと,こんな風に指定してやると返してくれる。

oa.design(nlevels=c(3,3,3,3))

ここでは水準をベクトルで指定している。3-3-3-3なので4要因全部3水準。

どん。L9-3-4の直交表だ。

A B C D
1 3 2 1 3
2 2 1 3 3
3 3 3 3 1
4 1 3 2 3
5 1 1 1 1
6 2 3 1 2
7 3 1 2 2
8 1 2 3 2
9 2 2 2 1

なんかでたー。

 

あと,よく使うハンディーなL8-2-7は,

例えば,

oa.design(nlevels=c(2,2,2,2))

なんかでたー。

A B C D
1 1 1 1 1
2 1 2 1 2
3 2 1 2 1
4 1 2 2 1
5 2 2 2 2
6 2 1 1 2
7 2 2 1 1
8 1 1 2 2

 こんな感じ。

反復するときは,

replication=2

みたいに。

デザインを入力するときも,

ID =

nfactors=

とかでも入れれる。

factor.namesも指定できる。

どんなデザインがあるかは,

show.oas(show=1830)

みたいに。これで全部見れる。1830個もあるらしい。

条件に合うのを探すのは,

show.oas(nruns=9, nlevels=c(2,2,2,2))

みたいに指定もできる。

これで組めるね。

 

ロジスティック回帰分析メモ

ロジスティック回帰分析は一般化線形モデルのひとつなので,glm関数を使う。

ロジスティック回帰の基本は,

model<-glm(a~b, data=dat, family=binomial)

これ,familyでbinomialを指定してやること。lm関数と他はいっしょぽい感じ。

モデルの書き方は,例えば要因がA, B, C, Dというようになっているなら,

全投入ならE~A+B+C+Dみたいに。

交互作用も入れるなら,E~A+B+A*Bというように。

 

多重共線性の評価は,

DAAGパッケージのvif関数にmodelを入れる。

install.packages("DAAG")

library(DAAG)

vif(model)

 オッズ比を出すときは,

exp(model$coefficients)

切片だったら,

exp(model$coeffieints[1])

みたいに。

出力の構造をちゃんとみようね。新しい関数覚えるときはこれ大事。

names(model)

みたいにして。

予測値はこれで出せる。

fitted(model)

擬似決定係数はrmsパッケージを使うと出してくれるらしい。

install.packages("rms")

library(rms)

lrm(a~b, data=dat)

 モデルで得られた式をあらわす線は,

linesなどで,yの方を,

1/(1+exp(-(切片+傾きx)))

みたいに書いていれればよい。

 

他にもいろいろあるけど,まあいいや。

報告などはこれが参考になる。

ロジスティック回帰分析の書き方 - SSSSLIDE

 

あとは交差妥当化(cross validation)だな。

半分モデル構築用にして,もう半分でテスト。