見出し画像

高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)12日目「標本抽出(サンプリング)を考える」

マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 12日目 課題

おはようございます。

本日は、高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)の12日目です。

本日の課題は、標本抽出(サンプリング)を行うプログラムを作成することです。


標本抽出(サンプリング)

まず、標本抽出(サンプリング)の方法についてまとめておきます。

復元抽出・非復元抽出

母集団から大きさ$${n}$$の標本を無作為に抽出し、その$${n}$$個の要素における変量の値を$${X_1, X_2, \cdots, X_n}$$とする。

復元抽出
母集団から大きさ 1 の標本を無作為に抽出するという試行を$${n}$$回繰り返す反復試行。$${X_1, X_2, \cdots, X_n}$$は、それぞれが母集団分布に従う互いに独立な確率変数となる。

非復元抽出
母集団から大きさ 1 の標本を無作為に抽出するという試行を、抽出した標本を母集団から除外しながら$${n}$$回繰り返す反復試行。$${X_1, X_2, \cdots, X_n}$$は、母集団分布に従う互いに独立な確率変数とはならない。ただし、
母集団の大きさが標本の大きさ$${n}$$に比べて十分大きい場合には、近似的に復元抽出による標本とみなすことができ、$${X_1, X_2, \cdots, X_n}$$は、それぞれが母集団分布に従う互いに独立な変数と考えてよい。


課題

母集団$${ \{ \mathrm{A, B, C, D, E} \} }$$から、大きさ 2 の標本を次のように抽出するとき、各場合の可能な標本をすべてあげて、コンソールに出力するプログラムを作成してください。

(1) 復元抽出
(2) 非復元抽出で続けて取り出す。
(3) 非復元抽出で同時に取り出す。


ヒント

今回の課題では、基本的に母集団$${ \{ \mathrm{A, B, C, D, E} \} }$$から1つ目の文字を取り出したあと、2つ目の文字を取り出すようにプログラムを作成していきます。その中で、条件を課すことで各抽出方法に合わせた抽出ができるようにプログラムを調整していきます。
まず、(1)は復元抽出ですので、特に条件をかけることなく標本抽出を行います。
(2)は非復元抽出で続けて取り出すので、1つ目の文字が2つ目に出てくることはありません。したがって、1つ目の文字と2つ目の文字が異なる場合のみを標本抽出するようにします。
(3)は非復元抽出で同時に取り出すので、1つ目の文字が2つ目に出てくることはない上、標本$${ \mathrm{AB} }$$と標本$${ \mathrm{BA} }$$とは同じものになります。したがって、母集団$${ \{ \mathrm{A, B, C, D, E} \} }$$がこの順番で要素を持っているとして、1つ目の文字を取り出したら2つ目の文字は1つ目の文字より後に出てくるもののみを扱うようにします。


プログラム

ヒントを踏まえて、課題の標本抽出を行うプログラムは、以下のように記述することができます。

// 標本抽出(サンプリング)
void setup(){

  // 母集団
  String[] x = {"A","B","C","D","E"}; 

  // (1) 復元抽出
  println("(1) 復元抽出");
  for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
      print(x[i] + x[j] + " ");
    }
    println();
  }
  println();
  // (2) 非復元抽出で続けて取り出す。
  println("(2) 非復元抽出で続けて取り出す。");
  for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
      if(){ // 非復元抽出では同じ文字の抽出はない
        print(x[i] + x[j] + " ");
      }
    }
    println();
  }
  println();
  // (3) 非復元抽出で同時に取り出す。
  println("(3) 非復元抽出で同時に取り出す。");
  for(int i=0; i<5; i++){
    for(int j=; j<5; j++){ // 同時に取り出すのでABとBAなどは同じ標本
      print(x[i] + x[j] + " ");
    }
    println();
  }
  
}

ソースコード1 標本抽出を行うプログラム(未完成)

ソースコード1では、「(2) 非復元抽出で続けて取り出す。」の処理の

      if(){ // 非復元抽出では同じ文字の抽出はない

の部分の条件式と、「(3) 非復元抽出で同時に取り出す。」の処理の

    for(int j=; j<5; j++){ // 同時に取り出すのでABとBAなどは同じ標本

の部分の初期値が記載されておらず、プログラムは未完成となっています。
ヒントを踏まえて、抜けている箇所に追記してソースコード1を完成させてください。


なお、スケッチ名は「sampling」としてください。


それでは、よろしくお願いします。

MK's papa

いいなと思ったら応援しよう!