裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

A/B テストの周辺(中心?)で,御託を並べる

2014年06月25日 | 統計学

筆者が恥ずかしかったのか,今では非公開扱いになってしまって,ほかの人が閲覧できなくなっている。

で,

「ダイナマイト・プロットとはこのページにある最初のグラフのようなもの。」

というのが意味不明(参照不能)になっているので,「ダイナマイトプロットって何?」に答えておこう。

まあ,以下のようなもの。昔の漫画(若い人には分かるまい)のダイナマイトの点火装置(上のバー)を押すとダイナマイトが爆発するというような図である。こういうと,今の若い人にも「だせ〜〜〜〜」とわかるだろう。

というのが捕捉で,以下が当時の記事。

=============================================================================

 

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

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 文字列操作 | トップ | 塵も積もれば山となる »
最新の画像もっと見る

コメントを投稿

統計学」カテゴリの最新記事