問5 集計表から理論度数を求める

基本情報​技術者試験 令和7年度 公開問題 科目B、全6問のうちの問5。

出典:令和7年度 基本情報技術者試験 公開問題 科目B 問5(表 1 と表 2 とプログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。表 2 の網掛け (表示していない部分) は「(網掛け)」と書いた。プログラムの 2 行にわたる式は原本どおり 2 行で書いた。空欄は[ a ][ b ]で、解答群の表は 1 行の文に組み直した)

次の記述中の[ a ]と[ b ]に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

予防接種の病気 X に対する予防効果を調査するために集めたデータの集計結果を基に,病気 X にかかるかどうかが,予防接種の有無に影響されないと仮定した場合の人数を計算する。この人数を理論度数という。表 1 に集計結果の例を示し,表 2 に表 1 を基に計算した理論度数を示す。

関数 f は,引数 data で受け取った集計結果を基に計算した理論度数を返す。引数と戻り値は二次元配列で,その行が表の行,その列が表の列に対応する。

表1 集計結果の例 (単位 人)
病気 X にかからなかった病気 X にかかった
予防接種を受けた8⁠26
予防接種を受けていない5⁠88

表は横に送ると続きが見えます。

表2 表 1 を基に計算した理論度数 (単位 人。原本では網掛けの部分は表示していない)
病気 X にかからなかった病気 X にかかった
予防接種を受けた[ a ](網掛け)
予防接種を受けていない(網掛け)[ b ]

表は横に送ると続きが見えます。

〔プログラム〕
○実数型の二次元配列: f(実数型の二次元配列: data)
実数型: t ← dataの要素の和
整数型: row ← dataの行数
整数型: col ← dataの列数
実数型の二次元配列: result ← {row行col列の 未定義の値}
整数型: r, c
for (r を 1 から row まで 1 ずつ増やす)
for (c を 1 から col まで 1 ずつ増やす)
result[r, c] ← (dataの行番号rの要素の和) ×
(dataの列番号cの要素の和) ÷ t
endfor
endfor
return result
  1. アa 4⁠4,b 3⁠3
  2. イa 5⁠8,b 8
  3. ウa 7⁠0,b 7
  4. エa 7⁠5,b 2
  5. オa 8⁠0,b 6
  6. カa 8⁠0,b 8
  7. キa 8⁠2,b 6
答えと解説を開く

正解はオです。

プログラムの result[r, c] ← (dataの行番号rの要素の和) × (dataの列番号cの要素の和) ÷ t をそのまま表 1 に当てはめます。t は全部の和で、8⁠2 + 6 + 5⁠8 + 8 = 1⁠5⁠4 です。行の和は、受けた人が 8⁠2 + 6 = 8⁠8、受けていない人が 5⁠8 + 8 = 6⁠6 です。列の和は、かからなかった人が 8⁠2 + 5⁠8 = 1⁠4⁠0、かかった人が 6 + 8 = 1⁠4 です。a は 1 行 1 列なので、8⁠8 × 1⁠4⁠0 ÷ 1⁠5⁠4 = 1⁠2⁠3⁠2⁠0 ÷ 1⁠5⁠4 = 8⁠0 です。b は 2 行 2 列なので、6⁠6 × 1⁠4 ÷ 1⁠5⁠4 = 9⁠2⁠4 ÷ 1⁠5⁠4 = 6 です。残りの 2 つは、1 行 2 列が 8⁠8 × 1⁠4 ÷ 1⁠5⁠4 = 8、2 行 1 列が 6⁠6 × 1⁠4⁠0 ÷ 1⁠5⁠4 = 6⁠0 で、8⁠0 + 8 = 8⁠8、6⁠0 + 6 = 6⁠6 と行の和も元の表と合います。正解はオです。

ほかの選択肢が違う理由

  • ア4⁠4 と 3⁠3 は、行の和 8⁠8 と 6⁠6 を半分にした数です。列の和で割り振っていないので、かかった人とかからなかった人の比が入っていません。
  • イ5⁠8 と 8 は、表 1 の予防接種を受けていない人の行をそのまま写した数です。計算した理論度数ではありません。
  • ウ7⁠0 と 7 は、列の和 1⁠4⁠0 と 1⁠4 を半分にした数です。行の和で割り振っていません。
  • エ7⁠5 と 2 は、行の和 × 列の和 ÷ 総数のどの組からも出てきません。
  • カa は合っていますが、8 は 1 行 2 列 (受けた人でかかった人) の理論度数です。b は 2 行 2 列で、6⁠6 × 1⁠4 ÷ 1⁠5⁠4 = 6 です。
  • キ8⁠2 と 6 は、表 1 の予防接種を受けた人の行をそのまま写した数です。計算した理論度数ではありません。

仕組み

理論度数は、2 つの事柄に関係が無いと仮定したときに、それぞれの欄に何人入るはずかを表す数です。その列の割合 (かかった列なら 1⁠4 ÷ 1⁠5⁠4、かからなかった列なら 1⁠4⁠0 ÷ 1⁠5⁠4) を、行ごとの人数に掛けて求める、と考えると式の意味が分かります。

実際の人数と理論度数がどれだけずれているかを調べると、予防接種に効果があるかどうかを判断できます。この比べ方をカイ二乗検定と呼びます。

この問に出る言葉