自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

StepMixを使って潜在クラス分析をPythonでやってみた。

Python
PythonData Analytics

PCA、クラスタリングとやってきて、とうとう潜在クラス分析(Latent Class Analysis、LCA)の順番がやってきました。

私は機械学習やディープラーニングのモデルを作成してシステムやサイトに組み込む業務が多かったので、実業務では試したことがなかったのですが、マーケティング会社さんとかだと使う機会がありそうでしょうか。もっと基礎分析のフェーズなどで試しておけば良かったかも知れません。

潜在クラス分析については私が説明するより、「潜在クラス分析とは」で概要をまとめってくださっているのでそちらを参考にした方が分かりやすいです 笑

潜在クラス分析について引用すると下記になります。引用元では量的データも質的データも使えますよと書いてありますが、色々調べてみると「ユーザー属性情報」や「アンケートの5段階評価の結果」など、質的/カテゴリカルデータへの適用が向いているという情報が多かったように思えます。

潜在クラス分析は、数値データ(量的データ)や数値でないデータ(質的データ)を含む様々な種類が混在するデータを統計的にグループ(クラス)分けをしてくれる手法で、属する一つのグループを決めるのではなく、複数のグループに属するあいまいさを認めている手法です。... 観測された事象の分類(クラス分け)を行うクラスター分析的な側面を持ちます。グループ(クラス)への所属を確率的に分類することができます。統計情報に基づく基準でクラス分けを行うことができます。質的データ(※3)・量的データ(※4)の両方を取り扱うことができ、分析に使える変数の自由度が高い手法と言えます。
引用: https://its.tos.co.jp/products/latentgold/about-latentclass

他にも潜在クラス分析についての文献として分かりやすかったのは、計量社会学の講座として寄稿されている「潜在クラスモデル入門」というジャーナルです。

より詳しく専門的な内容ですが、分析例も載っているので分かりやすかったです。

Pythonで実施する方法があまり載っていなかったのですが、調べてみると「StepMix」というライブラリやgithubで公開している「latent-class-analysis」があるようです。

今回はStepMixを使ってみたいと思います。

スポンサーリンク

StepMixで潜在クラス分析を試してみる

本当はカテゴリカルデータが良いかと思いますが、とりあえず数値データしかないAwA2のデータセットで試してみます。

StepMixがサンプルコードをたくさん用意してくれているので、参考にしようと思います。(ほぼ同じことを実行するだけかも知れませんが 笑)

LCA用のデータセットの作成

データセットの作成
# 描画用の設定
import seaborn as sns
from matplotlib import rcParams
rcParams['font.family'] = 'Hiragino Sans' # Macの場合
#rcParams['font.family'] = 'Meiryo' # Windowsの場合
#rcParams['font.family'] = 'VL PGothic' # Linuxの場合
rcParams['xtick.labelsize'] = 12       # x軸のラベルのフォントサイズ
rcParams['ytick.labelsize'] = 12       # y軸のラベルのフォントサイズ
rcParams['axes.labelsize'] = 18        # ラベルのフォントとサイズ
rcParams['figure.figsize'] = 18,8      # 画像サイズの変更(inch)
BASE_DIR="/Users/hinomaruc/Desktop/blog/dataset/AwA2/Animals_with_Attributes2"

import pandas as pd
import numpy as np
import os
from IPython.display import display, HTML
from sklearn.decomposition import PCA
# 動物クラスの情報 (indexの情報として利用)
classes=pd.read_fwf(os.path.join(BASE_DIR,"classes.txt"), header=None)[1].values
# 属性情報名 (columnの情報として利用)
feature_names=pd.read_fwf(os.path.join(BASE_DIR,"predicates.txt"), header=None)[1].values
# 各動物クラスの属性情報 (データの中身)
features = pd.read_fwf(os.path.join(BASE_DIR,"predicate-matrix-continuous.txt"), header=None)
# データフレームの作成
df_animals_attributes = pd.DataFrame(data=features.values,index=classes,columns=feature_names)
# PCA
X = df_animals_attributes.values
pca = PCA(n_components=2)
X_pca = pca.fit(X).transform(X)

85変数全てを使って潜在クラス分析を実施

from stepmix.stepmix import StepMix

# continuous latent class modelの作成
lca = StepMix(n_components=3, measurement="continuous", verbose=1, random_state=1234)

# フィット
lca.fit(df_animals_attributes)
Out[0]
================================================================================
MODEL REPORT
================================================================================
    ============================================================================
    Measurement model parameters
    ============================================================================
          model_name              gaussian_diag                      
          class_no                            0          1          2
          param       variable                                       
          covariances active           497.3704   742.9407   310.6696
                      agility          564.1669   715.6576   327.3713
                      arctic           627.3372   857.1449    34.7398
                      big             1244.3657   729.0694   993.8376
                      bipedal          544.3001     4.3443    54.2571
                      ・・・省略・・・
                      vegetation       515.7967   393.5548   604.6731
                      walks           1015.8455   497.3140   166.5320
                      water           1291.9431   774.6674     5.0966
                      weak             129.4761    16.5056   309.0791
                      white            859.4793   121.9341   795.1576
                      yellow             0.6720   150.6697    99.2409
          means       active            39.3294    37.3318    39.5226
                      agility           40.6219    41.5245    28.4870
                      arctic            18.2188    20.1491     2.3370
                      big               48.0262    56.7800    32.1178
                      bipedal           22.5631     1.1491     3.2717
                      ・・・省略・・・
                      vegetation        23.4475    16.8264    46.5661
                      walks             37.4862    47.3773    59.5678
                      water             32.9825    19.0318     1.5239
                      weak              11.3413     2.3245    19.3800
                      white             23.4575    11.9227    36.3604
                      yellow             0.3462     9.3382     2.8230
    ============================================================================
    Class weights
    ============================================================================
        Class 1 : 0.32
        Class 2 : 0.22
        Class 3 : 0.46
    ============================================================================
    Fit for 3 latent classes
    ============================================================================
    Estimation method             : 1-step
    Number of observations        : 50
    Number of latent classes      : 3
    Number of estimated parameters: 512
    Log-likelihood (LL)           : -16147.1614
    -2LL                          : 32294.3227
    Average LL                    : -322.9432
    AIC                           : 33318.32
    BIC                           : 34297.28
    CAIC                          : 34809.28
    Sample-Size Adjusted BIC      : 34693.15
    Entropy                       : 0.0000
    Scaled Relative Entropy       : 1.0000

Class weightsが所属割合、meansが各クラスの属性平均値でしょうか。

よくよく見てみるとcontinuousの場合、実際は混合ガウスモデルで動いているようです。

More formally, continuous is an alias for a Gaussian mixture model with diagonal covariance. We in fact estimate one mean and one variance parameter per feature.
引用: https://stepmix.readthedocs.io/en/latest/api.html#stepmix.stepmix.StepMix

一応描画してみます。

LCAの結果を描画

LCAの結果を描画
import matplotlib.pyplot as plt
from adjustText import adjust_text

# 描画用に作成クラスタ情報を変数に格納
cluster_assignments = lca.predict(df_animals_attributes)
uniq_cluster_assignments = np.unique(cluster_assignments)
n_clusters=np.size(uniq_cluster_assignments)

# 散布図の作成
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=cluster_assignments, cmap='viridis',s=50)

# クラスタに割り当てた色の情報を格納
colormap = plt.get_cmap('viridis', n_clusters)
cluster_colors = [colormap(i) for i in range(n_clusters)]

plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Latent Class Analysis')

# 凡例を追加
legend_labels = [f'Cluster {i}' for i in range(n_clusters)]
legend_handles = [plt.Line2D([0], [0], marker='o', color='w', markerfacecolor=cluster_colors[i], markersize=10, label=legend_labels[i]) for i in range(n_clusters)]
plt.legend(handles=legend_handles, title='Cluster Numbers', loc='lower right')

texts = []
# 各プロットにクラス名を追加。ラベル配置調整用にリストにも追加。
for idx,aclass in enumerate(classes):
    texts.append(plt.text(X_pca[idx, 0], X_pca[idx, 1], aclass, fontsize=9, ha='center', va='bottom'))

# ラベル位置の調整 (pip install adjustText 必要)
adjust_text(texts)

# グリッド追加
plt.grid(True)

# 描画
plt.show()
Out[0]

うーん、あんまりきれいに分かれていると言い難いですね。

batとpolar+bearが同じグループに所属しているのは違和感があります。

PCAで2次元に圧縮したデータを使って潜在クラス分析を実施

結果だけ載せておきます。

なんとなく海の生物と陸の生物は上手く分かれているようですが、それでもクジラとキツネが同じグループに所属しているのは謎ですね 笑

スポンサーリンク

カテゴリカルデータでStepMixを使い潜在クラス分析を試してみる

AwA2は数値データなのでStepMixでは潜在モデルではなく、混合ガウスモデルが使われてしまいました。

そのためカテゴリのみのデータでも試してみたいと思います。

AwA2の数値の属性情報をすべてカテゴリー化 (例えば0-10は1などに置き換える)しても良かったのですが、せっかくなので潜在モデル分析に向いているアンケートデータを使いたいと思います。

検索していたらKaggleに「Big Five Personality Test」1M Answers to 50 personality items, and technical information というデータセットがありました。

五大性格診断(Big Five Personality Test)はFFMモデルやOCEANモデルとも言われている性格分類を目的としたモデルのようです。本データセットには50個の設問に対する100万件の回答がデータ化され提供されています。設問に使われている言葉がそのまま回答者の性格を説明するものになっているようです。例えば、真面目な人は「計画性がある」と言われることが多く、「だらしない」とは言われにくいという性質を持っているようです。この理論は言葉の関連に基づき、神経心理学的な実験ではなく、一般的な言語記述を使用して人間の性格を5つの広い次元で説明することを提唱しています。

The Big Five personality traits, also known as the five-factor model (FFM) and the OCEAN model, is a taxonomy, or grouping, for personality traits. When factor analysis (a statistical technique) is applied to personality survey data, some words used to describe aspects of personality are often applied to the same person. For example, someone described as conscientious is more likely to be described as "always prepared" rather than "messy". This theory is based therefore on the association between words but not on neuropsychological experiments. This theory uses descriptors of common language and therefore suggests five broad dimensions commonly used to describe the human personality and psyche.
引用: https://www.kaggle.com/datasets/tunguz/big-five-personality-test/data

潜在クラス分析で複数の似た集団がでてくるのではないかと予想しています。五大性格診断だから5つのクラスを作成しようかと思っています。

それではさくっと進めていきます。

五大性格診断のデータセットの中身を確認

データセットの理解から始めます。性格診断の設問は全部50個あるということなので、まとめました。他にも回答者の情報なども含まれていましたが、今回は割愛します。

国や地域別の性格分類などしても面白いかも知れません。

カラム名 設問(英語) 設問(日本語)
EXT1 I am the life of the party. 私はパーティーの中心人物です。
EXT2 I don't talk a lot. 私はあまり話しません。
EXT3 I feel comfortable around people. 他の人々と一緒にいると落ち着きます。
EXT4 I keep in the background. 私は控えめな性格です。
EXT5 I start conversations. 私から会話を始めます。
EXT6 I have little to say. 私は静かな性格です。
EXT7 I talk to a lot of different people at parties. 私はパーティーでたくさんの異なる人々と話します。
EXT8 I don't like to draw attention to myself. 私は自分に注目されるのが好きではありません。
EXT9 I don't mind being the center of attention. 私は注目の的であることを気にしません。
EXT10 I am quiet around strangers. 私は見知らぬ人の前では静かです。
EST1 I get stressed out easily. 私は簡単にストレスを感じます。
EST2 I am relaxed most of the time. 私はほとんどいつもリラックスしています。
EST3 I worry about things. 私は物事を心配します。
EST4 I seldom feel blue. 私はあまり気が滅入ることはありません。
EST5 I am easily disturbed. 私は簡単に気が散ります。
EST6 I get upset easily. 私は簡単に怒ります。
EST7 I change my mood a lot. 私は気分が変わりやすいです。
EST8 I have frequent mood swings. 私はよく気分が変わります。
EST9 I get irritated easily. 私は簡単にイライラします。
EST10 I often feel blue. 私はよく気が滅入ります。
AGR1 I feel little concern for others. 他人にあまり関心がありません。
AGR2 I am interested in people. 私は人々に関心を持っています。
AGR3 I insult people. 私は人をバカにします。
AGR4 I sympathize with others' feelings. 私は他人の気持ちに共感します。
AGR5 I am not interested in other people's problems. 私は他人の問題に興味がありません。
AGR6 I have a soft heart. 私は柔軟な心の持ち主です。
AGR7 I am not really interested in others. 私は本当に他人にあまり興味がありません。
AGR8 I take time out for others. 私は他人のために時間を割きます。
AGR9 I feel others' emotions. 私は他人の感情を感じることができます。
AGR10 I make people feel at ease. 私は人々を安心させることができます。
CSN1 I am always prepared. 私はいつも準備ができています。
CSN2 I leave my belongings around. 私は物を周囲に放置します。
CSN3 I pay attention to details. 私は細部に注意を払います。
CSN4 I make a mess of things. 私は物事を台無しにします。
CSN5 I get chores done right away. 私はすぐに雑用を片付けます。
CSN6 I often forget to put things back in their proper place. 私は物を元の場所に戻すのを忘れることがよくあります。
CSN7 I like order. 私は秩序が好きです。
CSN8 I shirk my duties. 私は職務を怠ります。
CSN9 I follow a schedule. 私はスケジュールに従います。
CSN10 I am exacting in my work. 私は仕事に厳格です。
OPN1 I have a rich vocabulary. 私は豊富な語彙を持っています。
OPN2 I have difficulty understanding abstract ideas. 私は抽象的なアイデアを理解するのが難しいです。
OPN3 I have a vivid imagination. 私は鮮明な想像力を持っています。
OPN4 I am not interested in abstract ideas. 私は抽象的なアイデアに興味がありません。
OPN5 I have excellent ideas. 私は優れたアイデアを持っています。
OPN6 I do not have a good imagination. 私は想像力が乏しいです。
OPN7 I am quick to understand things. 私は物事を理解するのが速いです。
OPN8 I use difficult words. 私は難しい言葉を使います。
OPN9 I spend time reflecting on things. 私は物事を熟考する時間を過ごします。
OPN10 I am full of ideas. 私はアイデアに溢れています。

データの読み込み

csvファイルの読み込み
import pandas as pd
df = pd.read_csv("/Users/hinomaruc/Desktop/blog/dataset/IPIP-FFM-data-8Nov2018/data-final.csv",sep="\t",header=0)
df.head()
Out[0]
    0   1   2   3   4
EXT1    4.0     3.0     2.0     2.0     3.0
EXT2    1.0     5.0     3.0     2.0     3.0
EXT3    5.0     3.0     4.0     2.0     3.0
EXT4    2.0     4.0     4.0     3.0     3.0
EXT5    5.0     3.0     3.0     4.0     5.0
...     ...     ...     ...     ...     ...
endelapse   6   11  7   7   17
IPC     1   1   1   1   2
country     GB  MY  GB  GB  KE
lat_appx_lots_of_err    51.5448     3.1698  54.9119     51.75   1.0
long_appx_lots_of_err   0.1991  101.706     -1.3833     -1.25   38.0

横持ちのデータセットになっているようです。縦持ちだと扱いづらいと思っていたので良かったです。

使用するカラムのみにフィルタリングする

性格診断への回答データのみに限定します。


# 今回利用するカラムに限定
questions_cols=[
 'EXT1',
 'EXT2',
 'EXT3',
 'EXT4',
 'EXT5',
 'EXT6',
 'EXT7',
 'EXT8',
 'EXT9',
 'EXT10',
 'EST1',
 'EST2',
 'EST3',
 'EST4',
 'EST5',
 'EST6',
 'EST7',
 'EST8',
 'EST9',
 'EST10',
 'AGR1',
 'AGR2',
 'AGR3',
 'AGR4',
 'AGR5',
 'AGR6',
 'AGR7',
 'AGR8',
 'AGR9',
 'AGR10',
 'CSN1',
 'CSN2',
 'CSN3',
 'CSN4',
 'CSN5',
 'CSN6',
 'CSN7',
 'CSN8',
 'CSN9',
 'CSN10',
 'OPN1',
 'OPN2',
 'OPN3',
 'OPN4',
 'OPN5',
 'OPN6',
 'OPN7',
 'OPN8',
 'OPN9',
 'OPN10'    
]

df_lca = df[questions_cols]

df_lca.info()
Out[0]
RangeIndex: 1015341 entries, 0 to 1015340
Data columns (total 50 columns):
 #   Column  Non-Null Count    Dtype  
---  ------  --------------    -----  
 0   EXT1    1013558 non-null  float64
 1   EXT2    1013558 non-null  float64
 2   EXT3    1013558 non-null  float64
 3   EXT4    1013558 non-null  float64
 4   EXT5    1013558 non-null  float64
 5   EXT6    1013558 non-null  float64
 6   EXT7    1013558 non-null  float64
 7   EXT8    1013558 non-null  float64
 8   EXT9    1013558 non-null  float64
 9   EXT10   1013558 non-null  float64
 10  EST1    1013558 non-null  float64
 11  EST2    1013558 non-null  float64
 12  EST3    1013558 non-null  float64
 13  EST4    1013558 non-null  float64
 14  EST5    1013558 non-null  float64
 15  EST6    1013558 non-null  float64
 16  EST7    1013558 non-null  float64
 17  EST8    1013558 non-null  float64
 18  EST9    1013558 non-null  float64
 19  EST10   1013558 non-null  float64
 20  AGR1    1013558 non-null  float64
 21  AGR2    1013558 non-null  float64
 22  AGR3    1013558 non-null  float64
 23  AGR4    1013558 non-null  float64
 24  AGR5    1013558 non-null  float64
 25  AGR6    1013558 non-null  float64
 26  AGR7    1013558 non-null  float64
 27  AGR8    1013558 non-null  float64
 28  AGR9    1013558 non-null  float64
 29  AGR10   1013558 non-null  float64
 30  CSN1    1013558 non-null  float64
 31  CSN2    1013558 non-null  float64
 32  CSN3    1013558 non-null  float64
 33  CSN4    1013558 non-null  float64
 34  CSN5    1013558 non-null  float64
 35  CSN6    1013558 non-null  float64
 36  CSN7    1013558 non-null  float64
 37  CSN8    1013558 non-null  float64
 38  CSN9    1013558 non-null  float64
 39  CSN10   1013558 non-null  float64
 40  OPN1    1013558 non-null  float64
 41  OPN2    1013558 non-null  float64
 42  OPN3    1013558 non-null  float64
 43  OPN4    1013558 non-null  float64
 44  OPN5    1013558 non-null  float64
 45  OPN6    1013558 non-null  float64
 46  OPN7    1013558 non-null  float64
 47  OPN8    1013558 non-null  float64
 48  OPN9    1013558 non-null  float64
 49  OPN10   1013558 non-null  float64
dtypes: float64(50)
memory usage: 387.3 MB

あれ? 1015341 entriesあるのに1013558ということはnullのデータがありそうです。

nullのデータを確認
df_lca[df_lca.isna().any(axis=1)]
Out[0]
EXT1    EXT2    EXT3    EXT4    EXT5    EXT6    EXT7    EXT8    EXT9    EXT10   ...     OPN1    OPN2    OPN3    OPN4    OPN5    OPN6    OPN7    OPN8    OPN9    OPN10
78795   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
78854   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
78889   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
153202  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
153204  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...
282818  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
282844  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
282847  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
282921  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
283042  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     ...     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN

1783 rows × 50 columns

1783行のnullデータがあるようです。

元データを確認してみます。

index 78795を確認
df.iloc[78795]
Out[0]
EXT1                       NaN
EXT2                       NaN
EXT3                       NaN
EXT4                       NaN
EXT5                       NaN
                         ...  
endelapse                  133
IPC                          1
country                     US
lat_appx_lots_of_err      38.0
long_appx_lots_of_err    -97.0
Name: 78795, Length: 110, dtype: object

どうやら設問の回答部分のみnullなようです。未回答者がいたということでしょうか?

いらないデータなので除外しようと思います。

nullの削除とパーセンタイルの確認
df_lca_nonull = df_lca.dropna()
df_lca_nonull.describe(include='all',percentiles=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.95,0.99]).transpose()
Out[0]
    count   mean    std     min     10%     20%     30%     40%     50%     60%     70%     80%     90%     95%     99%     max
EXT1    1013558.0   2.648067    1.264407    0.0     1.0     1.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0
EXT2    1013558.0   2.773115    1.323943    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT3    1013558.0   3.288349    1.215006    0.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT4    1013558.0   3.140595    1.237442    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT5    1013558.0   3.276960    1.277593    0.0     1.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT6    1013558.0   2.401100    1.225721    0.0     1.0     1.0     2.0     2.0     2.0     2.0     3.0     4.0     4.0     5.0     5.0     5.0
EXT7    1013558.0   2.771744    1.400336    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT8    1013558.0   3.414818    1.271915    0.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
EXT9    1013558.0   2.963740    1.346040    0.0     1.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EXT10   1013558.0   3.556469    1.305232    0.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
EST1    1013558.0   3.285969    1.345600    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
EST2    1013558.0   3.165072    1.228272    0.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EST3    1013558.0   3.846466    1.163348    0.0     2.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
EST4    1013558.0   2.663756    1.252999    0.0     1.0     2.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0
EST5    1013558.0   2.843086    1.273892    0.0     1.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EST6    1013558.0   2.841154    1.326569    0.0     1.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EST7    1013558.0   3.050394    1.293009    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EST8    1013558.0   2.683485    1.343042    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
EST9    1013558.0   3.088511    1.297141    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
EST10   1013558.0   2.773504    1.323155    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
AGR1    1013558.0   2.255316    1.339971    0.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     4.0     4.0     5.0     5.0     5.0
AGR2    1013558.0   3.831103    1.140587    0.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
AGR3    1013558.0   2.259957    1.277323    0.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     4.0     4.0     5.0     5.0     5.0
AGR4    1013558.0   3.927497    1.127688    0.0     2.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
AGR5    1013558.0   2.270857    1.171207    0.0     1.0     1.0     2.0     2.0     2.0     2.0     3.0     3.0     4.0     5.0     5.0     5.0
AGR6    1013558.0   3.743075    1.222431    0.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
AGR7    1013558.0   2.195806    1.120320    0.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0
AGR8    1013558.0   3.689389    1.095536    0.0     2.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
AGR9    1013558.0   3.789116    1.166743    0.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
AGR10   1013558.0   3.592351    1.080791    0.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
CSN1    1013558.0   3.297999    1.176791    0.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
CSN2    1013558.0   2.930295    1.390062    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
CSN3    1013558.0   3.975280    1.044728    0.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
CSN4    1013558.0   2.617866    1.251815    0.0     1.0     1.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0
CSN5    1013558.0   2.625832    1.274595    0.0     1.0     1.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0
CSN6    1013558.0   2.831821    1.416194    0.0     1.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0     5.0     5.0
CSN7    1013558.0   3.698187    1.128066    0.0     2.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
CSN8    1013558.0   2.465306    1.140957    0.0     1.0     1.0     2.0     2.0     2.0     3.0     3.0     3.0     4.0     4.0     5.0     5.0
CSN9    1013558.0   3.200695    1.276230    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
CSN10   1013558.0   3.590596    1.053185    0.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
OPN1    1013558.0   3.654636    1.157155    0.0     2.0     3.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
OPN2    1013558.0   2.075933    1.112600    0.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     3.0     4.0     4.0     5.0     5.0
OPN3    1013558.0   4.000068    1.097169    0.0     2.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0     5.0
OPN4    1013558.0   1.999891    1.090239    0.0     1.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     4.0     4.0     5.0     5.0
OPN5    1013558.0   3.792905    0.992386    0.0     3.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0
OPN6    1013558.0   1.894605    1.104125    0.0     1.0     1.0     1.0     1.0     2.0     2.0     2.0     3.0     4.0     4.0     5.0     5.0
OPN7    1013558.0   3.976375    1.008505    0.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0
OPN8    1013558.0   3.182453    1.255374    0.0     1.0     2.0     2.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0
OPN9    1013558.0   4.122993    1.041216    0.0     3.0     3.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0     5.0
OPN10   1013558.0   3.958441    1.034491    0.0     3.0     3.0     4.0     4.0     4.0     4.0     5.0     5.0     5.0     5.0     5.0     5.0

潜在クラス分析を実施

データ量が多いからか20分ほどかかりました 笑

n_componentsは五大性格診断に倣い、「5」にしています。

from stepmix.stepmix import StepMix

# 潜在クラス分析を実施
lca = StepMix(n_components=5, measurement="categorical", verbose=1, random_state=1234)

# フィット
lca.fit(df_lca_nonull)
Out[0]

================================================================================
MODEL REPORT
================================================================================
    ============================================================================
    Measurement model parameters
    ============================================================================
          model_name     categorical                                
          class_no                 0       1       2       3       4
          param variable                                            
          pis   AGR10_0       0.9644  0.0035  0.0069  0.0038  0.0040
                AGR10_1       0.0041  0.0615  0.1058  0.0066  0.0039
                AGR10_2       0.0057  0.2045  0.0455  0.0336  0.0738
                AGR10_3       0.0116  0.3714  0.2362  0.1510  0.4159
                AGR10_4       0.0079  0.2537  0.1131  0.4308  0.4399
                AGR10_5       0.0063  0.1055  0.4924  0.3742  0.0626
                AGR1_0        0.6104  0.0020  0.0035  0.0018  0.0024
                AGR1_1        0.0947  0.3138  0.4467  0.5561  0.2773
                AGR1_2        0.0758  0.2639  0.0661  0.2247  0.3590
                AGR1_3        0.0808  0.1604  0.1291  0.0678  0.1558
                AGR1_4        0.0575  0.1812  0.0750  0.0846  0.1577
                AGR1_5        0.0809  0.0786  0.2797  0.0649  0.0479
                AGR2_0        0.6992  0.0056  0.0081  0.0058  0.0062
                AGR2_1        0.0239  0.0600  0.1227  0.0057  0.0051
                AGR2_2        0.0319  0.1909  0.0534  0.0212  0.0683
                AGR2_3        0.0796  0.2476  0.1837  0.0648  0.2521
                AGR2_4        0.0837  0.3153  0.1058  0.3176  0.5188
                AGR2_5        0.0817  0.1807  0.5263  0.5848  0.1496
                AGR3_0        0.7715  0.0013  0.0025  0.0014  0.0017
                AGR3_1        0.0861  0.3335  0.5159  0.4437  0.3047
                AGR3_2        0.0394  0.2131  0.0732  0.2393  0.3238
                AGR3_3        0.0535  0.1767  0.1459  0.1446  0.2108
                AGR3_4        0.0306  0.2027  0.0854  0.1297  0.1397
                AGR3_5        0.0189  0.0727  0.1770  0.0413  0.0193
                AGR4_0        0.8283  0.0034  0.0060  0.0036  0.0040
                AGR4_1        0.0135  0.0503  0.1282  0.0153  0.0058
                AGR4_2        0.0131  0.1390  0.0482  0.0496  0.0686
                AGR4_3        0.0409  0.1664  0.1268  0.0825  0.1937
                AGR4_4        0.0522  0.3292  0.0824  0.3326  0.5444
                AGR4_5        0.0520  0.3117  0.6084  0.5164  0.1834
                AGR5_0        0.8799  0.0021  0.0038  0.0026  0.0026
                AGR5_1        0.0302  0.1983  0.4990  0.4556  0.1240
                AGR5_2        0.0306  0.3313  0.0856  0.3530  0.5009
                AGR5_3        0.0333  0.1951  0.1663  0.1035  0.2463
                AGR5_4        0.0138  0.1932  0.0571  0.0639  0.1132
                AGR5_5        0.0122  0.0799  0.1882  0.0214  0.0130
                AGR6_0        0.9244  0.0055  0.0088  0.0060  0.0062
                AGR6_1        0.0056  0.0666  0.1509  0.0410  0.0153
                AGR6_2        0.0062  0.1348  0.0401  0.0889  0.1069
                AGR6_3        0.0202  0.1761  0.1314  0.1462  0.2456
                AGR6_4        0.0166  0.3096  0.0707  0.3177  0.4529
                AGR6_5        0.0269  0.3074  0.5981  0.4001  0.1731
                AGR7_0        0.9614  0.0015  0.0032  0.0021  0.0019
                AGR7_1        0.0085  0.1622  0.5170  0.5466  0.1110
                AGR7_2        0.0086  0.3182  0.0839  0.3456  0.5474
                AGR7_3        0.0098  0.2271  0.1780  0.0651  0.2551
                AGR7_4        0.0073  0.2260  0.0582  0.0337  0.0813
                AGR7_5        0.0045  0.0649  0.1597  0.0068  0.0034
                AGR8_0        0.9755  0.0039  0.0071  0.0037  0.0037
                AGR8_1        0.0027  0.0470  0.1273  0.0109  0.0042
                AGR8_2        0.0041  0.1872  0.0570  0.0580  0.0865
                AGR8_3        0.0076  0.2405  0.1812  0.1236  0.2955
                AGR8_4        0.0050  0.3510  0.1084  0.4441  0.5280
                AGR8_5        0.0052  0.1705  0.5190  0.3596  0.0821
                AGR9_0        0.9646  0.0013  0.0029  0.0018  0.0018
                AGR9_1        0.0032  0.0799  0.1375  0.0219  0.0099
                AGR9_2        0.0052  0.1616  0.0428  0.0641  0.0995
                AGR9_3        0.0099  0.1624  0.1220  0.0963  0.2343
                AGR9_4        0.0065  0.3351  0.0885  0.3657  0.5324
                AGR9_5        0.0105  0.2595  0.6063  0.4502  0.1222
                CSN10_0       0.9584  0.0035  0.0073  0.0041  0.0045
                CSN10_1       0.0044  0.0326  0.0963  0.0157  0.0052
                CSN10_2       0.0052  0.1304  0.0436  0.0852  0.0896
                CSN10_3       0.0111  0.3104  0.2537  0.2363  0.4266
                CSN10_4       0.0102  0.3319  0.1095  0.3995  0.4122
                CSN10_5       0.0108  0.1912  0.4896  0.2591  0.0618
                CSN1_0        0.6382  0.0080  0.0127  0.0092  0.0094
                CSN1_1        0.0404  0.0970  0.1677  0.0427  0.0198
                CSN1_2        0.0540  0.2251  0.0767  0.1505  0.1702
                CSN1_3        0.1115  0.2441  0.2478  0.2273  0.3341
                CSN1_4        0.0843  0.3086  0.1520  0.3957  0.3909
                CSN1_5        0.0715  0.1173  0.3431  0.1747  0.0754
                CSN2_0        0.7197  0.0032  0.0051  0.0028  0.0030
                CSN2_1        0.0597  0.1808  0.4102  0.2075  0.1340
                CSN2_2        0.0542  0.1936  0.0652  0.2032  0.2791
                CSN2_3        0.0768  0.1620  0.1557  0.1750  0.2441
                CSN2_4        0.0482  0.2673  0.0744  0.2475  0.2759
                CSN2_5        0.0413  0.1932  0.2893  0.1640  0.0640
                CSN3_0        0.7845  0.0021  0.0038  0.0025  0.0026
                CSN3_1        0.0169  0.0217  0.0666  0.0141  0.0056
                CSN3_2        0.0187  0.0900  0.0391  0.0716  0.0715
                CSN3_3        0.0495  0.1495  0.1374  0.1237  0.2228
                CSN3_4        0.0620  0.3753  0.1013  0.3567  0.5062
                CSN3_5        0.0683  0.3613  0.6517  0.4314  0.1913
                CSN4_0        0.8393  0.0030  0.0046  0.0028  0.0029
                CSN4_1        0.0389  0.1384  0.4167  0.3020  0.1129
                CSN4_2        0.0277  0.2373  0.0789  0.3102  0.4039
                CSN4_3        0.0537  0.2229  0.1821  0.1857  0.2979
                CSN4_4        0.0241  0.2684  0.0791  0.1513  0.1668
                CSN4_5        0.0162  0.1301  0.2386  0.0478  0.0156
                CSN5_0        0.9023  0.0030  0.0074  0.0033  0.0037
                CSN5_1        0.0158  0.3235  0.3091  0.1867  0.1124
                CSN5_2        0.0209  0.2997  0.0803  0.2610  0.3368
                CSN5_3        0.0305  0.1775  0.2194  0.2258  0.3134
                CSN5_4        0.0189  0.1388  0.0879  0.2147  0.1957
                CSN5_5        0.0116  0.0574  0.2958  0.1085  0.0379
                CSN6_0        0.9412  0.0019  0.0042  0.0024  0.0023
                CSN6_1        0.0112  0.1848  0.4130  0.2724  0.1291
                CSN6_2        0.0109  0.2141  0.0603  0.2428  0.3381
                CSN6_3        0.0169  0.1366  0.1338  0.1397  0.2232
                CSN6_4        0.0110  0.2438  0.0629  0.2023  0.2477
                CSN6_5        0.0088  0.2187  0.3258  0.1404  0.0596
                CSN7_0        0.9638  0.0026  0.0050  0.0029  0.0028
                CSN7_1        0.0055  0.0436  0.1384  0.0345  0.0133
                CSN7_2        0.0047  0.1090  0.0433  0.1008  0.0907
                CSN7_3        0.0083  0.2050  0.1840  0.2044  0.2861
                CSN7_4        0.0089  0.3663  0.0919  0.3757  0.4664
                CSN7_5        0.0087  0.2735  0.5374  0.2817  0.1407
                CSN8_0        0.9805  0.0030  0.0072  0.0034  0.0036
                CSN8_1        0.0036  0.1699  0.4140  0.3349  0.1181
                CSN8_2        0.0035  0.2459  0.0722  0.2887  0.3581
                CSN8_3        0.0070  0.3077  0.2924  0.2447  0.4014
                CSN8_4        0.0036  0.2043  0.0636  0.1049  0.1110
                CSN8_5        0.0019  0.0691  0.1505  0.0234  0.0078
                CSN9_0        0.9694  0.0025  0.0055  0.0033  0.0029
                CSN9_1        0.0043  0.1642  0.2264  0.0839  0.0378
                CSN9_2        0.0059  0.2373  0.0657  0.1822  0.2033
                CSN9_3        0.0082  0.1969  0.1790  0.2076  0.3023
                CSN9_4        0.0052  0.2636  0.0958  0.3288  0.3753
                CSN9_5        0.0070  0.1355  0.4275  0.1942  0.0784
                EST10_0       0.9545  0.0023  0.0061  0.0024  0.0027
                EST10_1       0.0101  0.0891  0.3564  0.3430  0.1037
                EST10_2       0.0086  0.1529  0.0703  0.3025  0.3719
                EST10_3       0.0118  0.1841  0.2106  0.1679  0.3073
                EST10_4       0.0059  0.3307  0.0809  0.1390  0.1969
                EST10_5       0.0091  0.2409  0.2757  0.0451  0.0175
                EST1_0        0.6521  0.0045  0.0074  0.0043  0.0048
                EST1_1        0.0554  0.0664  0.2485  0.1759  0.0531
                EST1_2        0.0563  0.1262  0.0681  0.2407  0.2188
                EST1_3        0.0961  0.1351  0.1592  0.2075  0.2800
                EST1_4        0.0647  0.2977  0.0919  0.2417  0.3331
                EST1_5        0.0753  0.3702  0.4248  0.1298  0.1102
                EST2_0        0.7362  0.0058  0.0083  0.0064  0.0059
                EST2_1        0.0317  0.1479  0.2377  0.0368  0.0183
                EST2_2        0.0462  0.3119  0.1054  0.1774  0.2028
                EST2_3        0.0806  0.2157  0.2202  0.2404  0.3421
                EST2_4        0.0539  0.2142  0.0893  0.3331  0.3552
                EST2_5        0.0514  0.1046  0.3391  0.2059  0.0758
                EST3_0        0.7929  0.0019  0.0030  0.0016  0.0021
                EST3_1        0.0165  0.0234  0.1276  0.0624  0.0110
                EST3_2        0.0207  0.0670  0.0488  0.1538  0.1031
                EST3_3        0.0547  0.0793  0.1330  0.1642  0.2035
                EST3_4        0.0537  0.3151  0.0871  0.3557  0.5076
                EST3_5        0.0615  0.5133  0.6005  0.2623  0.1727
                EST4_0        0.8565  0.0059  0.0119  0.0062  0.0064
                EST4_1        0.0251  0.3083  0.3462  0.1351  0.0639
                EST4_2        0.0278  0.3186  0.0920  0.2698  0.3487
                EST4_3        0.0469  0.1758  0.2460  0.2300  0.3517
                EST4_4        0.0218  0.1294  0.0691  0.2235  0.2010
                EST4_5        0.0219  0.0621  0.2349  0.1353  0.0283
                EST5_0        0.9025  0.0018  0.0035  0.0019  0.0020
                EST5_1        0.0166  0.1334  0.3251  0.2315  0.0648
                EST5_2        0.0203  0.2071  0.0704  0.3222  0.3335
                EST5_3        0.0250  0.1861  0.1729  0.1984  0.3155
                EST5_4        0.0203  0.3142  0.0923  0.1894  0.2533
                EST5_5        0.0153  0.1575  0.3359  0.0567  0.0309
                EST6_0        0.9453  0.0062  0.0089  0.0065  0.0062
                EST6_1        0.0107  0.1207  0.3242  0.2639  0.0853
                EST6_2        0.0123  0.1910  0.0613  0.3020  0.3376
                EST6_3        0.0159  0.1690  0.1619  0.1878  0.2999
                EST6_4        0.0085  0.3037  0.0873  0.1844  0.2411
                EST6_5        0.0073  0.2094  0.3563  0.0554  0.0299
                EST7_0        0.9628  0.0018  0.0035  0.0018  0.0019
                EST7_1        0.0043  0.0815  0.2771  0.1906  0.0469
                EST7_2        0.0060  0.1841  0.0560  0.3005  0.2984
                EST7_3        0.0110  0.1818  0.1679  0.2092  0.3299
                EST7_4        0.0065  0.3094  0.0736  0.2073  0.2781
                EST7_5        0.0094  0.2414  0.4219  0.0906  0.0448
                EST8_0        0.9778  0.0024  0.0052  0.0029  0.0030
                EST8_1        0.0054  0.1568  0.3571  0.3521  0.1319
                EST8_2        0.0037  0.2016  0.0535  0.2797  0.3739
                EST8_3        0.0065  0.1762  0.1632  0.1599  0.2737
                EST8_4        0.0041  0.2754  0.0760  0.1517  0.1950
                EST8_5        0.0025  0.1876  0.3450  0.0538  0.0224
                EST9_0        0.9654  0.0016  0.0037  0.0018  0.0022
                EST9_1        0.0076  0.0747  0.2670  0.2047  0.0496
                EST9_2        0.0063  0.1542  0.0623  0.2965  0.2848
                EST9_3        0.0086  0.1543  0.1576  0.1944  0.3004
                EST9_4        0.0056  0.3641  0.1016  0.2302  0.3180
                EST9_5        0.0064  0.2511  0.4078  0.0724  0.0450
                EXT10_0       0.9569  0.0023  0.0033  0.0015  0.0017
                EXT10_1       0.0060  0.0100  0.1940  0.1578  0.0097
                EXT10_2       0.0059  0.0350  0.0661  0.3267  0.1361
                EXT10_3       0.0118  0.0723  0.1682  0.2317  0.2745
                EXT10_4       0.0097  0.2568  0.0844  0.2007  0.4160
                EXT10_5       0.0097  0.6236  0.4840  0.0816  0.1620
                EXT1_0        0.5575  0.0008  0.0026  0.0012  0.0012
                EXT1_1        0.1181  0.5028  0.3575  0.0602  0.1388
                EXT1_2        0.0606  0.2555  0.0625  0.1237  0.2680
                EXT1_3        0.1379  0.1671  0.2679  0.3126  0.3859
                EXT1_4        0.0512  0.0617  0.0980  0.3601  0.1751
                EXT1_5        0.0746  0.0121  0.2115  0.1422  0.0310
                EXT2_0        0.6751  0.0033  0.0045  0.0025  0.0029
                EXT2_1        0.0688  0.0487  0.3638  0.4200  0.0842
                EXT2_2        0.0605  0.1399  0.0879  0.3225  0.2906
                EXT2_3        0.0926  0.2365  0.2144  0.1613  0.3456
                EXT2_4        0.0543  0.3014  0.0789  0.0767  0.2336
                EXT2_5        0.0487  0.2702  0.2507  0.0171  0.0431
                EXT3_0        0.7613  0.0021  0.0045  0.0023  0.0030
                EXT3_1        0.0229  0.1760  0.1829  0.0055  0.0059
                EXT3_2        0.0314  0.4217  0.0970  0.0389  0.1476
                EXT3_3        0.0728  0.2735  0.2461  0.1439  0.3987
                EXT3_4        0.0535  0.1093  0.1021  0.4105  0.3911
                EXT3_5        0.0581  0.0174  0.3674  0.3988  0.0537
                EXT4_0        0.8191  0.0031  0.0056  0.0027  0.0031
                EXT4_1        0.0236  0.0101  0.2248  0.2232  0.0156
                EXT4_2        0.0295  0.0648  0.0797  0.3848  0.2103
                EXT4_3        0.0615  0.1810  0.2618  0.2483  0.4149
                EXT4_4        0.0375  0.3903  0.0882  0.1196  0.3240
                EXT4_5        0.0288  0.3507  0.3399  0.0214  0.0321
                EXT5_0        0.8694  0.0050  0.0089  0.0059  0.0056
                EXT5_1        0.0167  0.2349  0.1909  0.0045  0.0182
                EXT5_2        0.0188  0.3539  0.0663  0.0375  0.1859
                EXT5_3        0.0357  0.2362  0.2100  0.1169  0.3607
                EXT5_4        0.0308  0.1458  0.1143  0.4230  0.3877
                EXT5_5        0.0286  0.0240  0.4096  0.4122  0.0420
                EXT6_0        0.9150  0.0018  0.0039  0.0018  0.0020
                EXT6_1        0.0172  0.1311  0.4633  0.5032  0.0671
                EXT6_2        0.0197  0.2671  0.0913  0.3802  0.4524
                EXT6_3        0.0218  0.1961  0.1834  0.0788  0.3044
                EXT6_4        0.0146  0.2580  0.0584  0.0302  0.1612
                EXT6_5        0.0117  0.1459  0.1997  0.0059  0.0129
                EXT7_0        0.9565  0.0035  0.0059  0.0036  0.0039
                EXT7_1        0.0094  0.5223  0.3609  0.0386  0.0971
                EXT7_2        0.0071  0.2789  0.0691  0.1299  0.3346
                EXT7_3        0.0114  0.1092  0.1787  0.1848  0.2946
                EXT7_4        0.0094  0.0660  0.0691  0.3337  0.2309
                EXT7_5        0.0063  0.0201  0.3164  0.3093  0.0388
                EXT8_0        0.9719  0.0021  0.0040  0.0015  0.0018
                EXT8_1        0.0043  0.0355  0.2141  0.1224  0.0191
                EXT8_2        0.0035  0.0813  0.0724  0.3112  0.1630
                EXT8_3        0.0085  0.1250  0.1935  0.2629  0.3104
                EXT8_4        0.0061  0.2960  0.0676  0.2096  0.3956
                EXT8_5        0.0057  0.4601  0.4484  0.0923  0.1101
                EXT9_0        0.9703  0.0022  0.0049  0.0022  0.0022
                EXT9_1        0.0056  0.3484  0.3170  0.0436  0.0694
                EXT9_2        0.0045  0.3032  0.0699  0.1235  0.2937
                EXT9_3        0.0077  0.1539  0.1826  0.1882  0.3129
                EXT9_4        0.0059  0.1367  0.0765  0.3602  0.2821
                EXT9_5        0.0059  0.0555  0.3491  0.2823  0.0397
                OPN10_0       0.9275  0.0021  0.0029  0.0016  0.0022
                OPN10_1       0.0074  0.0248  0.0630  0.0027  0.0042
                OPN10_2       0.0068  0.1034  0.0341  0.0234  0.0748
                OPN10_3       0.0195  0.2014  0.1832  0.1078  0.3399
                OPN10_4       0.0126  0.3162  0.1013  0.3435  0.4549
                OPN10_5       0.0262  0.3521  0.6155  0.5210  0.1239
                OPN1_0        0.6698  0.0052  0.0094  0.0062  0.0059
                OPN1_1        0.0404  0.0448  0.1413  0.0215  0.0270
                OPN1_2        0.0514  0.1064  0.0672  0.0693  0.1438
                OPN1_3        0.1147  0.2177  0.2667  0.1889  0.3379
                OPN1_4        0.0676  0.3396  0.1390  0.3477  0.3710
                OPN1_5        0.0562  0.2864  0.3765  0.3665  0.1144
                OPN2_0        0.7530  0.0026  0.0043  0.0020  0.0025
                OPN2_1        0.0584  0.3859  0.5043  0.5134  0.1689
                OPN2_2        0.0531  0.2980  0.0883  0.2964  0.4394
                OPN2_3        0.0752  0.1655  0.2098  0.1152  0.2678
                OPN2_4        0.0360  0.1099  0.0598  0.0578  0.1081
                OPN2_5        0.0244  0.0381  0.1334  0.0152  0.0133
                OPN3_0        0.8119  0.0029  0.0059  0.0044  0.0038
                OPN3_1        0.0118  0.0266  0.0773  0.0129  0.0102
                OPN3_2        0.0181  0.0811  0.0344  0.0543  0.0960
                OPN3_3        0.0548  0.1378  0.1619  0.1215  0.2681
                OPN3_4        0.0510  0.2867  0.0833  0.2997  0.4377
                OPN3_5        0.0524  0.4648  0.6372  0.5072  0.1842
                OPN4_0        0.8662  0.0023  0.0052  0.0025  0.0026
                OPN4_1        0.0373  0.4415  0.5491  0.5339  0.1887
                OPN4_2        0.0299  0.2775  0.0721  0.2726  0.4384
                OPN4_3        0.0401  0.1678  0.2099  0.1204  0.2704
                OPN4_4        0.0141  0.0782  0.0388  0.0511  0.0882
                OPN4_5        0.0124  0.0327  0.1249  0.0195  0.0116
                OPN5_0        0.9105  0.0032  0.0055  0.0035  0.0034
                OPN5_1        0.0055  0.0260  0.0606  0.0026  0.0031
                OPN5_2        0.0061  0.1060  0.0330  0.0194  0.0623
                OPN5_3        0.0307  0.2835  0.2360  0.1507  0.3992
                OPN5_4        0.0199  0.3629  0.1311  0.4481  0.4637
                OPN5_5        0.0273  0.2184  0.5338  0.3757  0.0683
                OPN6_0        0.9535  0.0035  0.0059  0.0038  0.0035
                OPN6_1        0.0158  0.4569  0.6816  0.6196  0.2168
                OPN6_2        0.0100  0.2909  0.0571  0.2434  0.4843
                OPN6_3        0.0102  0.1122  0.1145  0.0603  0.1867
                OPN6_4        0.0060  0.0930  0.0315  0.0467  0.0962
                OPN6_5        0.0046  0.0435  0.1094  0.0262  0.0126
                OPN7_0        0.9701  0.0033  0.0068  0.0043  0.0037
                OPN7_1        0.0030  0.0179  0.0671  0.0046  0.0038
                OPN7_2        0.0031  0.0847  0.0390  0.0309  0.0595
                OPN7_3        0.0106  0.1767  0.1850  0.0999  0.2655
                OPN7_4        0.0073  0.3844  0.1237  0.3908  0.5281
                OPN7_5        0.0059  0.3330  0.5784  0.4694  0.1393
                OPN8_0        0.9716  0.0041  0.0057  0.0029  0.0033
                OPN8_1        0.0070  0.0917  0.2983  0.0808  0.0625
                OPN8_2        0.0046  0.1875  0.0779  0.1646  0.2867
                OPN8_3        0.0090  0.2129  0.2147  0.2223  0.3317
                OPN8_4        0.0052  0.3182  0.1032  0.3189  0.2811
                OPN8_5        0.0026  0.1856  0.3002  0.2105  0.0347
                OPN9_0        0.9678  0.0026  0.0061  0.0033  0.0032
                OPN9_1        0.0044  0.0163  0.0782  0.0132  0.0075
                OPN9_2        0.0032  0.0507  0.0330  0.0532  0.0740
                OPN9_3        0.0078  0.0818  0.1433  0.0988  0.1977
                OPN9_4        0.0072  0.2856  0.0892  0.3438  0.4949
                OPN9_5        0.0096  0.5629  0.6501  0.4877  0.2228
    ============================================================================
    Class weights
    ============================================================================
        Class 1 : 0.00
        Class 2 : 0.30
        Class 3 : 0.11
        Class 4 : 0.31
        Class 5 : 0.28
    ============================================================================
    Fit for 5 latent classes
    ============================================================================
    Estimation method             : 1-step
    Number of observations        : 1013558
    Number of latent classes      : 5
    Number of estimated parameters: 1254
    Log-likelihood (LL)           : -70661699.2234
    -2LL                          : 141323398.4468
    Average LL                    : -69.7165
    AIC                           : 141325906.45
    BIC                           : 141340739.98
    CAIC                          : 141341993.98
    Sample-Size Adjusted BIC      : 141354096.25
    Entropy                       : 131930.9574
    Scaled Relative Entropy       : 0.9191

結果は 設問50問 x 5段階評価(1:disagree -> 5:agree) を行、潜在クラス数を列として出力されているようです。

5段階評価なのに0という回答もあるようです。これはnullとはまた違った未回答ということでしょうか、、
データクレンジングのときに除外しても良さそうでしたね。

今回はお試しなので一旦このまま進めます。

潜在クラス分析した結果の考察

最終的に結果を見て、それぞれのクラスに名前をつけました。

  • class_no0 未回答なので不明タイプ (0.004%)
  • class_no1 引っ込み思案タイプ (29.5%)
  • class_no2 社交的で真面目タイプ (11.1%)
  • class_no3 社交的でマイペースタイプ (30.6%)
  • class_no4 どちらかと言えば社交的なタイプ (28.3%)

基本的に1や5を選択しているのを特徴と捉えて名前づけしています。

class_no4は極端な付け方をしていない(2~4をつけることが多い)タイプでした。優柔不断な側面があるのかも知れません。

class_no2とclass_no3は社交的な部分は似ていますが、class_no2の方が神経質っぽい印象を持ちました。

class_no1は他のタイプとは真逆っぽい回答をしているようです。

Class weightsの出力
lca.get_cw_df()
Out[0]
class_no    0   1   2   3   4
param                   
class_weights   0.004372    0.295141    0.110953    0.305599    0.283936
Measurement parameters
lca.get_mm_df()
Out[0]
    class_no    0   1   2   3   4
model_name  param   variable                    
categorical     pis     AGR10_0     0.96    0.00    0.01    0.00    0.00
AGR10_1     0.00    0.06    0.11    0.01    0.00
AGR10_2     0.01    0.20    0.05    0.03    0.07
AGR10_3     0.01    0.37    0.24    0.15    0.42
AGR10_4     0.01    0.25    0.11    0.43    0.44
...     ...     ...     ...     ...     ...
OPN9_1  0.00    0.02    0.08    0.01    0.01
OPN9_2  0.00    0.05    0.03    0.05    0.07
OPN9_3  0.01    0.08    0.14    0.10    0.20
OPN9_4  0.01    0.29    0.09    0.34    0.49
OPN9_5  0.01    0.56    0.65    0.49    0.22
結果の描画
mm = lca.get_mm_df()

data = mm.iloc[0:30,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[30:60,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[60:90,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[90:120,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[120:150,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[150:180,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[180:210,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[210:240,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[240:270,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()

data = mm.iloc[270:300,1:]
sns.heatmap(data, vmax=1, vmin=-1, center=0, mask = abs(data) < 0.3,linecolor="black",linewidth=0.5, annot=True,annot_kws={"size":8})
plt.show()
Out[0]










スポンサーリンク

まとめ

ここまでクラスタリング、PCA、潜在クラス分析を実施しました。

どれも使いどころを見極めて実施すると分析の幅も広がりそうですね。

タイトルとURLをコピーしました