Rで潜在クラス回帰分析

2023年5月25日

はじめに

Kです。
今回は、Rを使って潜在クラス回帰分析(Latent Class Regression)を試していきます。
潜在クラス回帰の説明の前に、まずは簡単に潜在クラス分析のおさらいから。

潜在クラス分析(Latent Class Model)とは

潜在クラス分析は、クラスタリング手法の1つです。

クラスタリング手法には、
ハードクラスタリングといって、各サンプルが必ずどこか1つのクラスタに所属する分析手法と、
ソフトクラスタリングといって、各サンプルのクラスタごとの所属確率が求まり、所属するクラスタを1つに確定させない分析手法があります。
ソフトクラスタリングは、サンプルごとに所属確率が最も高いサンプルに所属すると考える事で、ハードクラスタリング的な解釈も可能です。
潜在クラス分析は、ソフトクラスタリングに分類される手法になります。

潜在クラス分析のメリットとしては、
・サンプルごとに、各クラスタの所属を確率的に表現可能
・クラスタ数をBICを基準に決めるので、定量的に決定可能
・他のモデルと組み合わせたモデル拡張が可能
という点があります。(加藤ら 2015)

デメリットはあまり思いつかないのですが、
・階層クラスタリングと比較すると計算量が多い。
・k-meansなどと比較すると、数学的な理解が難しい。
といった所でしょうか。

Rを使った潜在クラス分析では、poLCA, flexmixといったパッケージが有名であり、
今回もこの2つを使って説明していきます。

潜在クラス回帰(Latent Class Regression)とは

私も知らなかったのですが、poLCAのパッケージ説明によると、
「潜在クラス回帰分析」は、2つの意味で用いられる事があるそうです。
①潜在クラスモデルの所属確率が、共変量によって説明されるモデル
と、
②回帰を推定する一部として、目的変数が複数のクラスタに別れるモデル
です。
①はpoLCAで実装されているもので、②はflexmixで実装されているものらしいです。
それでは、順に見ていきましょう。

①潜在クラスモデルの所属確率が、共変量によって説明されるモデル

私はこちらの分析のみを、「潜在クラス回帰分析」として認識していました。
「潜在クラスロジットモデル」などとも呼ばれる事があるモデルです。

こちらは、クラスタリングを行った時に、セグメントの所属確率を共変量で表現するモデルです。poLCAの説明内では、"latent class models with covariates" (共変量を用いたクラスタリング)と表現されています。


例えばマーケティング分野では、購買データを使ってクラスタリングを行い、共変量として性年代などのデモグラ属性を使って分析を行う事があります。
これによって、購買の特徴を元にクラスタリングを行うと同時に、各クラスタにどのようなデモグラ属性が存在するかも把握する事ができます。回帰によってクラスタの傾向を見るため、p値から有意性を判断する事も可能です。


潜在クラスでクラスタリングを行った後に多項ロジットを用いた回帰を行う手法と比較すると、
潜在クラス回帰では、尤度関数が共変量で条件付けられた確率の積で表される事によって共変量の影響を調整しているので、クラスタの別れ方が変わってきます。
この部分は、後の分析でも見てみましょう。


数式は他でも挙げられているのでここでは割愛しますが、
例えば、Konus(2008)などを見てもらうとわかりやすいです。


ちなみに共変量は「共に変える」と書きますが、ここでは「クラスタへの所属確率」と「クラスタリングに使った変数」の両方に影響を与えるという意味で使われています。

②回帰を推定する一部として、目的変数が複数のクラスタに別れるモデル

こちらは、潜在的にグループが別れている場合(グループが別れているが、別れ方のデータは見えない場合)に、グループ差を考慮した混合効果モデルや階層ベイズモデルをやる事と同じイメージです。
目的は回帰分析であり、グループの特性(異質性)を考慮したモデリングを行いたいという際に使われます。
先ほどのpoLCAに対して、"Regression models with latent class" とでも言えるでしょうか。

こちらは数式表現が分かっておらず、どなたかご存じの方がいれば教えて頂けると嬉しいです。

分析例

本記事では、①の例で記載した、poLCAで実装されている潜在クラス回帰分析(latent class models with covariates)の分析例を見ていきます。

poLCAパッケージ内に含まれている、cheatingというデータを利用します。
まずは、データを確認してみましょう。

library(poLCA)
data(cheating)
dim(cheating); head(cheating)
# 実行結果
[1] 319   5
  LIEEXAM LIEPAPER FRAUD COPYEXAM GPA
1       1        1     1        1  NA
2       1        1     1        1  NA
3       1        1     1        1  NA
4       1        1     1        1  NA
5       1        1     1        1   1
6       1        1     1        1   1

319サンプルに対して、5つの項目のデータとなっています。
GPA以外の変数は、1(no) or 2(yes) の2値の変数で、
GPAは1~5で、高いほど成績が良い変数となっており、最初の4名だけ欠損値になっています。
後にクラスタの別れ方を2パターンで比較するため、欠損値を削除しておきます。

data <- subset(cheating, !(is.na(cheating$GPA)))

各変数の説明は以下です。
・LIEEXAM:過去に、テストを受けないために嘘をついた事がある
・LIEPAPER:レポートを時間通りに提出できず、嘘をついた事がある
・FRAUD:テスト前にコピーを入手した事がある
・COPYEXAM:カンニングした事がある
・GPA:成績

まずは共変量を設定せず、LIFEXAM~COPYEXAMまでの4変数を使って、
クラスタリングとしての潜在クラス分析を試してみます。

コードは非常に簡単で、以下の2行で完了です。

f <- cbind(LIEEXAM,LIEPAPER,FRAUD,COPYEXAM)~1      # 式を定義. "~1" の部分に共変量を設定すると、潜在クラス回帰分析となる.
ch2 <- poLCA(f,data,nclass=2) # nでクラスタ数を指定
# クラスタの別れ方を確認
table(ch2$predclass)
# 実行結果
  1   2 
261  54 

クラスタ1が261サンプル、2が54サンプルという別れ方になっています。

共変量を含めたクラスタリングの前に、poLCAでよく使う機能を見ていきましょう。
ch2にクラスタリング結果が格納されており、以下のコードで各数値が確認できます。

ch2$probs       # クラスタを付与した時の、クラスタリングに使った各変数の値の条件付き確率
ch2$posterior   # 各サンプルのクラスタごとの所属確率
ch2$predclass   # 各サンプルの所属クラスタ(ハードクラスタリング的な解釈)

次に、潜在クラス回帰分析を行ってみましょう。
式を定義する部分で、共変量としてGPAを設定しています。

f2 <- cbind(LIEEXAM,LIEPAPER,FRAUD,COPYEXAM)~GPA    # 式を定義
ch2c <- poLCA(f2,data,nclass=2) 

4つの変数でクラスタリングを実行すると同時に、共変量でクラスタの所属確率を予測するモデルになっています。

# クラスタの別れ方を確認
table(ch2$predclass)
  1   2 
268  47 

共変量なしの潜在クラス分析の結果の別れ方は、
クラスタ1:261サンプル、クラスタ2:54サンプル
だったので、共変量での調整によって、クラスタの別れ方も変わっている事が分かります。

最後に、共変量がクラスタの別れ方に及ぼす影響を見てみましょう。

ch2c
# 実行結果の後半行から抜粋

Fit for 2 latent classes: 
========================================================= 
2 / 1 
            Coefficient  Std. error  t value  Pr(>|t|)
(Intercept)     0.11342     0.50992    0.222     0.833
GPA            -0.84249     0.28132   -2.995     0.030
========================================================= 

LIEEXAM, LIEPAPER, FRAUD, COPYEXAM の4変数によって実行したクラスタリングの結果は、GPAによって説明できている事が分かります。

おわりに

今回は、潜在クラス回帰分析について説明しました。
数式は省略してしまいましたが、イメージは掴んでいただけたのではないかと思います。

また、②の潜在クラス回帰分析は、数式の説明も見つけられていませんし、flexmixをつかった分析例も作成できていないので、時間がある時にやってみたいと思います。

参考文献

M-plusとRによる構造方程式モデリング入門

poLCA

flexmix

・加藤諒, 星野崇宏, & 堀江尚之. (2015). 反復横断データから消費者セグメントの構成比の変化・生成・消滅を理解するための潜在クラスモデルと段階推定法. マーケティング・サイエンス23(1), 35-59.

・Konuş, U., Verhoef, P. C., & Neslin, S. A. (2008). Multichannel shopper segments and their covariates. Journal of retailing84(4), 398-413.

RR,統計

Posted by K