このサイトについて

本サイトでは,日本心理学会第83回大会[TWS-004] チュートリアル・ワークショップ004 機械学習と心理学の接点 (片平担当分)で紹介した方法をRで実行するための情報を掲載しています。

更新履歴


内容

本チュートリアルでは,大規模なパーソナリティの尺度データから4つのタイプ (類型)を見出した Gerlach et al. (2018) の方法を中心に解説します。

この論文では“state-of-the-art”なクラスタリング手法を使ったと書かれていますが,その分析法の要素技術はどれも古典的・標準的な機械学習・統計分析の手法です。


要素技術編

その要素技術である以下の3つをRのパッケージを使って実現する方法を紹介します。

Gerlachの分析は,上記の手法を組み合わせ,以下のような流れで行われます。

  1. パーソナリティに関する質問項目への回答データから (探索的) 因子分析を行い,因子負荷を推定する。それによりBig fiveモデルに対応する5つの因子スコアを回答者ごとに推定する。
  2. 全回答者の因子スコアのデータに混合正規分布モデルをフィットする。  コンポーネント数 (クラスター数) はBICなどで選択する。
  3. 因子スコアのデータに対しカーネル密度推定を適用し,混合正規分布の各コンポーネントの中心の座標の密度を計算する。その密度が因子間の依存関係を崩したシャッフルデータ の密度 (ヌルモデル)より有意に高い場合にそのコンポーネントを’meaningful cluster’と判定する。meaningful clusterがパーソナリティの「類型」に対応づけられる。

実践編

  • Gerlachらの分析法 上記の要素技術を組み合わせてGerlachらの一連の分析を行います。
  • Gerlachらの分析法(ミニマム版)
    上のGerlachらの分析法で作ったデータや関数などを使って,Gerlachらの分析を行うミニマムなコードを例示します。 とりあえず手持ちのデータで試してみたい,という方はここだけ試していただいてもよいかと思います (ただし結果の妥当性は保証できませんので,ご自身の責任でお願いします)。

  • 実データ (Johnson-300) の解析1
    Gerlachらが解析したJohnson-300データを読み込み,因子スコアを推定します。
  • 実データ (Johnson-300) の解析2
    上で推定した因子スコアに対し,GMMのフィッティングを行い,meaningful clusterを抽出します。
  • 実データ (Johnson-300) の解析3
    GMMのために使っていたパッケージMClustの代わりに,Pythonの機械学習ライブラリscikit-learnのGMM関数を用います。 少なくともこのデータに関しては,scikit-learnの方が良い結果が得られるようです。

※実データ (Johnson-300) の解析2,3の計算はGerlachと同じようにやろうとすると かなり時間がかかります (ノートPCでは一晩では終わらないくらい)。 そのため,ここでは繰り返し回数などかなり抑えています。

発展編


本サイトの方針

まずは自分で作ったデータを使う

本チュートリアルに限らず,私は新しいモデルやデータ分析手法を用いるときは, 既存のサンプルデータを使うのではなく, まずはモデルで仮定されているデータ生成過程に基づいて人工的なデータを生成してみて,そのデータを分析してみる,という方法をとっています。

その方が,正解が分かっている分,推定結果の評価もしやすいですし, モデルの仮定と真のデータ生成過程にミスマッチがあるときに何が起きるか, どのくらいのサンプル数があれば安定した結果が得られるか,などの 検討もできてよいと考えています (例えば Katahira (2016), Katahira (2018), Toyama et al. (2019))など)。

Rスクリプトの書き方

Rのコードは,極力簡潔に,しかし多少冗長でも,他の言語を使用していてRにはあまり慣れていない方にも処理の流れが追いやすいように書きたいと思います。 例えば,apply系の関数を使うとfor文を使わず簡潔に書けることが多いのですが, Rに慣れていない人 (私自身そうですが…) にとっては流れがつかみにくくなると思います。そのため,特に基礎的なところではapply系の関数の使用は極力抑えるようにしています。

その他

このサイトの作成に用いたR Markdownファイルの一部はこちらからダウンロード可能です。