井出草平の研究ノート

暴力性の高いゲームを頻繁にプレイする子どもより、プレイ頻度の低い子どもの方が現実世界での暴力性が高い

pubmed.ncbi.nlm.nih.gov https://www.liebertpub.com/doi/full/10.1089/cyber.2020.0049

  • Sarah M. Coyne and Laura Stockdale, 2021, Growing Up with Grand Theft Auto: A 10-Year Study of Longitudinal Growth of Violent Video Game Play in Adolescents, Cyberpsychology, Behavior, and Social. Vol. 24, No. 1.

10年間にわたる暴力的なビデオゲームのプレイの軌跡、予測因子、および結果を調べた研究。潜在曲線モデルを使用し、暴力的ゲームのプレイ頻度で3つのグループが析出された。

クラス1. 初期から暴力的ゲームのプレイ頻度の高い群 4%
クラス2. 中等度 23%
クラス3. 低増加群 73%

最終時点で波で最も高いレベルの攻撃的行動を示していたのは、クラス2。暴力的ゲームをもともと高頻度でやっていたグループの方が暴力性が高いことが予想されていたが、結果は、逆であった。
クラス1とクラス2は男性の割合が高く、当初はクラス1で抑うつ状症状が高いが、改善されていった。最終時点での向社会的行動については、3群間で差はなかった。

ゲームの暴力度合い

参加者は、好きなビデオゲームを3つ挙げ、それぞれのゲームのプレイ頻度を1(あまり頻繁ではない)から5(非常に頻繁である)の間で評価した。11波で合計789本のゲームが挙げられました。各ゲームには、データのあるところでは、0(暴力なし)から5(極度の暴力)までのリッカート尺度で暴力評価をつけた(N = 511)。評価は、メディアコンテンツコーディングサイト「Common Sense Media」のスコアリングを用いた。

子どもの攻撃性

子どもの攻撃的な行動はWeinberger, Schwartz, and Davidsonから引用した5つの項目で評価した。「私は怒ったときに物理的な力を使う」などの項目がある。

抑うつ症状

思春期のうつ症状は、20項目からなる自己申告式のCES-DC(Center for Epidemiologic Studies Depression Scale for Children)を用いて評価した。

不安症状

子どもの不安は,Spence Child Anxiety Inventoryの6項目からなる全般性不安障害サブスケールを用いて評価した。

社会的行動

見知らぬ人に対する社会的行動は「Inventory of Strengths」 に基づいた5つの項目を用いて測定。

分析

暴力的なビデオゲームのプレイ時間の成長曲線モデルを検討した。

f:id:iDES:20210410175428j:plain

図2は,各クラスの成長の軌跡を示し,表3は各クラスの成長パラメータを示している。

f:id:iDES:20210410175438j:plain

クラス1

4%、n=19。非常に高い切片を示していることから、当初から暴力的ゲームの頻度が高かった。その後、減少し、最終波で増加している。このクラスを "初期暴力度が高い群High Initial Violence "と呼ぶ。

クラス2

23%、n=99、中程度の切片を持ち、クラス1と同様の曲線パターンを示し、最終波ではクラス1とほぼ同じレベルで終わった。ここでは、クラス2を "中等度群Moderates "と呼ぶ。

クラス3

73%、n=316。初期のビデオゲーム・バイオレンスのレベルが低く、時間の経過とともにわずかに増加した。このクラスを "低増加群Low Increasers"と呼ぶ。

次に、Mplus(v8.3)を用いた3段階のアプローチ(three-step approach)により、暴力的なビデオゲームのプレイの変化パターンの予測因子と、パターンごとのアウトカム変数の違いを調べた。予測因子は、生物学的性別、攻撃性、向社会的行動、抑うつ、不安である。

予測因子については、「初期暴力度が高い」グループは、「中等度群」(β=1.90、p=0.05)および「低増加群」(β=2.53、p=0.007)と比較して、男児に多く見られた。さらに、「低増加群」に比べて「中等度群」には男の子が多く含まれていた(β=0.63、p=0.03)。「初期暴力度が高い」グループは、「中等度」(β=2.20、p=0.02)と「低増加群」グループ(β=1.79、p=0.04)の両方に比べて初期抑うつ度が高かったが、不安度は低かった(それぞれβ=-3.60、p=0.003、β=3.52、p=0.002)。生物学的性別以外では、「中等度群」と「低増加群」の間に有意な差はなかった。

アウトカムでは最終波での向社会的行動、抑うつ、不安には差はなかった。しかし、「中等度群」は、「初期暴力度が高い群」(χ2=22.55、p<0.001)、「初期暴力度が高い群」(χ2=24.57、p<0.001)に比べて、攻撃性が有意に高かった。

議論

クラス1 初期暴力度が高い群

4%と最も小さいグループである。
途中で暴力的ゲームが減少したのはこのパターンは、親などが介入をしたためではないか。
思春期初期に抑うつ症状が高かったが、不安は低かった。このグループは、暴力的なビデオゲームを利用して、抑うつ症状を管理したり対処したりしていた可能性がある。
これまでの研究では、メンタルヘルスの問題への対処や気晴らしとしてビデオゲームをプレイすることは効果的である可能性が示されているが28,29、これらの研究ではプレイしたビデオゲームの内容については考慮されていない。
このグループは、最初の時点で、他のグループに比べて攻撃的行動や向社会的行動のレベルが高くなく、攻撃的な青少年が特に暴力的なビデオゲームを求めることを示唆するいくつかの研究に反していた32。

  • 28.Ferguson CJ, Trigani B, Pilato S, et al. Violent video games don't increase hostility in teens, but they do stress girls out. Psychiatric Quarterly 2016: 87:49–56.

  • 29.Loton D, Borkoles E, Lubman D, et al. Video game addiction, engagement and symptoms of stress, depression and anxiety: the mediating role of coping. International Journal of Mental Health and Addiction 2016; 14:565–578.

  • 32.Breuer J, Vogelgesang J, Quandt T, et al. Violent video games and physical aggression: evidence for a selection effect among adolescents. Psychology of Popular Media Culture 2015; 4:305.

クラス2 中等度群

23%のグループ。
理論的には、「初期の暴力度が高い」グループが最も攻撃性が高いはずなので、これはやや直感に反する結果である。実際、この2つのグループは、最終波でのビデオゲームのプレイ状況は同じだったが、中程度のグループの方が攻撃性のレベルが明らかに高かった。

クラス3 低増加群

73%のグループ。
他のグループと比較して、行動および精神的健康の予測因子と結果が最も健全なパターンを示した。このグループは、最終的な時点で、初期の暴力度が高いグループよりも攻撃的な行動が高くなかったことから、暴力的なビデオゲームのプレイレベルが低く、わずかに増加しても、時間の経過とともに攻撃的な行動が増加することとは関係がないことが示唆された。

雑感

潜在クラス分析では5%以下のクラスはあまり当てにならないとする傾向がある。統計学的に根拠があるわけではないが、クラス1の割合が少なすぎる気もする。暴力的なゲームで特徴的なプレイスタイルをとる子どもが数パーセントしかいないので、このような分析にならざるを得ないのだろう。

仮に2つのクラスに分けた場合、クラス1とクラス2が合併されるため、暴力的なゲームをする子ほど暴力的行動をしがちとなる。潜在クラスが2クラスの場合には、従来の重回帰と本質的には同じ分析をしていることになるため、クラスを3つ以上作成する必要がある。そういう意味では、3つ以上のグループ作成には合理的な根拠がある。

分析ではthree-step approachを行っているところが少し気になった。潜在成長モデルにする場合には、現状はthree-step approachをすることになるのだろうが、理論的にはBCH法を拡張すれば同時分析ができるはずである。Mplusは対応してないのだろうか。

先行研究

暴力的なビデオゲームのプレイと、うつ病5や不安との関連性が指摘されている6。

  • 5.Allahverdipour H, Bazargan M, Farhadinasab A, et al. Correlates of video games playing among adolescents in an Islamic country. BMC Public Health 2010; 10:1–7.
  • 6.Baldaro B, Tuozzi G, Codispoti M, et al. Aggressive and non-violent videogames: short-term psychological and cardiovascular effects on habitual players. Stress and Health: Journal of the International Society for the Investigation of Stress 2004; 20:203–208.

実験的研究では、暴力的なビデオゲームのプレイとうつ病との間に関連性があるという証拠はほとんどないことが示唆されている15。 - 15.Ferguson CJ, Rueda SM. The hitman study: violent video game exposure effects on aggressive behavior, hostile feelings, and depression. European Psychologist 2010; 15:99–108.

暴力的なビデオゲームのプレイは、実験室内での攻撃性の増加に関連している可能性があるものの、現実の暴力7や暴力犯罪の有意な予測因子ではないことを示している8。

  • 7.Valadez JJ, Ferguson CJ. Just a game after all: violent video game exposure and time spent playing effects on hostile feelings, depression, and visuospatial cognition. Computers in Human Behavior 2012; 28:608–616.
  • 8.Ferguson CJ, Rueda SM, Cruz AM, et al. Violent video games and aggression: causal relationship or byproduct of family violence and intrinsic violence motivation? Criminal Justice and Behavior 2008; 35:311–332.

対人暴力や交際暴力を対象とした縦断的研究では、暴力的なビデオゲームのプレイと暴力の増加との間に関連性は見られなかった14。

  • 14.Ferguson CJ, Miguel CS, Garza A, et al. A longitudinal test of video game violence influences on dating and aggression: a 3-year longitudinal study of adolescents. Journal of Psychiatric Research 2012; 46:141–146.

小児のADHDと成人のADHDは同じものなのか?

link.springer.com

アラン・アプターAlan Apterによって2018年に書かれたエディトリアル。

注意欠如多動性障害(ADHD)は、小児期に発症し、成人期まで持続する神経発達精神障害であり、男性に多く見られるという仮説が広く浸透している。例えば、あるメタアナリシスでは、小児期ADHDの重症度、小児期ADHDに併存する行動障害の治療、併存する大うつ病性障害が成人期ADHDを予測することがわかっている(Caye et al. [1]、[2])。最近、Moffit et al. [3]は、この公理に疑問を投げかける有名なダニーデンスタディの結果を報告した。彼らは、ADHDの小児期の発症率は6%で、男性に多く、精神疾患、神経認知障害が併存し、遺伝子多型リスクがあり、成人してからも障害が残ると報告している。また、成人におけるADHDの発症率は3%で、物質依存や精神科治療の必要性を伴うと報告している。これらの結果は、この疾患に対する一般的な見解に沿ったものであった。全く予想外だったのは、小児期ADHD群と成人期ADHD群が「実質的に重複しない集合を構成しており、成人期ADHD症例の90%は小児期ADHDの病歴を持たない」ということであった。また、「大人のADHD群では、小児期や成人期に神経心理学的な障害が見られず、小児期ADHDの多遺伝子リスクも見られなかった」。著者らは、成人のADHDは小児期に発症する神経発達障害ではない可能性があると結論づけている。この結論は、さらなる証拠によって裏付けられれば、ADHDの概念に対する我々の理解を大きく変えることになるだろう。Castellanos[4]は、Firesign Theatreの「Everything you know is wrong(あなたが知っていることはすべて間違っている)」という言葉を引用して、New York Longitudinal Studyから得られた追加の証拠を紹介している。これによると、成人期の脳構造の違い(灰白質/皮質の減少)は、成人の診断状態よりも小児期の診断を反映しており、成人期発症のADHDと小児期発症のADHDは別のものである可能性が示唆されている。これは、子供のADHDと親のADHDまたはADHDの症状との家族的な関連性についての数多くの報告(例えば、Wesseldijk et al.[5])とは容易に折り合いがつかず、さらに、このことは影響を受けた母親の治療に取り組むことで治療レベルにまで拡大されている(Häge et al.[6])。
このような観点から見ると、本誌に掲載されたSabina Millinetと共同研究者による論文[7]は、特に関連性が高いと思われる。彼らは、Moffitの結果は、注意欠如症状の特徴を示すために自己報告を用いていることで説明できると主張している。「利用可能な文献はこれまでのところ限られているが、既存の研究の結果は、ADHD症状の自己報告は親の報告に比べて情報価値が低いこと、あるいはむしろ親が報告したADHD症状は自己報告した症状に比べて認知神経生理学的相関との高い関連性を示すことを示唆している」と述べています。また、ADHDの症状の連続性と不連続性には、男女差があるかもしれない。彼らは、乳幼児期から成人期までの早期危険因子の結果を調べる疫学的コホート研究であるMannheim Study of Children at Riskから得た独自の縦断的サンプルに基づいて主張している。この研究では、生後3カ月の時点で最初の検査を行った後、発達段階に応じて定期的に検査が行われた。本研究では、4.5歳、8歳、11歳、15歳、19歳、22歳、23歳、25歳の時点で実施された評価のデータを使用した。この研究では、4.5歳、8歳、11歳、15歳、19歳、22歳、23歳、25歳の時点で行われた評価のデータを使用し、親と被験者の両方の報告書を利用した。このADHDの軌跡に関する縦断的研究では、小児期ADHDと診断された女性は、小児期ADHDと診断されていない女性に比べて、15歳時点で自己評価によるADHD症状が有意に多く、この差は若年成人期にも持続することが示された。さらに、成人女性では、内在化障害ではなく、小児期にADHD(およびCD/ODD)と診断されたことが、自己申告のADHDを有意に予測した。さらに、15歳の時点で、小児期にADHDの診断を受けたことがある女子とない女子では、両親が自分を正常と評価しているかどうかに違いがあることがわかった。小児期にADHDの診断を受けたことがある女子は、診断を受けていない女子よりもADHDの症状を多く報告していた。しかし、15歳の時点で両親がADHDの症状を訴えている女子には、同様の効果は見られなかった。男性ではこのようなことはなかった。男性では、どの予測因子も25歳時点での自己申告によるADHD症状を有意に予測しなかった。
このように、男性にはMoffitの結果を支持する意見があるかもしれないが、女性にはない。このような性差は、注意欠如障害の症状の発達における基本的な生物学的差異の結果である可能性が高い。しかし、男性と女性の間の精神病理学の自己報告の文化的な違いや、ADHD症状に対するニュージーランドとドイツの寛容さの違いによるものかもしれない。いずれにしても、注意欠如障害を特徴づけるためにDSMが採用している記述的診断法には、本質的な問題があることを見失ってはならない。自己申告であれ、情報提供者の申告であれ、その症状は必ずしも信頼できるものではなく、妥当なものでもない。
最終的な目標は、客観的で信頼性の高い、生物学的に基づいたADHDの分類を開発することだが、残念ながらその目標はいまだに達成されていない。

References
1.Caye A, Spadini AV, Karam RG, Grevet EH, Rovaris DL, Bau CH, Rohde LA, Kieling C (2016) Predictors of persistence of ADHD into adulthood: a systematic review of the literature and meta-analysis. Eur Child Adolesc Psychiatry 25(11):1151–1159

2.van Lieshout M, Luman MT, Wisk JW, van Ewijk H, Groenman AP, Thissen AJ, Faraone SV, Heslenfeld DJ, Hartman CA, Hoekstra PJ, Franke B, Buitelaar JK, Rommelse NN, Oosterlaan J (2016) A 6-year follow-up of a large European cohort of children with attention-deficit/hyperactivity disorder-combined subtype: outcomes in late adolescence and young adulthood. Eur Child Adolesc Psychiatry 25:1007–1017. https://doi.org/10.1007/s00787-016-0820-y

3.Moffitt TE, Houts R, Asherson P, Belsky DW, Corcoran DL, Hammerle M, Harrington H, Hogan S, Meier MH, Polanczyk GV, Poulton R, Ramrakha S, Sugden K, Williams B, Rohde LA, Caspi A (2015) Is adult ADHD a childhood-onset neurodevelopmental disorder? Evidence from a four-decade longitudinal cohort study. Am J Psychiatry 172(10):967–977

4.Castellanos FX (2015) Is adult-onset ADHD a distinct entity? Am J Psychiatry 172(10):929–931

5.Wesseldijk LW, Dieleman GC, van Steensel FJA, Bartels M, Hudziak JJ, Lindauer RJL, Bögels SM, Middeldorp CM (2018) Risk factors for parental psychopathology: a study in families with children or adolescents with psychopathology. Eur Child Adolesc Psychiatry. https://doi.org/10.1007/s00787-018-1156-6 (Epub ahead of print)

6.Häge A, Alm B, Banaschewski T, Becker K, Colla M, Freitag C, Geissler J, von Gontard A, Graf E, Haack-Dees B, Hänig S, Hennighausen K, Hohmann S, Jacob C, Jaite C, Jennen-Steinmetz C, Kappel V, Matthies S, Philipsen A, Poustka L, Retz W, Rösler M, Schneider-Momm K, Sobanski E, Vloet TD, Warnke A, Jans T (2018) Does the efficacy of parent-child training depend on maternal symptom improvement? Results from a randomized controlled trial on children and mothers both affected by attention-deficit/hyperactivity disorder (ADHD). Eur Child Adolesc Psychiatry. https://doi.org/10.1007/s00787-018-1109-0 (Epub ahead of print)

7.Millenet S, Laucht M, Hohm E et al (2018) Sex-specific trajectories of ADHD symptoms from adolescence to young adulthood. Eur Child Adolesc Psychiatry. https://doi.org/10.1007/s00787-018-1129-9

各自治体のギャンブル依存症対策にネット・ゲームが紛れ込んでいる件

都道府県レベルでギャンブル依存症への対策について支援計画などがでているが、そこにゲームとネットが紛れ込んでいるらしい。

基になっている法律は「ギャンブル等依存症対策基本法」(平成三十年法律第七十四号)である。

ギャンブル等依存症対策基本法
https://elaws.e-gov.go.jp/document?lawid=430AC1000000074

第二条 この法律において「ギャンブル等依存症」とは、ギャンブル等(法律の定めるところにより行われる公営競技、ぱちんこ屋に係る遊技その他の射幸行為をいう。第七条において同じ。)にのめり込むことにより日常生活又は社会生活に支障が生じている状態をいう。

「ギャンブル等(法律の定めるところにより行われる公営競技、ぱちんこ屋に係る遊技その他の射幸行為をいう。第七条において同じ。)」と書いてあるので、ネットやゲームは含まれないはずである。

徳島県ギャンブル等依存症対策推進計画

www.pref.tokushima.lg.jp

5 ギャンブル等への依存がもたらす影響
スマホゲームでもランダムにアイテムを入手するために課金することが、ギャンブル等のきっかけとなることが考えられます。このような状況がさらに進むと、借金や欠勤、犯罪など本人のみならず家族や友人、職場などの周囲の人々にも影響が広がる恐れがあります。
<具体的な取組>
【学校】
高等学校、特別支援学校において、保健教育等の時間を活用し、行き過ぎたギャンブル等への傾倒がもたらす悪影響についての啓発や、ゲーム・インターネット等のプロセスへの依存についての理解を促進。特に、課金を伴うオンラインゲームの過度の利用がギャンブル等依存症につながる危険性についての啓発

横浜市依存症対策地域支援計画(仮称)素案

www.city.yokohama.lg.jp

 まず「特定の物質に対する依存症」には、アルコールや薬物(合法の薬剤含む)のほか、たばこ(ニコチン)などの嗜好品への依存などが見られます。また、「特定の行動に対する依存症」には、ギャンブル等のほか、買い物、インターネット利用、性行為、窃盗などへの依存が見られます。いずれも、依存することによって日常生活や健康に問題が生じているにもかかわらず、自らコントロールできない状態に陥っている点が共通しています
 「特定の行動に対する依存症」の中で、近年注目が集まっているものが、ゲームに対する依存症、いわゆる「ゲーム障害」です。ゲームに熱中して生活リズムが乱れてしまう、学校や職場でもゲームをしてしまう、といった日常生活上の問題のほか、オンラインゲーム等で過度の課金を行ってしまうといった経済的な問題等も合わせて発生する場合もあることがゲーム障害の特徴として指摘されています。こうしたことから、令和元年5月に、WHO(世界保健機関)はゲーム障害を精神疾患の一つとして位置付け、我が国においても厚生労働省を中心として令和2年2月に「ゲーム依存症対策関係者連絡会議」が開催されるなど、対策に向けた取組が進められています。
(ア) ゲーム利用に関する状況
 「横浜市娯楽と生活習慣に関する調査」の結果によると、年齢が若いほど1日の平均ゲーム利用時間が長くなる傾向が見られます。
(1)総合的な依存症対策の取組
○ゲーム障害に関して、ゲームを開始する年齢に合わせた正しい理解と適切な付き合い方について、小中学校等と連携して普及啓発を実施します

「神奈川県ギャンブル等依存症対策推進計画(仮称)」素案に関する意見募集の結果について

www.pref.kanagawa.jp

さらに、オンラインゲームの課金(※1)は、ギャンブル等依存症の射幸性と似通った性質があることや、子どもは脳の発達が未成熟なため依存になりやすいことから、子どもや保護者等に対し、学校教育も含めて、依存症に対する正しい知識の普及を図っていく必要があります。
※1 オンラインゲームの「ガチャ」の危険性
スマートフォン等を使ったオンラインゲームには、ゲームを有利に進めるために1回数百円程度のくじを引いて、ゲーム内で用いるアイテムを得ることができる「ガチャ」と呼ばれるシステムがあるものがあります。 「ガチャ」は、ギャンブル等と同じように射幸性が高く、ガチャからギャンブル等へつながる危険性もあるため、子どもがゲームからギャンブル等に誘導されないように、注意する必要があります。(「「ギャンブル等依存症」などを予防するために」文部科学省から引用)

<ネット依存等に関する正しい知識の普及> 青少年や保護者に対して、インターネットの長時間利用やゲーム課金の危険性について、普及啓発に取り組みます。 <出前講座の実施> 県内小学校、中学校及び青少年関係団体等の要請に基づき、ゲーム及びSNSの長時間利用やゲーム課金の危険性を啓発する出前講座を実施します。

北海道ギャンブル等依存症対策推進計画

www.pref.hokkaido.lg.jp

近年は、インターネットを介して、公営競馬等にアクセスできるようになり、未成年者の年齢制限等が課題となっているほか、ゲームやインターネットといった特定の行為や過程に必要以上に熱中し、のめり込んでしまう「プロセスへの依存」が認識されてきているとともに、インターネットでのゲームに勝つために課金を繰り返す問題もでてきており、今回の国際診断基準の改訂(ICD-11)では「ゲーム障害」という新たな診断カテゴリーができています。

PCゲームの歴史を変えた「沙織事件」(第69回)- 栗下善行

ameblo.jp

当時、無修正グラフィックのソフト自体は他にもあったようですが、1991年、京都の男子中学生がこのゲームを万引する事件が起きたことによって、その内容についても世論の批判の矢面に立たされることになりました。これが、「沙織事件」です。
「沙織」の販売元であるフェアリーテールにおいても刑法175条わいせつ物頒布等の罪で逮捕者が出るなど、事態は深刻化していきますが、他にもそういったソフトがある中で、偶然(故意の可能性も否定できませんが)スポットライトが当たってしまったものが徹底的に摘発されるというのは、マンガ規制における松文館事件のようなもので、現在においては大きな問題になりかねないのではないかと個人的には感じます。

Rでクラスター分析[R]

Gabriel Martosさんによる解説より。

rstudio-pubs-static.s3.amazonaws.com

Rを使ってクラスター分析を行う方法を学ぶ。データセットwinsを使用するために,ライブラリrattleをロードする。

library(rattle)
data(wine, package='rattle')
head(wine)
  Type Alcohol Malic  Ash Alcalinity Magnesium Phenols Flavanoids Nonflavanoids Proanthocyanins Color  Hue Dilution Proline
1    1   14.23  1.71 2.43       15.6       127    2.80       3.06          0.28            2.29  5.64 1.04     3.92    1065
2    1   13.20  1.78 2.14       11.2       100    2.65       2.76          0.26            1.28  4.38 1.05     3.40    1050
3    1   13.16  2.36 2.67       18.6       101    2.80       3.24          0.30            2.81  5.68 1.03     3.17    1185
4    1   14.37  1.95 2.50       16.8       113    3.85       3.49          0.24            2.18  7.80 0.86     3.45    1480
5    1   13.24  2.59 2.87       21.0       118    2.80       2.69          0.39            1.82  4.32 1.04     2.93     735
6    1   14.20  1.76 2.45       15.2       112    3.27       3.39          0.34            1.97  6.75 1.05     2.85    1450

このデータセットでは、異なるワインの組成を観察している。各観察がd次元の実数ベクトルである観察セット(x1,x2,..,xn)が与えられたとき,k-meansクラスタリングは,クラスタ内二乗和(WCS)を最小化するように,n個の観察(k≤n)S={S1,S2,...,Sk}に分割することを目的とするのがクラスター分析である。言い換えればを見つけることである。

f:id:iDES:20210325014222p:plain

ここで、μ_iはS_iの点の平均値である。クラスタリング最適化問題はRの関数kmeansを用いて解く。

wine.stand <- scale(wine[-1])  # 変数を標準化させる
# K-Means
k.means.fit <- kmeans(wine.stand, 3) # k = 3

k.means.fitには、クラスタ出力のすべての要素が含まれている。

attributes(k.means.fit)
$names
[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"      

$class
[1] "kmeans"
## 中央値
k.means.fit$centers
     Alcohol      Malic        Ash Alcalinity   Magnesium     Phenols  Flavanoids Nonflavanoids Proanthocyanins      Color        Hue   Dilution    Proline
1  0.8328826 -0.3029551  0.3636801 -0.6084749  0.57596208  0.88274724  0.97506900   -0.56050853      0.57865427  0.1705823  0.4726504  0.7770551  1.1220202
2  0.1644436  0.8690954  0.1863726  0.5228924 -0.07526047 -0.97657548 -1.21182921    0.72402116     -0.77751312  0.9388902 -1.1615122 -1.2887761 -0.4059428
3 -0.9234669 -0.3929331 -0.4931257  0.1701220 -0.49032869 -0.07576891  0.02075402   -0.03343924      0.05810161 -0.8993770  0.4605046  0.2700025 -0.7517257
## クラスター
k.means.fit$cluster
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 2 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3
 [83] 3 2 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 1 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[165] 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## クラスターサイズ
k.means.fit$size
[1] 62 51 65

基本的な問題は、どのようにしてパラメータkの値を決定するかということである。説明された分散の割合をクラスタ数の関数として見てみよう。別のクラスターを追加してもデータのモデリングがあまり良くならないようなクラスター数を選ぶべきである。より正確には、クラスターによって説明される分散の割合をクラスターの数に対してプロットすると、最初のクラスターは多くの情報を追加するが(多くの分散を説明する)、ある時点で差益marginal gainが下がり、グラフに角度がつく。クラスタの数はこの時点で選択されるため「エルボー基準elbow criterion」と呼ばれている。

wssplot <- function(data, nc=15, seed=1234){
  wss <- (nrow(data)-1)*sum(apply(data,2,var))
  for (i in 2:nc){
    set.seed(seed)
    wss[i] <- sum(kmeans(data, centers=i)$withinss)}
  plot(1:nc, wss, type="b", xlab="Number of Clusters",
       ylab="Within groups sum of squares")}

wssplot(wine.stand, nc=6) 

f:id:iDES:20210325014236p:plain

clusterパッケージでは(PCAの助けを借りて)クラスターソリューションを2次元に表現することができる。

library(cluster)
clusplot(wine.stand, k.means.fit$cluster, main='2D representation of the Cluster solution',
         color=TRUE, shade=TRUE,
         labels=2, lines=0)

f:id:iDES:20210325014437p:plain

クラスタリングの性能を評価するために、混同行列を作成する。

table(wine[,1],k.means.fit$cluster)

階層型クラスタリング

階層型クラスタリングでは,クラスタリングアルゴリズムの入力として距離行列を使用する。ある距離では互いに近く、別の距離では遠くなる要素があるため、適切な指標の選択はクラスタの形状に影響を与える。

d <- dist(wine.stand, method = "euclidean") # ユークリッド距離行列

クラスタリングアルゴリズムの入力として、ユークリッド距離を使用する。(Wardの最小分散基準は、クラスタ内の分散の合計を最小化する)。

H.fit <- hclust(d, method="ward")

ward "メソッドは "ward.D "に改名されている。新しい "ward.D2 "に注意。

クラスタリングの結果をデンドログラムで表示することができる。

plot(H.fit) # デンドログラムを表示
groups <- cutree(H.fit, k=3) # ツリーを3つのクラスターに分割
# 3つのクラスターを赤い枠で囲んだデンドグラムを作成
rect.hclust(H.fit, k=3, border="red") 

f:id:iDES:20210325014507p:plain

以下のような混同行列を用いて評価される。

table(wine[,1],groups)
   groups
     1  2  3
  1 58  1  0
  2  7 58  6
  3  0  0 48

研究事例 I: ヨーロッパのタンパク質消費量

ヨーロッパの25カ国(n=25台)と主要な9つの食品からのタンパク質摂取量(単位:%)を検討する(p=9)。データは以下の通りです。

url = 'http://www.biz.uiowa.edu/faculty/jledolter/DataMining/protein.csv'
food <- read.csv(url)
head(food)
         Country RedMeat WhiteMeat Eggs Milk Fish Cereals Starch Nuts Fr.Veg
1        Albania    10.1       1.4  0.5  8.9  0.2    42.3    0.6  5.5    1.7
2        Austria     8.9      14.0  4.3 19.9  2.1    28.0    3.6  1.3    4.3
3        Belgium    13.5       9.3  4.1 17.5  4.5    26.6    5.7  2.1    4.0
4       Bulgaria     7.8       6.0  1.6  8.3  1.2    56.7    1.1  3.7    4.2
5 Czechoslovakia     9.7      11.4  2.8 12.5  2.0    34.3    5.0  1.1    4.0
6        Denmark    10.6      10.8  3.7 25.0  9.9    21.9    4.8  0.7    2.4

まず赤肉と白肉だけでクラスタリングを行い(p=2)、k=3のクラスタを作成する。

set.seed(123456789) ## ランダムな開始クラスタを固定
grpMeat <- kmeans(food[,c("WhiteMeat","RedMeat")], centers=3, nstart=10)
grpMeat
K-means clustering with 3 clusters of sizes 12, 5, 8

Cluster means:
  WhiteMeat   RedMeat
1  4.658333  8.258333
2  9.000000 15.180000
3 12.062500  8.837500

Clustering vector:
 [1] 1 3 2 1 3 3 3 1 2 1 3 2 1 3 1 3 1 1 1 1 2 2 1 3 1

Within cluster sum of squares by cluster:
[1] 69.85833 35.66800 39.45750
 (between_SS / total_SS =  75.7 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"  
## クラスター割り当てリスト
o=order(grpMeat$cluster)
data.frame(food$Country[o],grpMeat$cluster[o])
   food.Country.o. grpMeat.cluster.o.
1          Albania                  1
2         Bulgaria                  1
3          Finland                  1
4           Greece                  1
5            Italy                  1
6           Norway                  1
7         Portugal                  1
8          Romania                  1
9            Spain                  1
10          Sweden                  1
11            USSR                  1
12      Yugoslavia                  1
13         Belgium                  2
14          France                  2
15         Ireland                  2
16     Switzerland                  2
17              UK                  2
18         Austria                  3
19  Czechoslovakia                  3
20         Denmark                  3
21       E Germany                  3
22         Hungary                  3
23     Netherlands                  3
24          Poland                  3
25       W Germany                  3

クラスタリングソリューションをグラフィカルに表現するために、赤肉と白肉のクラスタ割り当てを散布図にプロットする。

plot(food$Red, food$White, type="n", xlim=c(3,19), xlab="Red Meat", ylab="White Meat")
text(x=food$Red, y=food$White, labels=food$Country,col=grpMeat$cluster+1)

f:id:iDES:20210325014311p:plain

次に、9つのタンパク質グループすべてをクラスター化し、7つのクラスターを作成するようにプログラムを準備する。
できあがったクラスターは、白肉と赤肉の散布図に色で示されていますが(他の特徴のペアを選択することもできる)理にかなっている。地理的に近接した国は、同じグループに分類される傾向がある。

## 同じ分析をするが、今度は全てのタンパク質グループにクラスタリングを行う
## タンパク質グループのクラスタ数を7に変更
set.seed(123456789)
grpProtein <- kmeans(food[,-1], centers=7, nstart=10)
o=order(grpProtein$cluster)
data.frame(food$Country[o],grpProtein$cluster[o])
   food.Country.o. grpProtein.cluster.o.
1          Denmark                     1
2          Finland                     1
3           Norway                     1
4           Sweden                     1
5          Austria                     2
6        E Germany                     2
7      Netherlands                     2
8        W Germany                     2
9         Portugal                     3
10           Spain                     3
11  Czechoslovakia                     4
12         Hungary                     4
13          Poland                     4
14        Bulgaria                     5
15         Romania                     5
16      Yugoslavia                     5
17         Belgium                     6
18          France                     6
19         Ireland                     6
20     Switzerland                     6
21              UK                     6
22         Albania                     7
23          Greece                     7
24           Italy                     7
25            USSR                     7
library(cluster)
clusplot(food[,-1], grpProtein$cluster, main='2D representation of the Cluster solution', color=TRUE, shade=TRUE, labels=2, lines=0)

f:id:iDES:20210325014259p:plain

また、階層的なアプローチを行うこともできる。ここでは、clusterパッケージのagnes関数を使用する。引数 diss=FALSEは、生データから計算される非類似度行列を使用することを示す。引数 metric="euclidian" は、ユークリッド距離を使用することを示す。標準化は使用せず、リンク関数は「平均average」である。

foodagg=agnes(food,diss=FALSE,metric="euclidian")
plot(foodagg, main='Dendrogram') ## デンドログラム

f:id:iDES:20210325014526p:plain f:id:iDES:20210325014535p:plain

groups <- cutree(foodagg, k=4) # ツリーを4つに切り分ける
rect.hclust(foodagg, k=4, border="red")

f:id:iDES:20210325014547p:plain

スタディケースII:顧客セグメンテーション

顧客セグメンテーションとは、簡単に言えば、顧客をその特徴によってグループ化することである。ここでは、Eメールマーケティングを例に説明する。こちらのリンクからデータセットを使用している。

offers<-read.csv("offers.csv", sep = ",", header=T)
head(offers)
  OfferID Campaign           Varietal MinimumQt Discount      Origin PastPeak
1       1  January             Malbec        72       56      France    FALSE
2       2  January         Pinot Noir        72       17      France    FALSE
3       3 February          Espumante       144       32      Oregon     TRUE
4       4 February          Champagne        72       48      France     TRUE
5       5 February Cabernet Sauvignon       144       44 New Zealand     TRUE
6       6    March           Prosecco       144       86       Chile    FALSE
transactions <- read.csv("transactions.csv", sep = ",", header=T)
head(transactions)
  CustomerLastName OfferID
1            Smith       2
2            Smith      24
3          Johnson      17
4          Johnson      24
5          Johnson      26
6         Williams      18

ステップ1:情報の整理

1つはオファー用、もう1つはトランザクション用の2つのデータセットがある。まず必要なのは、取引マトリックスの作成である。つまり、郵送したオファーを、各顧客の取引履歴の横に並べる必要があります。これは、ピボットテーブルで簡単に実現できます。

# トランザクションマトリクス(Excelのようなピボットテーブル)の作成
library(reshape)
pivot<-melt(transactions[1:2])
pivot<-(cast(pivot,value~CustomerLastName,fill=0,fun.aggregate=function(x) length(x)))
pivot<-cbind(offers,pivot[-1])

# write.csv(file="pivot.csv",pivot) # データ保存

cluster.data<-pivot[,8:length(pivot)]
cluster.data<-t(cluster.data)
head(cluster.data)
         1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Adams    0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  1  1  0  0
Allen    0 0 0 0 0 0 0 0 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0
Anderson 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  1  0  0  0  0  0  0
Bailey   0 0 0 0 0 0 1 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0
Baker    0 0 0 0 0 0 1 0 0  1  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  1  0
Barnes   0 0 0 0 0 0 0 0 0  1  0  0  0  0  0  0  0  0  0  0  1  1  0  0  0  0  0  0  0  0  1  0

クラスタリングのデータセットでは、行は顧客を、列は異なるワインのブランドやタイプを表している。

ステップ2:距離とクラスタ

ここではk=4とし、4つのクラスターを使用することを示す。これは多少恣意的なものだが、選ぶ数はビジネスとして扱えるセグメントの数を代表するものでなければなりません。つまり、100個のセグメントはEメールマーケティングキャンペーンとしては意味がない。

各顧客がクラスタの平均値からどれだけ離れているかを計算する必要がある。これには多くの距離/非類似度インデックスを使用できるが、その1つにGower's dissimilarityがある。

library(cluster)
D=daisy(cluster.data, metric='gower')

距離行列を作成した後、Ward's hierarchical clusteringの手順を実行する。

H.fit <- hclust(D, method="ward")
plot(H.fit) # デンドログラムの表示

groups <- cutree(H.fit, k=4) # ツリーを4つに切り分ける

# 4つのクラスターを赤い枠で囲んだデノグラムを描く
rect.hclust(H.fit, k=4, border="red") 

f:id:iDES:20210325014607p:plain

# セグメンテーションの2D表示:
clusplot(cluster.data, groups, color=TRUE, shade=TRUE,
         labels=2, lines=0, main= 'Customer segments')

f:id:iDES:20210325014624p:plain

上位の取引を得るためには、少しデータを操作する必要がある。まず、クラスターとトランザクションを結合する必要がある。注目すべきは、トランザクションクラスターを保持する「テーブル」の長さが異なることである。そこで、データを結合する方法が必要となる。そこで、merge()関数を使用し、列にわかりやすい名前をつける。

# データのマージ

cluster.deals<-merge(transactions[1:2],groups,by.x = "CustomerLastName", by.y = "row.names")

colnames(cluster.deals)<-c("Name","Offer","Cluster")
head(cluster.deals)
      Name Offer Cluster
1    Adams    18       1
2    Adams    29       1
3    Adams    30       1
4    Allen     9       2
5    Allen    27       2
6 Anderson    24       3

次に、ピボット処理を繰り返し、オファーを行に、クラスタを列にして、各クラスタトランザクションの合計数をカウントする。ピボットテーブルができたら、先ほどと同様にオファーのデータテーブルとマージする。

# Get top deals by cluster
cluster.pivot<-melt(cluster.deals,id=c("Offer","Cluster"))
cluster.pivot<-cast(cluster.pivot,Offer~Cluster,fun.aggregate=length)
cluster.topDeals<-cbind(offers,cluster.pivot[-1])
head(cluster.topDeals)
  OfferID Campaign           Varietal MinimumQt Discount      Origin PastPeak 1 2 3 4
1       1  January             Malbec        72       56      France    FALSE 0 8 2 0
2       2  January         Pinot Noir        72       17      France    FALSE 0 3 7 0
3       3 February          Espumante       144       32      Oregon     TRUE 1 2 0 3
4       4 February          Champagne        72       48      France     TRUE 0 8 0 4
5       5 February Cabernet Sauvignon       144       44 New Zealand     TRUE 0 4 0 0
6       6    March           Prosecco       144       86       Chile    FALSE 1 5 0 6

Study case III: ソーシャルネットワーククラスタリング分析

この分析には,2006年から2009年にかけて,有名なソーシャル・ネットワーク上にプロフィールを持っていた米国の高校生3万人を無作為に抽出したデータセットを使用している(リンク)。

全ページに掲載された上位500語の中から、「課外活動」「ファッション」「宗教」「恋愛」「反社会的行動」の5つのカテゴリーの興味を表す36語を選んだ。この36個の単語には、「サッカー」「セクシー」「キス」「聖書」「ショッピング」「死」「ドラッグ」などの言葉が含まれています。最終的なデータセットには,各人について,その人のSNSプロフィールに各単語が何回登場したかが示されている。

teens <- read.csv("snsdata.csv")
head(teens,3)
  gradyear gender    age friends basketball football soccer softball volleyball swimming cheerleading baseball tennis sports cute sex sexy hot kissed dance band marching
1     2006      M 18.982       7          0        0      0        0          0        0            0        0      0      0    0   0    0   0      0     1    0        0
2     2006      F 18.801       0          0        1      0        0          0        0            0        0      0      0    1   0    0   0      0     0    0        0
3     2006      M 18.335      69          0        1      0        0          0        0            0        0      0      0    0   0    0   0      0     0    2        0
  music rock god church jesus bible hair dress blonde mall shopping clothes hollister abercrombie die death drunk drugs
1     0    0   0      0     0     0    0     0      0    0        0       0         0           0   0     0     0     0
2     2    2   1      0     0     0    6     4      0    1        0       0         0           0   0     0     0     0
3     1    0   0      0     0     0    0     0      0    0        0       0         0           0   0     1     0     0
dim(teens)
[1] 30000    40

また、データの具体的な内容を簡単に見てみよう。str()の出力の最初の数行は以下の通りである。

str(teens)
'data.frame':    30000 obs. of  40 variables:
 $ gradyear    : int  2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 ...
 $ gender      : chr  "M" "F" "M" "F" ...
 $ age         : num  19 18.8 18.3 18.9 19 ...
 $ friends     : int  7 0 69 0 10 142 72 17 52 39 ...
 $ basketball  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ football    : int  0 1 1 0 0 0 0 0 0 0 ...
 $ soccer      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ softball    : int  0 0 0 0 0 0 0 1 0 0 ...
 $ volleyball  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ swimming    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ cheerleading: int  0 0 0 0 0 0 0 0 0 0 ...
 $ baseball    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ tennis      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ sports      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ cute        : int  0 1 0 1 0 0 0 0 0 1 ...
 $ sex         : int  0 0 0 0 1 1 0 2 0 0 ...
 $ sexy        : int  0 0 0 0 0 0 0 1 0 0 ...
 $ hot         : int  0 0 0 0 0 0 0 0 0 1 ...
 $ kissed      : int  0 0 0 0 5 0 0 0 0 0 ...
 $ dance       : int  1 0 0 0 1 0 0 0 0 0 ...
 $ band        : int  0 0 2 0 1 0 1 0 0 0 ...
 $ marching    : int  0 0 0 0 0 1 1 0 0 0 ...
 $ music       : int  0 2 1 0 3 2 0 1 0 1 ...
 $ rock        : int  0 2 0 1 0 0 0 1 0 1 ...
 $ god         : int  0 1 0 0 1 0 0 0 0 6 ...
 $ church      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ jesus       : int  0 0 0 0 0 0 0 0 0 2 ...
 $ bible       : int  0 0 0 0 0 0 0 0 0 0 ...
 $ hair        : int  0 6 0 0 1 0 0 0 0 1 ...
 $ dress       : int  0 4 0 0 0 1 0 0 0 0 ...
 $ blonde      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ mall        : int  0 1 0 0 0 0 2 0 0 0 ...
 $ shopping    : int  0 0 0 0 2 1 0 0 0 1 ...
 $ clothes     : int  0 0 0 0 0 0 0 0 0 0 ...
 $ hollister   : int  0 0 0 0 0 0 2 0 0 0 ...
 $ abercrombie : int  0 0 0 0 0 0 0 0 0 0 ...
 $ die         : int  0 0 0 0 0 0 0 0 0 0 ...
 $ death       : int  0 0 1 0 0 0 0 0 0 0 ...
 $ drunk       : int  0 0 0 0 1 1 0 0 0 0 ...
 $ drugs       : int  0 0 0 0 1 0 0 0 0 0 ...

予想していた通り、データには3万人のティーンエイジャーが含まれており、個人の特徴を示す4つの変数と、興味を示す36の単語が含まれている。なお、性別という変数にはNAが入っている。

summary(teens$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  3.086  16.312  17.287  17.994  18.259 106.927    5086

欠損値のあるデータはすべてスキップする。

teens = na.omit(teens)
dim(teens)

ここでは、10代の若者のSNSプロフィールに様々な関心事が登場した回数を表す36の特徴のみを考慮して、クラスター分析を始める。便宜上、これらの特徴のみを含むデータフレームを作成する。

interests <- teens[5:40]

z-scoreによる標準化をinterestのデータフレームに適用するには、次のようにlapply()でscale()関数を使用する。

interests_z <- as.data.frame(lapply(interests, scale))

10代の若者を5つのクラスターに分けるには、次のようなコマンドを使う。

teen_clusters <- kmeans(interests_z, 5)

それぞれのグループに該当する例の数。グループが大きすぎたり小さすぎたりすると、あまり役に立たない可能性がある。kmeans()クラスタのサイズを取得するには、次のようにteen_clusters$sizeコンポーネントを使用する。

teen_clusters$size
[1]   405   860  2232  3083 17425

クラスターをより詳しく見るには、teen_clusters$centersコンポーネントを使って、クラスターの重心の座標を調べることができ、最初の8つの特徴については以下のようになる。

teen_clusters$centers
  basketball     football      soccer    softball  volleyball    swimming  cheerleading    baseball      tennis       sports        cute          sex         sexy
1  0.1152395 -0.006253857  0.02844803 -0.04255250  0.02933352  0.04500375  0.0006386251 -0.03888461  0.05637920 -0.009560419  0.01047181  0.025147945 -0.062252867
2  0.3386771  0.350120706  0.15029767  0.13701506  0.07668272  0.20899493  0.1543723921  0.23075537  0.11597610  0.726483103  0.44428148  1.975537523  0.511518309
3  1.2300691  1.200720411  0.47116382  1.11942700  1.04345835  0.09264676  0.0244048830  1.10666395  0.15540779  1.071233927 -0.01010005 -0.038629308 -0.009825837
4  0.0284675  0.104936408  0.06895202 -0.04458681 -0.01021244  0.27949365  0.5623033380 -0.05816003  0.04890366 -0.063436948  0.82253163 -0.004130576  0.303494967
5 -0.1819922 -0.189503466 -0.08063094 -0.14127398 -0.13631801 -0.07267883 -0.1102480224 -0.14194938 -0.03559330 -0.161625338 -0.16640717 -0.092407002 -0.076237420
          hot      kissed        dance        band     marching      music       rock         god     church       jesus        bible         hair       dress
1  0.05344326 -0.03354630 -0.009405618  0.15152951  0.078953661  0.2306109  0.1425621  2.24624560  1.3185507  2.36965404  5.992483246  0.044978265  0.03931601
2  0.26019419  2.94730493  0.414987319  0.60089572  0.206976226  1.2478957  1.1739297  0.35947129  0.1521145  0.05459252  0.005037993  2.498087831  0.53055817
3 -0.01695914 -0.09929714 -0.010316408 -0.03461299 -0.038526778  0.0677092  0.1500378  0.03032044  0.1524046 -0.01081647 -0.095495897 -0.003643109 -0.05968584
4  0.67378454 -0.01425919  0.701985251  0.03514753 -0.028764717  0.2292623  0.1222727  0.06281957  0.2917329  0.02396216 -0.101020641  0.364937887  0.60853128
5 -0.13112404 -0.12944067 -0.143143422 -0.03496375 -0.002025962 -0.1161854 -0.1021044 -0.08494822 -0.1092919 -0.06062510 -0.109422950 -0.188438670 -0.12712116
        blonde        mall     shopping      clothes   hollister abercrombie         die       death       drunk       drugs
1 -0.004136652 -0.09449647 -0.006181435  0.037215586 -0.07401475 -0.03857646  0.21743896  0.29091117  0.05829588  0.08088582
2  0.355703198  0.58040544  0.216368739  1.191676922  0.21324062  0.35608241  1.72250393  0.92678665  1.76315875  2.70938830
3  0.026379582 -0.02753857  0.013336653 -0.004109565 -0.09850342 -0.10399745 -0.06606873 -0.03193388 -0.07480891 -0.09821954
4  0.032535642  0.89065699  1.125189643  0.662218098  0.94076894  0.86188708  0.03601752  0.09025773  0.03793660 -0.06647778
5 -0.026594893 -0.18050542 -0.211322853 -0.176319100 -0.16263656 -0.15584981 -0.08797663 -0.06438127 -0.08550424 -0.11125714

クラスターの特徴は円グラフで知ることができる。

par(mfrow=c(2,2))
pie(colSums(interests[teen_clusters$cluster==1,]),cex=0.5)

pie(colSums(interests[teen_clusters$cluster==2,]),cex=0.5)

pie(colSums(interests[teen_clusters$cluster==3,]),cex=0.5)

pie(colSums(interests[teen_clusters$cluster==4,]),cex=0.5)

f:id:iDES:20210325014653p:plain