ウィルコクソンの順位和検定は、寄付の合計が異なるかどうかを確認する正しい検定ですか?


8

バックグラウンド:

私のソフトウェアは、ユーザーに任意の金額の寄付を求めています。ユーザーにテスト寄付のリクエストを分割して、尋ねる最良の方法を見つけました:50%がリクエストバージョン1を取得し、50%がリクエストバージョン2を取得し、どちらがより良いかを確認します。

ほとんどすべてのユーザーが0ドルを寄付しますが、一部は寄付します。結果は次のようになります。

         Number of users  Number of donations   Dollar amounts donated
GROUP A  10,000           10                    40,20,20,20,15,10,10,5,5,5
GROUP B  10,000           15                    50,20,10,10,10,10,10,10,5,5,5,5,5,5,5

1つのグループが勝者であるか、それとも同点であるか、または確実にするためにより大きなサンプルが必要かどうかを知りたい。(この例は、議論を簡単にするために残されていますが、重要な結果を得るためには、ほぼ確実に大きなサンプルが必要です。)

私がすでに測定しているもの:

  1. 1つのグループで寄付のが大幅に増えましたか?どれくらい大きい? 私はこのp値と信頼区間をABBA Thumbtackツールを使用し測定し、寄付の数とユーザーの数のみを使用して、金額は無視しています。その方法論については、「基礎となる統計とは」に説明されています。そのリンクのセクション。(それは私の頭の上にありますが、寄付率の差をアグレスティクーリ間隔の通常の確率変数としてとることによって信頼区間を計算すると思います。)
  2. 1つのグループが寄付した金額は大きく異なりますか? 順列テストを実行してこのp値を測定します。すべての2N被験者を2つのN被験者グループに繰り返しシャッフルし、グループ間の合計金額の差を毎回測定し、差が> =観察されたシャッフルの割合を見つけます。差。(これは、ドルの代わりにクラッカーに対して同じことを行うこのカーンアカデミーのビデオに基づいて有効だと思います。)

Rのwilcox.test:

wilcox.test()R についてのいくつかの質問:

  1. wilcox.test(paired=FALSE)上記のデータの表を入力した場合、上記のツールでまだ回答されていない新しい質問に答えて、テストの実行を継続するか、勝者を宣言するか、ネクタイを宣言するかを判断するためのより多くの洞察を与えますか?
  2. もしそうなら、それはどんな正確な質問に答えますか?

リンクに頼るのではなく、あなたが現在行っている2つのことについて質問に答えてください。2つ目は特にビデオへのリンクです。私は他の人にも期待していますが、あなたが何を求めているのかを理解するのに時間をかけません。
アーロンは、スタックオーバーフロー

1
この質問は、さまざまなテストが研究目標にどのように関連しているかを理解することについて明確です。コーディングとはほとんど関係がありません。ここではトピックであり、スタックオーバーフローではトピックから外れます。
-モニカの復活

@アーロン:完了。フィードバックをお寄せいただきありがとうございます。テキストの壁が、そもそも人々が質問を読むのを思いとどまらせるのではないかと心配でした。CrossValidated;)での回答を最適化するために私の設定を分割してテストするのは難しい;)
Michael Gundlach

回答:


7

wilcox.test()pairedRFALSEU

それは私があなたの目的に適しているとは思っていません。最大の合計寄付が必要です。これは、最大の平均寄付にユーザー数を掛けたものとして理解できます。スキューのために、1つのバージョンが最大の平均/合計を持つ可能性がありますが、他のバージョンは確率的に大きくなる可能性があります。(その場合は、前のバージョンが必要です。)これが最終的に必要なものであるため、ディストリビューションのその側面に固有のテストが最適です。

t

p

A            = c(rep(0, 9990), 40,20,20,20,15,10,10,5,5,5)
B            = c(rep(0, 9985), 50,20,10,10,10,10,10,10,5,5,5,5,5,5,5)
realized.dif = mean(B)-mean(A);  realized.dif  # [1] 0.0015

set.seed(6497)
donations = stack(list(A=A, B=B))
values    = donations$values
ind       = donations$ind
difs      = vector(length=1000)
for(i in 1:1000){
  ind     = sample(ind)
  difs[i] = mean(values[ind=="B"])-mean(values[ind=="A"])
}
difs = sort(difs)
mean(difs>=realized.dif)    # [1] 0.459  # a 1-tailed test, if Ha: B>A a-priori
mean(difs>=realized.dif)*2  # [1] 0.918  # a 2-tailed test

RzRprop.test()

prop.test(rbind(c(10, 9990),
                c(15, 9985) ))
#  2-sample test for equality of proportions with continuity correction
# 
# data:  rbind(c(10, 9990), c(15, 9985))
# X-squared = 0.6408, df = 1, p-value = 0.4234
# alternative hypothesis: two.sided
# 95 percent confidence interval:
#   -0.0015793448  0.0005793448
# sample estimates:
# prop 1 prop 2 
# 0.0010 0.0015 

いい答えです。ABBAリンクが必要な場合は+2です。:)
アーロンはスタックオーバーフローを去り

+1良い議論、特に平均の比較について。莫大な寄付はないため、問題の例には、ほぼ通常のサンプリング分布があります。グループAの特定の値の寄付の数は2項であり、精度を高めるために、そのような数はすべてほぼ独立しています。t検定はうまくいくはずです。これは、ヌル分布のプロットですb <- function(n) dbinom(0:n, n, 1/2); p <- apply(expand.grid(b(1), b(1), b(4), b(6), b(10)), 1, prod); n <- as.matrix(expand.grid(0:1, 0:1, 0:4, 0:6, 0:10)) %*% c(50,40,20,10,5); plot(dist <- aggregate(p, list(n), sum))
whuber

1
私は批判的ではありませんが、ここで私が行くところです:最も高い数の寄付を調べることにより、t検定を使用するかどうかをすばやく決定できます。できない場合、平均の差はそれらの少数の外れ値に強く依存するため、有意ではない可能性があります。これらの観察結果は分析を簡素化し、また、通常の理論に基づくサンプルサイズの計算に基づいて、サンプルがどれだけ必要になるかを推定できることを示唆しています。ただし、順次サンプリング設計を使用するのがさらに良いでしょう。
whuber

1
@Torvonは順列テストですか?たくさんありますが、私はあなたがそれを必要とすることを疑います-これはかなり確立された一般的なテクニックです。
ガン-モニカの復活

1
@Torvonは、単に平均差を計算して保存するのではなく、MW Uを実行して保存します。
ガン-モニカの回復

1

@gungの答えは正しいです。しかし、あなたのデータは歪んでいる可能性があり、巨大な右裾があるため、平均はロバストでなく、分布の中心性を表す「正しい」インデックスではない可能性があることを付け加えます。したがって、中央値や切り捨て平均などのより堅牢なソリューションも試してみます。


4
@gungの最も重要な点の1つは、中央値と切り捨てられた平均値はおそらく無関係であることです。(「あなたの目的にぴったり」という段落を参照してください。)私たちは平均寄付について最も気にしています。したがって、堅牢なソリューションは手順が簡単に使用できますが、間違った質問に対する正しい答えを得るのはほとんど役に立たないか、さらに悪い場合もあります。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.