AKBがいま選挙中ですね。
クリギング手法の練習として,次のようなことをして遊んでみました。
まず,AKBトップ20名の顔写真を一組ずつ見ていって,類似度評定(七段階)。
これで作られる類似度行列を多次元尺度法で2次元空間にマッピング。
さらに,現在の得票数を三次元方向のデータと考えて,クリギングによる等高線マップを描く。
コードは次の通り。
disance <span class="synStatement"><-</span> read.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a><span class="synSpecial">(</span><span class="synConstant">"c:\\temp\\<a class="keyword" href="http://d.hatena.ne.jp/keyword/akb48">akb48</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>"</span><span class="synSpecial">)</span> cmdscale<span class="synSpecial">(</span>distance<span class="synSpecial">)</span> -> AKBmap contAKB <span class="synStatement"><-</span> cbind<span class="synSpecial">(</span>AKBmap<span class="synSpecial">,</span> c<span class="synSpecial">(</span><span class="synConstant">17156</span><span class="synSpecial">,</span><span class="synConstant">16452</span><span class="synSpecial">,</span><span class="synConstant">12056</span><span class="synSpecial">,</span><span class="synConstant">8833</span><span class="synSpecial">,</span> <span class="synConstant">8582</span><span class="synSpecial">,</span><span class="synConstant">8016</span><span class="synSpecial">,</span><span class="synConstant">7357</span><span class="synSpecial">,</span><span class="synConstant">6596</span><span class="synSpecial">,</span><span class="synConstant">6559</span><span class="synSpecial">,</span> <span class="synConstant">6537</span><span class="synSpecial">,</span><span class="synConstant">5157</span><span class="synSpecial">,</span><span class="synConstant">5096</span><span class="synSpecial">,</span><span class="synConstant">3931</span><span class="synSpecial">,</span><span class="synConstant">3860</span><span class="synSpecial">,</span> <span class="synConstant">3102</span><span class="synSpecial">,</span><span class="synConstant">2843</span><span class="synSpecial">,</span><span class="synConstant">2753</span><span class="synSpecial">,</span><span class="synConstant">2685</span><span class="synSpecial">,</span><span class="synConstant">2201</span><span class="synSpecial">,</span><span class="synConstant">1793</span><span class="synSpecial">))</span> library<span class="synSpecial">(</span>geoR<span class="synSpecial">)</span> geodata <span class="synStatement"><-</span> as.geodata<span class="synSpecial">(</span>contAKB<span class="synSpecial">)</span> v <span class="synStatement"><-</span> variog<span class="synSpecial">(</span>geodata<span class="synSpecial">)</span> vf <span class="synStatement"><-</span> variofit<span class="synSpecial">(</span>v<span class="synSpecial">)</span> plot<span class="synSpecial">(</span>v<span class="synSpecial">)</span> lines<span class="synSpecial">(</span>vf<span class="synSpecial">)</span> loc <span class="synStatement"><-</span> expand.grid<span class="synSpecial">(</span>seq<span class="synSpecial">(</span>-<span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">0.05</span><span class="synSpecial">),</span>seq<span class="synSpecial">(</span>-<span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">0.05</span><span class="synSpecial">))</span> k <span class="synStatement"><-</span> krige.conv<span class="synSpecial">(</span>geodata<span class="synSpecial">,</span>locations=loc<span class="synSpecial">,</span> krige=krige.control<span class="synSpecial">(</span><a class="keyword" href="http://d.hatena.ne.jp/keyword/cov">cov</a>.pars=vf$<a class="keyword" href="http://d.hatena.ne.jp/keyword/cov">cov</a>.pars<span class="synSpecial">))</span> image<span class="synSpecial">(</span>k<span class="synSpecial">)</span> contour<span class="synSpecial">(</span>k<span class="synSpecial">,</span> add=<span class="synConstant">TRUE</span><span class="synSpecial">,</span> drawlabels=<span class="synConstant">FALSE</span><span class="synSpecial">,</span> col=<span class="synConstant">'brown'</span><span class="synSpecial">,</span>nlebels=<span class="synConstant">20</span><span class="synSpecial">)</span> text<span class="synSpecial">(</span>AKBmap<span class="synSpecial">,</span>colnames<span class="synSpecial">(</span>distance<span class="synSpecial">))</span>
出来た画像がこれ。
白くなるほど高度が上がる=得票率が高い,ということ。
これを見ると,山が3つ,少なくとも2つあるということがわかる。つまり,単峰ではないのだ。グループの中でファンの好みが散らばるから,みんなそこそこ満足したりするんだろうね。
宝塚のスターを類似度評定して人気投票したとしても同じようになるかな?あっちは単峰なんじゃないかな。何となく。
ブランドイメージとしては,どちらの戦略が有効なんだろうか。
あるいは,AKBに入っていない人を類似度評定してマッピングした場合,予想される得票数なんかも算出できる。あたってるかどうかは別にして(笑)
今回は学生(サンプル1)が類似度評定したので,これで根拠のある何かが語れるわけではないけど,とりあえず技術はゲットしたぜ!
あとはバリオグラムの推定なんかについて,オプションを使いこなせるようにならないとね。