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)
================================================================================
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の結果を描画
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()

うーん、あんまりきれいに分かれていると言い難いですね。
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. | 私はアイデアに溢れています。 |
データの読み込み
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()
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()
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のデータがありそうです。
df_lca[df_lca.isna().any(axis=1)]
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データがあるようです。
元データを確認してみます。
df.iloc[78795]
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なようです。未回答者がいたということでしょうか?
いらないデータなので除外しようと思います。
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()
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)
================================================================================
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は他のタイプとは真逆っぽい回答をしているようです。
lca.get_cw_df()
class_no 0 1 2 3 4 param class_weights 0.004372 0.295141 0.110953 0.305599 0.283936
lca.get_mm_df()
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()










まとめ
ここまでクラスタリング、PCA、潜在クラス分析を実施しました。
どれも使いどころを見極めて実施すると分析の幅も広がりそうですね。

