筆者が恥ずかしかったのか,今では非公開扱いになってしまって,ほかの人が閲覧できなくなっている。
で,
「ダイナマイト・プロットとはこのページにある最初のグラフのようなもの。」
というのが意味不明(参照不能)になっているので,「ダイナマイトプロットって何?」に答えておこう。
まあ,以下のようなもの。昔の漫画(若い人には分かるまい)のダイナマイトの点火装置(上のバー)を押すとダイナマイトが爆発するというような図である。こういうと,今の若い人にも「だせ〜〜〜〜」とわかるだろう。
というのが捕捉で,以下が当時の記事。
=============================================================================
http://abrahamcow.hatenablog.com/entry/2014/06/25/044107
「A/Bテスト、多変量テストの図示(Excel 版)」(非公開)なんだけど...
細かいけど,気になる所がたくさんあるので,メモしておく
1. 「多変量テスト」って
ページタイトルでも使われているわけですが,参照されている他の Web ページでも同じように使われているようですが,「2 群比較ではなくて多群比較(多重比較)」ということでは?
変量は 1 個でしょう?身長と体重と肺活量と 100 メートル走の成績というようなデータなら多変量データですけど。
ついでに,引用されている他の Web ページで「標本数が少ないABテストは...」,「標本数が多いABテストは...」と述べている所があるが,この文脈での「標本数」の使い方は間違いで,「標本の大きさ」,「サンプルサイズ」といわなければならない(この使い分けがちゃんとできていない人は,他でも間違いをおかしている可能性大)。
本来の「標本数」は文字通り標本の数であって,AB テストの場合は「独立 2 標本」だから標本数は 2,多群という場合は「標本数 > 2」のことを指す。
2. 「ダイナマイトプロット」は使わない
ダイナマイト・プロットとはこのページにある最初のグラフのようなもの。
じゃあ,他に何を使う?このページの 3 番目にあるようなグラフから折れ線を除いたもの。
ダイナマイトプロットの対象は,量的変数(の平均値と標準偏差または標準誤差)の場合が多い。しかし,そもそも,データは棒の中にあるのではない(棒グラフの根っこ当たりにはデータはないし,棒グラフの上辺の更に上にもデータはある。平均値±エラーバーは少なくともこの範囲におおくのデータが散らばっているよということを表している。
棒グラフは,本来は計数データの集計結果を示すもの。A 型が何人(何パーセント),B 型が何人(何パーセント)...というようなもの。棒の根っこの方も先端の方も同じ長さの部分を取ると人数(パーセント)は同じ。すなわち,この場合は棒グラフはデータの存在する範囲を表している。
計数データの集計結果でも,エラーバーを付けると意味が変わってくる。そのエラーバーは母数の信頼限界を表すので,棒は意味をなさない。
3. 「エラーバーが重なっていなければ母比率に有意差がある」はガセ
> n1 = n2 = 100
> x1 = 50
> x2 = 35
> prop.test(x1, n1)
1-sample proportions test without continuity correction
95 percent confidence interval:
0.4038315 0.5961685 <<< 母比率の信頼区間
> prop.test(x2, n2)
1-sample proportions test with continuity correction
95 percent confidence interval:
0.2591235 0.4525560 <<< 母比率の信頼区間
> prop.test(c(x1, x2), c(n1, n2))
2-sample test for equality of proportions with continuity
correction
95 percent confidence interval:
0.004563794 0.295436206 <<< 比率の差の信頼区間
「母比率に有意差があるかどうか」は各群の母比率の信頼区間ではなく(!),「母比率の差の信頼区間」であるため,図のように,前者が重なっていても,母比率に有意差ありという結果になることがある。
じゃあ,エラーバーなんか何の役に立つの?何の役にも立たない。かえって,誤解を植え付ける。百害あって一利なし。
図からエラーバーを取ったら...2つの点だけのグラフなんて...
4. 母比率の区間推定の計算法
どうも,R の計算結果とあわないなあと思っていたが,あまりよくない方の近似計算式 p±z*sqrt(p*(1-p)/n) を使っているようです(以下の conf1)。
この式は精度が悪い上に,0未満とか1より大きい値を計算してしまうので,ガードが必要になる。
prop.test などにはもう少しよい近似式を使っている(以下の conf2)。conf2 は,連続性の補正をしない場合の式なので,prop.test では correct=FALSE を指定する(correct=TRUE の場合と一致させることもできるが)。
conf = function(r, n, sig = 0.95) {
z = qnorm((1 - sig)/2, lower.tail = FALSE)
z2 = z^2
p = r/n
list(conf1 = p + c(-z, z) * sqrt(p * (1 - p)/n),
conf2 = n/(n + z2) * (p + z2/(2 * n) + c(-z, z) * sqrt(p * (1 - p)/n + z2/(4 * n^2))))
}
実行例
> conf(2, 51)
$conf1
[1] -0.01405716 0.09248853
$conf2
[1] 0.01082108 0.13216306
> prop.test(2, 51, correct = FALSE)$conf.int
[1] 0.01082108 0.13216306
attr(,"conf.level")
[1] 0.95
> conf(4, 58)
$conf1
[1] 0.003752698 0.134178337
$conf2
[1] 0.02714425 0.16433666
> prop.test(4, 58, correct = FALSE)$conf.int
[1] 0.02714425 0.16433666
attr(,"conf.level")
[1] 0.95
> conf(64, 3256)
$conf1
[1] 0.01488795 0.02442409
$conf2
[1] 0.01542330 0.02502083
> prop.test(64, 3256, correct = FALSE)$conf.int
[1] 0.01542330 0.02502083
attr(,"conf.level")
[1] 0.95
※コメント投稿者のブログIDはブログ作成者のみに通知されます