Stata分析機能例題集
クラスター分析(非階層型)

階層的クラスタ分析と比較して、クラスターの分類数をあらかじめ設定することで圧倒的に計算量を少なく解析することができる非階層的クラスター分析は、データ量の多いビックデータ分析に役立ちます。

この例題でできること

  1. 連続値のデータを用いて、cluster kmeansコマンドを実行できるようになる。
  2. 二値データを用いて、cluster kmediansコマンドを実行できるようになる。

2つの方法は、コマンドは同じように動作しますが、データのタイプが異なります。

クラスター分析(非階層型) 1
クラスター分析(非階層型) 2

Stata評価版

最新バージョンのStataをお持ちでない場合は、無料の体験版でお試しいただけます。

doファイルのダウンロード

今回使用するコマンドをまとめたdoファイルです。zipファイルをダウンロード後に展開(解凍)してください。
doファイルは、Stataのメニューの「ファイル > 開く」で開いて使用します。

PDFファイルのダウンロード

このページの内容はPDFでも配布しております。

例1 cluster kmeansコマンドについて

データの確認

体育の授業で80人の生徒に対して、柔軟性(flexibility)、俊敏性(speed)、力強さ(strength)を計測したとしましょう。
彼らの運動能力を改善する最良のトレーニングを受けさせるため、生徒の運動能力をもとに4つのクラスに分けることを考えます。

下記のコマンドで要約とグラフを表示します。

. use https://www.stata-press.com/data/r17/physed
. summarize flex speed strength

以下の表が表示されます。

cluster kmeansコマンド 1
. graph matrix flex speed strength
cluster kmeansコマンド 2

生徒のパフォーマンスは広い範囲でばらついていることがわかります。
グラフからいくつかの特定のグループが存在しているように見えますが、グループ分けを上手く行うことができそうです。
クラスター分析を実行して、クラスのアシスタントごとに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
cluster kmeansコマンド 3
. table g4abs
cluster kmeansコマンド 4
. list flex speed strength in 81/L, abbrev(12)
cluster kmeansコマンド 5
. drop in 81/L
. tabstat flex speed strength, by(g4abs) stat(min mean max)
cluster kmeansコマンド 6

観測値の最後の4行を確認した後、4つのグループに関する最小値、最大値、平均値を確認することにしました。観測行の最後の4行を除いて、tabstatコマンドで統計量を表示しました。
15人の生徒が含まれるグループ1は、柔軟性と俊敏性が優れており、力強さに関するトレーニングが必要であるとわかりました。
20人の生徒が含まれるグループ2は、特に俊敏性のトレーニングが必要ですが、その他の項目もトレーニングが必要なようです。
生徒が10人しかいない小数のグループ3は、柔軟性と力強さのトレーニングが必要です。
35人の生徒が属する最大のグループ4は、強さは十分ですが、柔軟性と早さの両方に問題を抱えるグループです。
グループ番号をシンボルとしてグラフを生成してみましょう。

. graph matrix flex speed strength, m(i) mlabel(g4abs) mlabpos(0)
cluster kmeansコマンド 7

グラフに示されているように、各グループはかなり明確に分かれて見えます。
しかし、各グループの生徒数がなるべく同じになるようにしたいと考えています。
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)
cluster kmeansコマンド 8
. table g5abs g4abs, totals(g5abs)
cluster kmeansコマンド 9

ポイント

3グループのクラスタリングでは、生徒数を均等にするという問題は悪化してしまいました。
5グループのクラスタリングでは、1つのグループに35人の生徒が属するグループがあり、その他のグループの生徒数よりも多くなっています。
このクラスにおいては4グループが最適であるようです。
4つ目のグループに対してはアシスタントを割当てることを検討しましょう。
この例において4グループを生成するために使用したコマンドにおける乱数の種を変えて、結果を確認したいと思うでしょう。
これらのグループ分けは明確に定義されたものではないため、異なる初期点でクラスター分析を実行することでより良いグループ分けが見つかるかもしれません。

例2 kmediansコマンドについて

データの確認

あなたは、女性クラブを創設しようと考えています。
コミュニティを通して集まった30人の女性が加入の申込みを送ってきました。
スポーツ、音楽、読書、趣味などに関する35問の二択の質問に回答してもらいました。
35問(35変数)に関する要約は下記の通りです。

. use https://www.stata-press.com/data/r17/wclub, clear
. describe
kmediansコマンド「Zheng and Rabe-Hesketh (2007)」 1

クラブの初回打合せを計画する中で、あなたは共通の趣味を持つ女性ごとに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
kmediansコマンド「Zheng and Rabe-Hesketh (2007)」 2

また、kmeansコマンドとkmediansコマンドの初期点として初めのk行を使用するため、オプションst(firstk)を指定します。
各手法で生成したグループはどのくらいのサイズで、結果はどのくらい似ているでしょうか。

. table gr5 kmedian5
kmediansコマンド「Zheng and Rabe-Hesketh (2007)」 3

ポイント

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.

page_top_icon