井出草平の研究ノート

RからMplusを使う ファイル変換編

RからMplusが使えるようになるMplusAutomationパッケージというものがある。

cran.r-project.org

有用な関数が複数含まれているので使い方がいくつかあるが、今回はRを使ってMplusのデータとコードの一部を作る方法を紹介しよう。

RStudioを利用する

RとMplusのユーザーであれば、RStudioを使っていると思うので、RStudioが導入されている前提で話を進める。

RStudioの使い方はこちらを参照のこと。

www.idesohei.net

Mplusの分析ファイルはどこに置けばいいの?

日本語で得られる情報では、Mplusの作業ディレクトリは絶対パスで設定しているものばかりだがRStudioと同じく、パスの指定は不要である。 ただ、2バイト文字をパスに含めないという違いがあるだけである。 詳しくはリンク先のMplusの作業ディレクトリ解説を参照のこと。

ides.hatenablog.com

Mplusの形式でのデータ書き出し

psychパッケージにあるbfiというデータをMplus形式で書きだす。

library(MplusAutomation)
library(psych)
data(bfi)

bfiはこのブログではよく使っている5因子パーソナリティのデータIPIP-NEOである。 データの詳細はこちらを参照のこと。 http://ides.hatenablog.com/entry/2019/03/19/093726

変数名を抽出する

変数すべてを書き出すことはおそらく稀で、分析に必要なデータだけを書き出すことが多い。 そこで、書き出す変数の指定をするために変数名を抽出しておいた方が便利だ。

variable.names(bfi)

以下のように出力される。

 [1] "A1"        "A2"        "A3"        "A4"        "A5"        "C1"        "C2"        "C3"        "C4"        "C5"       
[11] "E1"        "E2"        "E3"        "E4"        "E5"        "N1"        "N2"        "N3"        "N4"        "N5"       
[21] "O1"        "O2"        "O3"        "O4"        "O5"        "gender"    "education" "age"     

Mplusデータ形式として出力

因子分析だけする場合には、"gender","education","age"の変数は使わないのでオミット(ドロップ)させる。保持する変数をしている場合はkeepColsと書く。

prepareMplusData(bfi, filename="bfi.dat", 
                dropCols=c("gender","education", "age"),
                overwrite=T)
  • bfi...出力するデータ
  • filename...出力するデータ名
  • keepCols...保持する変数
  • dropCols...保持しない変数...keepとdropはどちらかのみ指定

Mplusで使用するdatが同じディレクトリ(フォルダ)上に出力される。 Rの出力は下記のように出る。

DATA: FILE = "bfi.dat";
VARIABLE: 
NAMES = A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4 O5; 
MISSING=.;

これは、Mplusの分析コードであり、inp形式データの前半部分である。
つまり、 Mplusのコードの前半部分が自動生成されるのだ。

意外にMplusのコードでミスが出やすいのがこの箇所である。ANALYSISやMODELの部分はしっかり考えて書くので、割と間違えない。

データ出力だけ使用する場合には、inpファイルは通常の方法で作成する。

ちなみに、Mplusで因子分析をするには以下のような分析コードになる。

TITLE:""
DATA: FILE = "bfi.dat";
VARIABLE: 
    NAMES = A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4 O5; 
    MISSING=.;
ANALYSIS:
    TYPE = EFA 3 6;
    ESTIMATOR = ML;
    ROTATION = oblimin;
    PARALLEL = 50;
PLOT: TYPE = plot2;
OUTPUT: residual;

MplusAutomationの使い方としてはいくつかあるが、現実的にはここまでをRで行うのがいいのではないかと思う。
僕は今までExcelでMplus用のデータを作成していた。手間がかかるし、手間がかかればミスも出る可能性がある。なによりも、何をどのように処理したか、記録が取れないのが最も問題だった。個人的にはかなりの福音である。