二つのmosaic plot
と
日本語表示
Tokyo.R #65 LT
2017/09/23
作新学院大学 人間文化学部
藤本一男
Kazuo.fujimoto2007@gmail.com
報告の概要
• graphics::mosaicplot と vcd::mosaic
• カテゴリカル・データの表示に活躍
• mosaic は、しかし、「日本語が使えない」?
• Structplot Frame work のパラメータ設定
• 参考文献
graphics::mosaicplot()
データは、髪の色と眼の色、
性別データ(HairEyesColor)
• 3つの変数で596人の観測値をクロス集計した3
次元配列。変数とそのレベルは以下のとおり。
名前 レベル
• 1. 髪の色 黒、茶色、赤、金髪
• 2. 目の色 茶色、青、薄茶、緑
• 3. 性別 男性、女性
データの詳細
• 詳細
• Hair x Eyeの表は、Snee(1974)によって報告されたデラウェ
ア大学の学生の調査に基づいてい。性別による分割は、教材
的*な視点からFriendly(1992a)によって追加された。この
データセットは、標準カイ二乗検定、より一般的には対数線
形モデリング、mosaci plot、sieve diagram、またはassociation
plot などのグラフィカルメソッドなど、分割表を分析するた
めのさまざまな手法を示すのに役立つ。
• * Frendly2000:392によるコメント
• 髪の色と目の色との関係は、このようなデータでは驚くほど
見通せない。遺伝的に、髪の色、目の色、および肌の色はメ
ラニンに関連しており、少なくとも2種類のメラニンが存在し、
そのうちの1つは赤みがかった(明るい)もの、もう1つは
黒っぽいことが知られている。皮膚の中のより暗い形のメラ
ニンをたくさん持っている人は、おそらく髪と目にそれを
持っている。しかし、遺伝的には無関係であるが、人種の中
で一緒に起こりうる多数の人種特性が存在する。 Sneeのデー
タセットの学生は、人種では分類されていないため、不明だ
る。髪の色、目の色、性別の間に何らかの関係があるかどう
かは、さらに謎である。
mosaic plot の特徴
• タイルによって度数(割合)を表示する
• 棒グラフでは、変数が二つあるときに、一方の
変数しか表示できない。そのため、度数がすく
なくてもカテゴリーの割合が大きいものが「め
だつ」というようなことが起こる。
• mosaic plot は、二つの変数が同時に表現されて
いる。
mosaic plot の歴史
• 詳細は、“Advances in Visualizing Categorical Data Using the vcd,
gnm and vcdExtra Packages in R CARME 2011”, http://carme2011.agrocampus-
ouest.fr/slides/Friendly_Turner_Firth_Zeileis.pdf
• Hartigan and Kleiner (1981, 1984): representing an n-way
contingency table by a “mosaic display,” showing a (recursive)
decomposition of frequencies by “tiles”, area ∼ cell frequency.
• Friendly (1994): developed the connection between mosaic
displays and loglinear models
• Showed how mosaic displays could be used to visualize both
observed frequency (area) and residuals (shading) from some
model.
1st presented at CARME 1995 (thx: Michael & Jörg!)
• Visualizing Categorical Data (Friendly, 2000)
• But: mosaic-like displays have a long history (Friendly, 2002)!
• 2002: vcd project at TU & WU, Vienna (Kurt Hornik, David Meyer,
Achim Zeileis) → vcd package
“Data and Visualization”
• Micahel Frendly先生、CARME2015, Naples での講演
• https://youtu.be/uti5FIFJsN4
学校では習わなかった…...
• mosaicplot 「教科書」にもではじめている
• プレステップ統計学I 記述統計学 (プレステップシリーズ
14) 単行本(ソフトカバー) – 2012/3/29 稲葉 由之 (著)
きっと理由が..
• 積み上げ棒グラフ
• 計算量が大したことない。
• 比例計算を視覚的に確認する教材になる。
• それに対して、
• mosaic plotは、
• 計算量が増える。
• 絵を描くのも複雑になる。
• 棒グラフだと、極端な話、「幅ゼロ」で線で引いてもよし。
• Rのような言語が手軽に使えるようになったので、
簡単に活用できる条件が整った。
(グラフ「手書き」の教育上のことは場を改めて
…..)
中野康人,「クロス集計の視覚
化」Rを利用したグラフの紹介
• 社会調査協会,『社会と調査』No.18
(2017/03)
• p93「モザイクプロット:次に、帯グラフの完
成型といってもよいであろうモザイクプロット
を紹介する。」「モザイクプロットは、Rの
ベースグラフィックでクロス集計表をプロット
する際に出力される形式である。」「Rのベー
スグラフィックの他にはVCDパッケージでも描
画が可能である。」
vcd によるmosaic plot の拡張
• mosaic plot : 一般名称
• mosaicplot : graphics::mosaicplot() のこと
• mosaic: vcd::mosaic()
mosaicplot()
• クロス表をそのまま入れればいい。
• 日本語も問題なく表示される
• ? mosaicplotでhelp
表示させてみる/ mosaicplot()
.d <- HairEyeColor
.d_j <- .d
dimnames(.d_j) <- list(
髪=c("黒","茶","赤","ブロンド"),
眼= c("茶","青","薄茶","緑"),
性別= c("男性","女性"))
mosaicplot(.d, main="HairEyeColor")
mosaicplot(.d_j, main=“髪の色と眼の色")
ちょっと気になる変数の位置
• データは、こんな感じ。
• 行にHair
• 列にEye
• 第三変数としてSex
• しかし、mosaicplot では。
• 縦にEye、横にHair。
• つまり表出力と転置の関
係。
• str() でみると、Hair, Eye,
Sex の順。
さてvcd::mosaci() では?
vcd::mosaic で行こう!
mosaic(.d_j,main="髪の色と目の色/vcd::mosaic")
文字化け(というか所謂トーフ)です。
• rmdからknitr、pandas経由でxelatexで組版して
PDFに出力すると日本語がちゃんと表示されて
いる。
• yamlヘダーで、monofont,sansfont,mainfont を
IPAGothic, IPAGothic, IPAPMinchoに設定。
• しかし、(macですが)RStudioのplotペインや
スッピンRの「Quarz」では、ご覧のとおり。
• .Rprofileには、「macで日本語を使う」「ggplot2で
使う」「latticeで使う」などの設定を入れている。
• RStudioのplotペインで、PDFにExportさせると、ちゃ
んと文字が生きている。
• Windowsでどうなるかは未検証。
• .Rprofileのおまじない含めて「fontの設定」よ
くわかっていません!
PDFにすればいいではないか!
• というわけにもいかず、やはり、RStudio画面
で確認できないのは辛いものがある。
• plotペイン文字化けしているグラフからPDFに
exportすると日本語が「復活」するのだから文
字コード情報は生きている。
• ということは、フォントの設定の問題だろう。
• と今回の報告の本題。
その前に少し「vcdと日本語」
• vcdは、Visualizing Categorial Data (カテゴリか
るデータの可視化)の略。
• mosaicを始め、便利が機能が提供されている。
• 便利、でも日本語使えないではないか。
Rjpwiki での質問あり。誰も回
答してない。
• vcd初心者? (2012-10-23 (火) 17:43:10)
• http://www.okadajp.org/RWiki/?%EF%BC%B1%EF%BC%86%EF%BC%A1%20(%E5%88%9D
%E7%B4%9A%E8%80%85%E3%82%B3%E3%83%BC%E3%82%B9)%2F14#sbdd4c23
• 「さらに、ラベルを日本語で表示しようとして、
次のように入力すると、
> dimnames(tab) <- list(サイズ=c(“S”, “M”, “L”),
性別=c("男", "女"))
> mosaic(tab, split_vertical=T)
• 以下にエラー grid.Call.graphics(L_downviewport,
name$name, strict) : Viewport 'cell:サイズ=S' was not
foundとエラーになってしまいます。
• 日本語が通らないようなのですが、何か対処法は
ありますでしょうか。」
豊澤 栄治「実践!Webマーケ
ターのためのR入門
• 顧客属性データとコンバージョンデータを使っ
てどんどん打ち手を考えよう!【R入門講座】
• https://markezine.jp/article/detail/20665 (2014/08/28 08:00)
• 「あれ!? なんで今回は日本語の変数名では
ないのか? とツッコミが入りそうですね。
そうなんです。vcdパッケージを使うのですが
日本語表示で問題がありまして、英語表記とさ
せて頂きます。環境によってはうまいこといく
かも知れませんが……。お許しください!」
Winston Chang(石井、河内、瀬戸山、古畠)『Rグ
ラフィックスクックブック-ggplot2によるグラ
フ作成のレシピ集』オラリー・ジャパン,2013
• なお、「ggplot2による.....」は邦題でのサブタイトル。
• ここの「レシピ13.15 モザイクプロット」を作成す
るは、vcd::mosaic を紹介している。
• このレシピの最後に「モザイクプロットを作成す
るその他の関数は、?mosaicplot を参照してくださ
い。」(p316)とあるが(実は原著でも同様)、
vcd::mosaic と graphics::mosaciplot は別ものである。
• なお、本書の付録B「グラフでの日本語フォントの
利用」は、windowsやOSX向けの日本語設定の話と、
個別ggplot2で日本語をつかえるようにする説明だ
けである。
金明哲「Rによるカテゴリカ
ルデータの視覚化」
• http://mjin.doshisha.ac.jp/R/46/46.html
• vcdのfunction 説明あり。
• 便利な機能についてコンパクトに紹介。vcdでどん
なグラフが描けるのかがわかります。
• しかし、日本語については言及なし。
• 金先生のページでvcdに出会って、よし、使ってみ
よう!と意気込んで、日本語変数名データをいれる
と、エラー、に直面。
• 使えない、使わない…..。
では藤本『対応分析入門』オー
ム社2015はどうか
• 実は、第5章の「対数線形モデルと対応分析」のモデル
との当てはまりを図示するところで、vcd::mosaic を
使っている。
• ページをみると、日本語のタイトルがついてる。サ
ポートページで提供しているスクリプトをみると日本
語タイトルが付いている。
• ただ、PDF出力で入稿したので、問題なかった模様。
これを、RStudioやスッピンRで実行したら、日本語が
トーフですね。
• これは、「Rで検算しながら理解する」といいながら、
誤魔化(問題回避..)してます。ごめんなさい!
• この件で出版社に問い合わせたりしないでください!
今日のLT終わったら、スクリプト訂正しておきます。
鍵は、structplot frame work
• lattice や ggplto2 と同じgrid 系。
• そのため、baseで有効だった設定が効かない。
• 私みたいに、さんざんbaseであれこれやって(苦し
んで)来たものには、厳しい仕打ち。
• lattice や ggplot2 に比べて使う人が少ないのか、
vcd(^^;)
解説
問題は、structplot frameworkの変数
• strucplot
• From vcd v1.4-3 by David Meyer
• 92th Percentile
• Structured Displays of Contingency Tables
• This modular function visualizes certain aspects of
high-dimensional contingency tables in a
hierarchical way.
• https://www.rdocumentation.org/packages/vcd/ve
rsions/1.4-3/topics/strucplot
• もちろん ?structplot で参照可能。
ヒントは、R-help にありまし
た
• http://r.789695.n4.nabble.com/Re-fonts-in-mosaic-td3418263.html
• 回答は、 Michael Friendly先生!
• If you are doing multiple plots like this, there is no way I know of
to specify the fonts for labeling *once* for all such
plots. However,
you can do something like this to save typing and keep things
consistent:
my.largs <- list(
gp_labels = gpar(fontsize = 12, fontfamily = "calibri"),
gp_varnames = gpar(fontsize = 16, fontfamily = "calibri"))
mosaic(UCBAdmissions, labeling_args=my.largs)
mosaic(UCBAdmissions, labeling_args=my.largs, shade=TRUE)
これでOKと思いきや…
• タイトル(main=“”)がでません。(PDFにする
とでてます。)
Title(main領域)のgpは、main_gp
• それならと、my.largs のlistに、main_gpを追加
してみたけど、だめ。
• それは、labeling_args に代入していたからでし
た。main_gp(同様にサブタイトルも、
sub_gp)に代入しないといけない。
• 本体でその都度指定してもいいが。
ただ、なかなかたどり着けないhelp
• ?vcd
• ?mosaic
• をみても、なかなかわからない。?mosaicのそ
こかしこに、structplot へのリンクがはられて
いるが、私には迷路だった。いっぱいありすぎ。
• vcd::mosaic(他のdoubledeckerとかassocplotと
も)の表示は、grid系で、それはstructplot とい
うフレームワークを使っているぞ、という方面
から攻略して、たどり着きました。
やりたいこと(教えて欲しいこと)
• my.largs = list(gp_labels = gpar(fontsize =10, fontfamily = "sans"),
gp_varnames = gpar(fontsize = 12, fontfamily = "sans"))
my.main = gpar(fontsize = 14,fontfamily = "sans")
my.sub = gpar(fontsize = 10,fontfamily = "sans")
のようなものを毎回書くのは面倒なので、.RProfile に
vcdがloadされたら設定するように書きたい。
• 懇親会、でますので、この件よろしくお願いい
たいします!
今後ともよろしくお
願いいたします!

2つのmosaic plotと日本語表示