井出草平の研究ノート

repolrパッケージで順序ロジスティック回帰[R]

Agrestiの本で示されている例を実行してみたい。

コード集のみ、サプリメントとしてネット公開されている。
http://users.stat.ufl.edu/~aa/ordinal/R_examples.pdf

サンプルデータはこちらから作成できる。
http://users.stat.ufl.edu/~aa/cda/data.html

この中の、23. Insomnia data set of Table 12.3を利用する。なお、コードの一部を書き換えている。

insomnia<-read.csv("insomnia.csv", header=TRUE)
insomnia<-as.data.frame(insomnia)
head(insomnia)

データは以下のようなもの。

  case treat occasion outcome count
1    1     1        0       1     7
2    1     1        1       1     7
3    2     1        0       1     7
4    2     1        1       1     7
5    3     1        0       1     7
6    3     1        1       1     7

repolrパッケージの説明はこちら

www.rdocumentation.org

library(repolr)
model <- outcome ~ treat + occasion + treat * occasion
fit <- repolr(model, subjects="case", data=insomnia, times=c(1,2),
              categories=4)
summary(fit)

結果。

repolr: 2016-02-26 version 3.4 

Call:
repolr(formula = model, subjects = "case", data = insomnia, 
           times = c(1, 2), categories = 4)

Coefficients: 
                coeff     se.robust  z.robust  p.value 
cuts1|2          -2.2671    0.2091   -10.8422    0.0000
cuts2|3          -0.9515    0.1769    -5.3787    0.0000
cuts3|4           0.3517    0.1751     2.0086    0.0446
treat             0.0336    0.2369     0.1418    0.8872
occasion          1.0381    0.1564     6.6375    0.0000
treat:occasion    0.7077    0.2458     2.8792    0.0040

Correlation Structure:  independence 
Fixed Correlation:  0 

Rで順序ロジスティック回帰を行うのは意外に難しいようだ。パッケージによって計算結果が違うと指摘するペーパーもあるようだ。どう違うかも把握しておかないといけないし、そもそもロバスト推定をしないとbrant検定でなんとも言えない状況に追い込まれることも判った。そちらの話はまた後ほど。そういう形で時代は進んでいるようなので、順序ロジスティック回帰はMASSパッケージで計算ができる、という説明は時代錯誤だそうだ。いろいろやってみたところ、計算に最適なパッケージはRでもStataでもなく、Mplusのようだ。今のところの印象だが。

追記:このパッケージは、推定値の符号が逆になるようだ。原因は不明。オプションも試してみたが、今のところわからない。またR version4系ではフリーズを起こす。2016年からアップデートがされていないこともわかった。推定結果をMplusで検算したエントリを入れている。

ides.hatenablog.com

現在の個人的な見解として、このパッケージは使わない方がよいと思う。