ランダムに選択された質問のテストで、生徒が他の生徒よりも良いスコアを獲得する確率はどのくらいですか?


7

セットがあるとします S100 質問とあります 2 学生 a そして b

しましょう Pai 確率である a 質問に答えます i 正しく、そして Pbi 同じ b

すべて Pai そして Pbi のために与えられています i=1...100

試験を想定する E 取ることによって作られています 10 からのランダムな質問 S

どのように私はの確率を見つけることができます a より良いスコアを得る b


組み合わせのチェックと確率の比較を考えたのですが、数が多くて時間がかかるのでアイデアが足りませんでした。


しましょう A そして B 正解の数である a そして bそれぞれ。次に、総確率の法則によって:P(A>B)=x=0sP(A>B|B=x)P(B=x)。確率が質問ごとに異なる(つまり、確率がiに依存する)場合、個々の確率を評価するには、考えられるすべての組み合わせを調べる必要があります。可能な救済策... 1.これは、コンピューターを使用して、総当たりで確率を計算することは依然として妥当です。2.確率が(限界的に)依存しないと仮定できる場合iの場合、これは単純な二項分布です。
knrumsey 2018

@knrumseyすべて Pai そして Pbi 固定値であり、あなたは仮定することができます Pai そして Pbi 最初はランダムに定義されています i=1...100。コンピュータを使用することは可能であり、実際にはそれを使用していますが、組み合わせは合計されます100!10!(10010)!反復するのはかなり大きい
ダニエル

ランダムに生成された意味は何ですか pai?もしpai そして pbi あまり大きく変化しないでください i、それから多分二項仮定は妥当な近似を提供するでしょう。設定pa=1si=1spai 同様に pb
knrumsey

さらに2つのコメント: pai そして pbi 同じディストリビューションから生成され、 P(A>B)1/2に等しくなければなりません。次に、近似で問題がなければ、モンテカルロシミュレーションを実行して確率を推定します。
knrumsey 2018

各反復で、 P(A>B)=P(A)(1P(B))なぜなら、Aは、Aが正しく、Bが間違っている場合にのみ優れているからです。したがって、特定の質問について、Aが正しい時間の90%で、Bが正しい時間の80%である場合、Aが正しいこととBが間違っていることの結合確率は0.90.2=0.18これで、選択した10個すべての質問を通過し、この同時確率に基づいてポイントをAまたはBに割り当てるコードを記述できます。最後に、勝者はより多くのポイントを持つものです。これを何千回も実行し、AがBに勝つ確率を確認します。これは、モンテカルロと呼ばれることがあります。
クールビーンズ

回答:


6

動的プログラムは、これを短時間で処理します。

生徒へのすべての質問を管理し、ランダムにサブセットを選択するとします Ik=10 全部なくなって n=100質問。確率変数を定義しましょうXi 問題の2人の生徒を比較する i: に設定 1 学生Aが正しく、学生Bが正しくない場合、 1 学生Bが正しく、学生Aが正しくない場合 0さもないと。合計

XI=iIXi

の質問のスコアの違いです I. 計算したい Pr(XI>0). この確率は、との結合分布から得られIXi.

の分布関数はXi、学生が独立して応答するという仮定の下で容易に計算されます。

Pr(Xi=1)=Pai(1Pbi)Pr(Xi=1)=Pbi(1Pai)Pr(Xi=0)=1Pr(Xi=1)Pr(Xi=0).

簡略化して、これらの確率をそれぞれと呼びます。書くai, bi,di,

fi(x)=aix+bix1+di.

この多項式は、確率生成関数ですXi.

有理関数を考える

ψn(x,t)=i=1n(1+tfi(x)).

(実際には、は多項式です。非常に単純な有理関数です。) xnψn(x,t)

が多項式として展開される場合、係数は異なるのすべての可能な積の合計から構成され これが唯一の力のための非ゼロ係数を有する有理関数となるから介しては一様にランダムに選択されるため、これらのべき乗の係数は合計が1になるように正規化すると、スコアの差の確率生成関数になります。 べき乗はサイズに対応しψnttkkfi(x).xxkxk. Ix,I.

この分析のポイントは、簡単かつ合理的な効率で計算できることψ(x,t)です多項式を順番に乗算するだけです。これを行うことの係数保持する必要でするために(もちろん、これらの部分積のいずれかに現れるすべての高次のべき乗を無視することもできます)。したがって、すべての必要な情報は、によって運ばで表すことができるの電力によってインデックス付け行と、行列(から貫通によってインデックス付け)と列n1,t,,tkψj(x,t)j=0,1,,n.tψj(x,t)2k+1×n+1xkk0 使って k

計算の各ステップには、この行列のサイズに比例する作業が必要です。 O(k2). ステップ数を説明すると、これは O(k2n)-時間、 O(kn)-空間アルゴリズム。それは小さいためにそれはかなり速くなりますk. 私はそれをR(過度の速度で知られていない)のために実行しましたk まで 100 そして n まで 105,(シングルコアで)9秒かかります。との設定でn=100 そして k=10, 計算には 0.03 秒。

ここに例があります Pai の間の一様なランダム値です 0 そして 1 そしてその Pbi それらの正方形です(これは常に Pai、それによって学生A)を強く支持します。この正味スコアのヒストグラムで要約されているように、私は100,000の試験をシミュレートしました。

![図

青いバーは、学生AがBよりも良いスコアを出した結果を示しています。赤い点は、動的プログラムの結果です。彼らはシミュレーションに美しく同意します(χ2 テスト、 p=51%)。 この場合、すべての正の確率を合計すると答えが得られます。0.7526.

この計算は求められた以上の結果をもたらすことに注意してください:すべての試験のスコアの差の確率分布全体を生成しますk 以下のランダムに選択された質問。


機能する実装を使用または移植したい人のためにR、シミュレーションを生成し(vectorに格納Simulation)、動的プログラムを実行する(結果は配列P)コードを次に示します。repeat最後のブロックは、すべての非常にまれな結果を集約するだけであり、χ2テストは明らかに信頼できるようになります。(ほとんどの場合、これは問題ではありませんが、ソフトウェアが文句を言うのを防ぎます。)

n <- 100
k <- 10
p <- runif(n) # Student A's chances of answering correctly
q <- p^2      # Student B's chances of answering correctly
#
# Compute the full distribution.
#
system.time({
  P <- matrix(0, 2*k+1, k+1) # Indexing from (-k,0) to (k,k)
  rownames(P) <- (-k):k
  colnames(P) <- 0:k
  P[k+1, 1] <- 1
  for (i in 1:n) {
    a <- p[i] * (1 - q[i])
    b <- q[i] * (1 - p[i])
    d <- (1 - a - b)
    P[, 1:k+1] <- P[, 1:k+1] + 
      a * rbind(0, P[-(2*k+1), 1:k]) + 
      b * rbind(P[-1,  1:k], 0) + 
      d * P[,  1:k]
  }
  P <- apply(P, 2, function(x) x / sum(x))
})
#
# Simulation to check.
#
n.sim <- 1e5
set.seed(17)
system.time(
  Simulation <- replicate(n.sim, {
    i <- sample.int(n, k)
    sum(sign((runif(k) <= p[i]) - (runif(k) <= q[i]))) # Difference in scores, A-B
  })
)
#
# Test the calculation.
#
counts <- tabulate(Simulation+k+1, nbins=2*k+1)
n <- sum(counts)
k.min <- 5
repeat {
  probs <- P[, k+1]
  i <- probs * n.sim >= k.min
  z <- sum(probs[!i]) 
  if (z * n >= 5) break
  if (k.min * (2*k+1) >= n) break
  k.min <- ceiling(k.min * 3/2)
}
probs <- c(z, probs[i])
counts <- c(sum(counts[!i]), counts[i])
chisq.test(counts, p=probs)
#
# The answer.
#
sum(P[(1:k) + k+1, k+1]) # Chance that A-B is positive

2

各反復で、

P(A>B)=P(A)(1P(B))

なぜなら、Aは、Aが正しく、Bが間違っている場合にのみ優れているからです。したがって、特定の質問について、Aが90%の確率で正しく、Bが80%の確率で正しい場合、Aが正しく、Bが間違っているという共同確率は

P(A,B)=0.90.2=0.18

これで、選択した10個すべての質問を通過し、この同時確率に基づいてポイントをAまたはBに割り当てるコードを記述できます。各試験の終わりに、勝者は最も多くのポイントを持つものです。これを何度も行い、AがBに勝つ確率を確認します。

これを行ういくつかのコードをここに書きました:https : //nbviewer.jupyter.org/github/kevinmcinerney/exam_probabilities/blob/master/exam_probabilities.ipynb

グラフはリンクに表示されませんが、次のようになります。

このシミュレーションは値を使用しました Pai=Pbi=0.5

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

この例では、それぞれが25の質問で構成される1000の試験を実行しましたが、すべてが同じ100の質問のセットを形成します。Y軸は、試験でAがBよりも優れていた確率です。(0-1000)の検査番号はX軸に沿っています

AとBの両方がランダムなPで問題を正解したため、グラフは50%に収束しました。私は25の質問を使用しました。10は100の質問を含む母集団の代表ではないためです。10個の質問を使用すると、グラフは50%近くまたは50%前後に収束する可能性が高くなります。3つの行は3つの個別の試験です。


1
グラフが収束しないことを願っています50%. とき Pai そして Pbi の間に独立して均一に分布している 0 そして 1, 彼らは非常に近い値に収束する必要があります 41%. これは、(a)両方の生徒がより高いスコアで出てくる可能性が等しく、(b)約 18%彼らが結ぶチャンス。
whuber

私の答えは明確ではありませんでしたが、使用したシミュレーションは Pai=Pbi=0.5.以前の例で使用された確率0.8および0.9ではありません。それは明確ですか、それとも私はあなたの要点をまだ逃していますか?
クールビーンズ

1
あなたはポイントを逃します:どれも (Pai,Pbi) ペアは (0,1) または (1,0),生徒が同じ合計スコアを獲得する前向きなチャンスがあります。したがって、例のようにこれらのペアがすべて等しい場合、一方の生徒のスコアが他方の生徒のスコアを50%の確率で超えることは不可能になります。あなたの例では、可能性はわずか41%です。プロットを詳しく見ると、41%と一致しているが50%とは一致していないことがわかります。(すべての確率が等しいため、ケースの正確な答えは簡単に取得できます:41%は近似値です215955/524288.
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.