基本情報技術者

問5

基本情報技術者試験過去問 令和7年度(2025年)科目B問5

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

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

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

    -----------

    〔プログラム〕

    ○実数型の二次元配列: 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

    -----------

選択肢

正解と解き方・学習ポイント(AI解説)

正解:
あなたの回答:未回答

理論度数は、病気Xにかかるかどうかと予防接種の有無が独立だと仮定し、各マスの人数を(行合計×列合計)÷総合計で求めます。表1から総合計は154、行合計は(予防接種あり88、なし66)、列合計は(かからなかった140、かかった14)です。よってa=88×140÷154=80、b=66×14÷154=6となり、組合せは「オ」です。

不正解

a=44、b=33は、理論度数の式(行合計×列合計)÷総合計で計算した値になりません。よって誤りです。

不正解

a=58、b=8は、表1の観測度数(実際の集計値)をそのまま使った形であり、理論度数の計算結果になりません。よって誤りです。

不正解

a=70、b=7は、行合計と列合計、総合計から理論度数を計算した値と一致しません。よって誤りです。

不正解

a=75、b=2は、理論度数の式で求めた結果と一致しません。よって誤りです。

正解

a=80、b=6は、a=88×140÷154=80、b=66×14÷154=6となり、理論度数の定義に一致します。よって正解です。

不正解

a=80は一致しますが、b=8は観測度数であり、理論度数b=66×14÷154=6と一致しません。よって誤りです。

不正解

a=82、b=6は、aが観測度数82になっており、理論度数a=88×140÷154=80と一致しません。よって誤りです。

Point

この問題は、集計表を二次元配列として扱い、独立を仮定したときの理論度数を(行合計×列合計)÷総合計で計算できるかを確認することがねらいです。

解くために必要な知識

この問題を解くには、理論度数(期待度数)の定義と、表(集計表)を行・列の合計で扱う考え方が必要です。

用語の整理

用語 内容
二次元配列 行と列で値を持つ配列です。集計表の行と列に対応させて扱います。
行合計 表の同じ行にある値の合計です。
列合計 表の同じ列にある値の合計です。
総合計 表にある全ての値の合計です。
理論度数 2つの分類(この問題では「予防接種の有無」と「病気Xにかかるかどうか」)が独立だと仮定したときの人数です。

理論度数の計算式

理論度数は次の式で求めます。

理論度数 = (行合計 × 列合計) ÷ 総合計

プログラムfがしていること

  • tにdata全体の合計(総合計)を入れます。

  • result[r, c]に、行rの合計と列cの合計を掛けて、tで割った値を入れます。

  • これにより、表2の各マスの理論度数を計算しています。

問題の解法手順

解く手順

1. 表1の値を整理する

表1(集計結果)は次のとおりです。

  病気Xにかからなかった 病気Xにかかった
予防接種を受けた 82 6
予防接種を受けていない 58 8

2. 総合計 t を求める

t = 82 + 6 + 58 + 8 = 154

3. 行合計と列合計を求める

行合計

  • 予防接種を受けた行:82 + 6 = 88

  • 予防接種を受けていない行:58 + 8 = 66

列合計

  • 病気Xにかからなかった列:82 + 58 = 140

  • 病気Xにかかった列:6 + 8 = 14

4. a と b を理論度数の式で計算する

プログラムの代入文は、次の計算をしています。

result[r, c] = (行rの合計) × (列cの合計) ÷ t

表2より、a と b は次のマスです。

  • a:行「予防接種を受けた」× 列「病気Xにかからなかった」

  • b:行「予防接種を受けていない」× 列「病気Xにかかった」

計算

  • a = 88 × 140 ÷ 154 = 80

  • b = 66 × 14 ÷ 154 = 6

よって、a = 80、b = 6 なので正解は「オ」です。

選択肢ごとの解説

不正解

a=44、b=33は、理論度数の式(行合計×列合計)÷総合計で計算した値になりません。よって誤りです。

不正解

a=58、b=8は、表1の観測度数(実際の集計値)をそのまま使った形であり、理論度数の計算結果になりません。よって誤りです。

不正解

a=70、b=7は、行合計と列合計、総合計から理論度数を計算した値と一致しません。よって誤りです。

不正解

a=75、b=2は、理論度数の式で求めた結果と一致しません。よって誤りです。

正解

a=80、b=6は、a=88×140÷154=80、b=66×14÷154=6となり、理論度数の定義に一致します。よって正解です。

不正解

a=80は一致しますが、b=8は観測度数であり、理論度数b=66×14÷154=6と一致しません。よって誤りです。

不正解

a=82、b=6は、aが観測度数82になっており、理論度数a=88×140÷154=80と一致しません。よって誤りです。

まとめ

理論度数は、病気Xにかかるかどうかと予防接種の有無が独立だと仮定し、各マスの人数を(行合計×列合計)÷総合計で求めます。表1から総合計は154、行合計は(予防接種あり88、なし66)、列合計は(かからなかった140、かかった14)です。よってa=88×140÷154=80、b=66×14÷154=6となり、組合せは「オ」です。

順次、単語を追加予定です。もうしばらくお待ちください。