分割表の最適な視覚化はどれですか?


22

統計的観点から、通常はカイ二乗検定で分析されている分割表を表示するのに最適なプロットはどれですか?覆い隠された棒グラフ、積み上げ棒グラフ、ヒートマップ、等高線プロット、ジッター散布図、複数線プロットなどですか?絶対値またはパーセンテージを表示する必要がありますか?

編集:または@forecasterがコメントで示唆しているように、数値の表自体は単純なプロットであり、十分なはずです。


4
時には、データテーブルがプロットに対する最良の視覚化方法である場合があります。分割表はその典型的な例です。
予報官

1
重要な点は、これが常に最良の選択肢であることには同意しませんが。
rnso

1
それが私が「時々」と言った理由です。スティーブン・フューズは、テーブル専用のセクションがある数字見せてくれることをお勧めします。
予報官

1
最善の方法は、表示するもの、テーブルの大きさに依存しますが、特定の部分はありませんが、これは広範です!
kjetil bハルヴォルセン

3
stats.stackexchange.com/questions/56322/のほとんどは、ここで適切なようです。
ニックコックス

回答:


9

ここに万能ソリューションはありません。非常に単純なテーブル(たとえば、)がある場合は、おそらくテーブルを提示するのが最善です。実際の図が必要な場合は、モザイクプロット(@xanが示唆している)を開始するのにおそらく良い場所です。シーブプロット、関連プロット、動的圧力プロットなど、モザイクプロットに類似した他のオプションがいくつかあります(ここでの私の質問を参照してください:分割表のシーブ/モザイクプロットの代替)。Michael Friendlyの本、Visualizing Categorical Dataは、このトピックの優れた(SASベースの)リソースであり、vcdパッケージは、Rでこれらのアイデアを実装するための優れたリソースです。 2×2

ただし、テーブルの行と列の数が多くなると、これらを使用するのが難しくなります。別の種類の視覚化オプションは、コレスポンデンス分析の実行/プロットです。コレスポンデンス分析は、分割表の行と列の両方で主成分分析を実行することに似ています。次に、両方がバイプロットで一緒にプロットされます。@xanの回答からのデータを使用したRベースの例を次に示します。

library(ca)
tab = as.table(rbind(c(28, 4,  0, 56),
                     c(38, 5,  9, 10),
                     c( 6, 6, 14, 13) ))
names(dimnames(tab)) = c("activity", "period")
rownames(tab)        = c("feed", "social", "travel")
colnames(tab)        = c("morning", "noon", "afternoon", "evening")
tab
#         period
# activity morning noon afternoon evening
#   feed        28    4         0      56
#   social      38    5         9      10
#   travel       6    6        14      13
plot(ca(tab))

ここに画像の説明を入力してください

このプロットを解釈するには、同じタイプの2つのポイントが近いほど、それらの2つの行/列プロファイルはより類似しています。また、異なるタイプの2つのポイントが近いほど、それらの交点を表すセル内の確率質量が大きくなります。

Rにはcaパッケージがあります。このビネット(pdf)も役立ちます。


非常に便利。どうやら、小さな値で失敗します。例:tt = with(mtcars、table(factor(gear)、factor(vs))); plot(ca(tt)); x [、dim]のエラー:範囲外の添字
-rnso

これは、要因の1つ(つまり、factor(vs))に2つのレベルしかないためです。少なくとも3つ必要です。試してくださいttt = with(mtcars, table(factor(gear), factor(cyl))); plot(ca(ttt))
GUNG -復活モニカ

異なる要因間の関係の非常に良い表示。
rnso

または、コレスポンデンス分析スコアの順序で行と列を並べ替えた後、テーブルを表示できます。
kjetil bハルヴォルセン

興味深いアイデア、@ kjetilbhalvorsen。caオブジェクトからそれを取得する方法がわからないので、最初からコーディングしました。間違えない限り、行と列を並べ替えc(1,3,2)ますc(4,1,3,2)。それを行った後、私はここで何を見るべきかわかりません。何を考えていますか?
GUNG -復活モニカ

11

異なる機能は、異なる機能を強調表示するのに優れていますが、モザイクプロットは一般的なビュー(何かが目立つかどうかを確認する)に適しています。たぶんそれは回避された棒グラフの意味です。ほとんどのオプションと同様に、一方の次元で他方よりも相対周波数をより適切に表すという点で、対称ではありません。優れた機能は、周辺周波数も表されることです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


これはいい。数字とプロポーションの両方が表示されます。プロットに数字を付けることもできます。x軸アイテムの順序を並べると、さらに見やすくなります。かわすことで、私はカテゴリが並んでいる一般的なバープロットを意味しました(このページのposition = 'dodge'を参照:r-bloggers.com/using-r-barplot-with-ggplot2)。
rnso

1
+1この設計は、比較的単純なデータに対してしばしば非常にうまく機能します。逆に、任意の次元の分割表への拡張性に関する文献での強調にもかかわらず、より複雑なデータについては急速に考えるのが難しくなることがわかりました。それでも、そのような状況でもうまく機能する設計はありません。この例の小さな点は、プログラムが提供するデフォルトのアルファベット順「午後」...「正午」を受け入れているように見えることですが、時間の順序を維持する方が自然な選択のようです。
ニックコックス

8

データセット、読者、目的に関係なく、「最良の」プロットが存在しないことに同意します。測定された2つの変数について、散布図は、特定の目的を除いて、おそらく他のすべてを後回しにする設計ですが、カテゴリデータではそのようなマーケットリーダーは明らかではありません。

ここでの私の目的は、しばしば再発見または再発明された単純な方法に言及することですが、それにもかかわらず、統計グラフを扱うモノグラフや教科書でも見落とされがちです。

最初に、xanが投稿したものと同じデータをカバーする例:

ここに画像の説明を入力してください

多くの場合、名前が必要な場合、これは双方向の棒グラフです(この場合)。ここでは、複数の棒グラフが同様のフレーバーを持つ一般的な選択肢の1つであることを除いて、他の用語をカタログ化しません。(「複数の棒グラフ」に対する私の小さな反対は、「複数の」は非常に一般的な積み上げまたは横並びの棒グラフを除外しないのに対し、「双方向」は行と列のレイアウトをより明確に暗示していますが、それを明確にするために例を挙げるかもしれません。)

この種のプロットのプラスとマイナスも簡単ですが、いくつか説明します。私はこのデザインが好きなので(少なくとも1930年代に遡ります)、もっと鋭い批判を加えたいと思う人もいるかもしれません。

+1。このアイデアは、技術系でないグループでも簡単に理解できます。この例では、バーの高さまたはバーの長さが周波数をエンコードします。他の例では、任意の方法で計算されたパーセント、残差などをエンコードできます。

+2。行と列の構造は、表の構造と一致します。数値も追加できます。非常に少量であり、暗黙のゼロでさえ明らかであり、これは他のデザイン(積み上げ棒グラフ、モザイクプロットなど)の場合に常にそうとは限りません。通常、行と列のラベル付けは、キーまたは凡例を追加するよりも効率的で、必要なメンタルな「前後」を実現します。このように、この設計はグラフと表のアイデアを組み合わせたものであり、一部の読者を悩ませているようです。逆に、図と表の間の強い区別は単なる歴史的な二日酔いであり、研究者が独自のドキュメントを作成でき、デザイナー、コンポジター、プリンターに依存する必要がないため、時代遅れになっていると主張します。

+3。3ウェイ以上の設計への拡張は、原則として簡単です。片方または両方の軸に2つ以上の変数を複合変数として配置するか、そのようなプロットの配列を指定します。当然、設計が複雑になるほど、解釈も複雑になります。

+4。この設計では、どちらの軸でも順序変数を明確に許可しています。順序は、適切なシェーディングとその軸のカテゴリの順序で表現できます(例)。軸のカテゴリ順序は、その意味によって決定されるか、頻度によって適切に決定されます。テキストラベルに基づくアルファベット順がデフォルトの場合がありますが、考慮される唯一の選択肢であってはなりません。

-1。設計を一般的にすることで、プロットは特定の種類の関係を表示する際の効率低下します。特に、モザイクプロットは、独立性からの逸脱を非常に明確にすることができます。逆に、カテゴリ変数間の関係が複雑または不明確な場合、通常、その弱い事実以上のものを表示するのに適したグラフはありません。

-2。いくつかの点で、デザインはそれが発生するかどうかや頻度に関係なく、クロスコンビネーションごとにスペースを空けるため、スペースの使用効率的ではありません。これは、美徳と見なされる同じ原則の悪です。上記の特定のデザインは、頻度に関係なくカテゴリを均等に配置します。それを犠牲にすることは、しばしば私が非常に高く評価する、読み取り可能な周辺ラベルを犠牲にします。この例では、テキストラベルはすべて非常に短いことがありますが、それは通常のものとはほど遠いものです。

注:xanのデータは発明されたように見えるため、他の回答で試みられている以上の解釈は試みません。しかし、いくつかの自作の知恵はここで最後の言葉に値します。あなたにとって最適なデザインは、あなたとあなたの読者にあなたが気にする実際のデータの構造を最も伝えるものです。

その他の例

3つのカテゴリ変数間の関係をどのように視覚化できますか?

2つの順序変数間の関係のグラフ


1
別の実行可能なオプションと素晴らしい議論のために+1。2方向バーチャートについて質問します。別の可能性のあるマイナス面を示します。バーがプロットされる、マークされていないが明らかに認識できる「ボックス」があります。バーがボックスの上部に近づくと、バーは100%に達します。その値はどのように決定されますか?(NB、分割表は何らかの意味で常に既知の合計を含む多項式です。)ボックスの行の合計または列の合計を一番上にすると、異なる知覚推論が促進されます。(多くのバーは小さすぎて区別できないため、テーブルの合計は使用されていないようです。)
グング-モニカの復元

1
@gungありがとう。ここおよびCVの他の場所の例で使用されている自分のStataプログラムについてコメントできます。プログラムは tabplotSSCからです。バーの高さは、最も高いバーまたは最も長いバーの高さの一部である必要があります。そのために使用可能なスペースは、表示されている行数によって決まります。ユーザーはデフォルトのギャップサイズをオーバーライドできますが、バーが互いに接触したり、お互いに隠れたりするリスクがあります。バーがプラスでもマイナスでもよい場合、物事は簡単ではありません。同じ制約が他のプログラムに噛み付くことを想像します。要するに、触れていないバーは空白を意味します!
ニックコックス

8

@gungと@xanの回答を補足するためにvcd、Rで使用するモザイクと関連プロットの例を示します。

> tab
        period
activity morning noon afternoon evening
  feed        28    4         0      56
  social      38    5         9      10
  travel       6    6        14      13

プロットを取得するには:

require(vcd)
mosaic(tab, shade=T, legend=T)
assoc(tab, shade=T, legend=T)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

両方とも、予想される周波数からの直観を提示します...デフォルトは相互独立性のモデルですが、引数を介して変更できます(たとえば、明確な応答変数がある場合は、共同独立性にexpected

こちらもご覧ください:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.