体育の授業で80人の生徒に対して、柔軟性(flexibility)、俊敏性(speed)、力強さ(strength)を計測したとしましょう。
彼らの運動能力を改善する最良のトレーニングを受けさせるため、生徒の運動能力をもとに4つのクラスに分けることを考えます。
下記のコマンドで要約とグラフを表示します。
. use https://www.stata-press.com/data/r17/physed
. summarize flex speed strength
以下の表が表示されます。
. graph matrix flex speed strength
生徒のパフォーマンスは広い範囲でばらついていることがわかります。
グラフからいくつかの特定のグループが存在しているように見えますが、グループ分けを上手く行うことができそうです。
クラスター分析を実行して、クラスのアシスタントごとに1つずつ、合計4つのグループを作成することにしました。
あなたは過去にkmeansクラスタリングを行った経験があり、一般的な距離の絶対値が好ましいと思っています。
これまではクラスター分析における初期値について気にしていませんでしたが、今回は分析を再実行した際に同じ結果を再現できるかについても確認したいと考えています。
オプションkrandom()
を指定して、グループの中心の初期点としてランダムにk個の観測値を抽出することにしました。
再現性のために乱数の種を指定します。
また、オプションkeepcenters
を指定して、4つのグループの平均がデータセットの最後に付加されるようにしました。
. cluster k flex speed strength, k(4) name(g4abs) s(kr(385617)) mea(abs) keepcen
. cluster list g4abs
. table g4abs
. list flex speed strength in 81/L, abbrev(12)
. drop in 81/L
. tabstat flex speed strength, by(g4abs) stat(min mean max)
観測値の最後の4行を確認した後、4つのグループに関する最小値、最大値、平均値を確認することにしました。観測行の最後の4行を除いて、tabstatコマンドで統計量を表示しました。
15人の生徒が含まれるグループ1は、柔軟性と俊敏性が優れており、力強さに関するトレーニングが必要であるとわかりました。
20人の生徒が含まれるグループ2は、特に俊敏性のトレーニングが必要ですが、その他の項目もトレーニングが必要なようです。
生徒が10人しかいない小数のグループ3は、柔軟性と力強さのトレーニングが必要です。
35人の生徒が属する最大のグループ4は、強さは十分ですが、柔軟性と早さの両方に問題を抱えるグループです。
グループ番号をシンボルとしてグラフを生成してみましょう。
. graph matrix flex speed strength, m(i) mlabel(g4abs) mlabpos(0)
グラフに示されているように、各グループはかなり明確に分かれて見えます。
しかし、各グループの生徒数がなるべく同じになるようにしたいと考えています。
3グループや5グループでもクラスタリングを行うことを考えました。
理由はありませんが、3グループのクラスタリングにおける初期点として初めのk行を使用し、5グループのクラスタリングにおける初期点としてデータのレンジ内で乱数を生成して使用しました。
. cluster k flex speed strength, k(3) name(g3abs) start(firstk) measure(abs)
. cluster k flex speed strength, k(5) name(g5abs) start(random(33576)) measure(abs)
. table g3abs g4abs, totals(g3abs)
. table g5abs g4abs, totals(g5abs)
3グループのクラスタリングでは、生徒数を均等にするという問題は悪化してしまいました。
5グループのクラスタリングでは、1つのグループに35人の生徒が属するグループがあり、その他のグループの生徒数よりも多くなっています。
このクラスにおいては4グループが最適であるようです。
4つ目のグループに対してはアシスタントを割当てることを検討しましょう。
この例において4グループを生成するために使用したコマンドにおける乱数の種を変えて、結果を確認したいと思うでしょう。
これらのグループ分けは明確に定義されたものではないため、異なる初期点でクラスター分析を実行することでより良いグループ分けが見つかるかもしれません。
あなたは、女性クラブを創設しようと考えています。
コミュニティを通して集まった30人の女性が加入の申込みを送ってきました。
スポーツ、音楽、読書、趣味などに関する35問の二択の質問に回答してもらいました。
35問(35変数)に関する要約は下記の通りです。
. use https://www.stata-press.com/data/r17/wclub, clear
. describe
クラブの初回打合せを計画する中で、あなたは共通の趣味を持つ女性ごとに5つのテーブル席を割り当てたいと考えています。
同じ興味を持つ人たちが同じテーブルとなるように席を配置したいと思います。
全ての変数は二値類似度となっており、共通の要素が占める割合を意味するJaccard
係数を使用することにしました。
また、kmeans
コマンドとkmedians
コマンドによるクラスタリングで生成したグルーピングを調べることにしました。
. cluster kmeans bike-fish, k(5) measure(Jaccard) st(firstk) name(gr5)
. cluster kmed bike-fish, k(5) measure(Jaccard) st(firstk) name(kmedian5)
. cluster list kmedian5
また、kmeans
コマンドとkmedians
コマンドの初期点として初めのk行を使用するため、オプションst(firstk)
を指定します。
各手法で生成したグループはどのくらいのサイズで、結果はどのくらい似ているでしょうか。
. table gr5 kmedian5
cluster kmeans
コマンドとcluster kmedians
コマンドから得られる結果はよく合致しています。
1つのテーブルには8人が快適に座れるため、各グループの人数が5名から7名となっているcluster kmeans
コマンドによって生成されたグルーピングを採用します。
一方、cluster kmedians
コマンドによって生成されたグルーピングは4名から9名のグループとなっています。
Stata is a registered trademark of StataCorp LLC, College Station, TX, USA, and the Stata logo is used with the permission of StataCorp.