1964年公民権法の採決
1964年の公民権法は、米国で可決された中でも最も重要な法律の一つです。「出席(present)」と「棄権(abstain)」を除くと、下院では民主党153名と共和党136名が賛成票を投じました。一方で、民主党91名と共和党35名が反対しました。党派は投票行動に影響したのでしょうか?
この問いに答えるために、下院議員の党派が投票に影響しないという仮説を評価します。検定統計量として民主党の賛成割合を用い、観測された 153/244 と同じかそれ以下の民主党賛成割合が得られる確率を評価します。(そうです、「以下」です。1964年当時、公民権問題では民主党のほうが相対的に保守的でした。)そのために、まず下院議員の党派ラベルを置換してから、便宜的に「Democrats」と「Republicans」に分け、民主党の賛成割合を計算します。
この演習はコースの一部です
Pythonで学ぶ統計思考(パート2)
演習の手順
- それぞれの党の投票を含むブール配列
demsとrepsを作成します。例:demsはTrueが153個、Falseが91個です。 - 関数
frac_yea_dems(dems, reps)を作成し、民主党の賛成割合を返すようにします。最初の入力はブール配列です。draw_perm_reps()を使うために2つの入力を受け取りますが、2つ目は使用しません。 - 作成した
draw_perm_reps()関数を使って、民主党の賛成割合の置換リプリケートを 10,000 個生成します。 - p値を計算して表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Construct arrays of data: dems, reps
dems = np.array([True] * 153 + [False] * 91)
reps = ____
def frac_yea_dems(dems, reps):
"""Compute fraction of Democrat yea votes."""
frac = ____ / ____
return frac
# Acquire permutation samples: perm_replicates
perm_replicates = ____(____, ____, frac_yea_dems, ____)
# Compute and print p-value: p
p = np.sum(____ <= 153/244) / len(____)
print('p-value =', p)