見出し画像

高校数学をプログラミングで解く(数学B編)「4-8 母集団と標本」

マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 4-8 母集団と標本


はじめに

今回は、数学Bで学ぶ「母集団と標本」について、母平均、母標準偏差を計算するプログラムや標本抽出を行うプログラムを作成します。

母集団と標本

まず、母集団と標本について解説しておきます。

母集団
調査対象となる数値、属性等の源泉となる集合全体。
(※統計学の目的の一つは、観測データの標本から母集団の性質を明らかにすることである。)

標本
母集団の部分集合。

無作為標本
無作為抽出法(ランダム・サンプリング)によって選ばれた標本。

母集団分布
母集団における変量の分布、平均値、標準偏差を、それぞれ 母集団分布母平均母標準偏差 という。これらは、大きさ 1 の無作為標本について、変量の値を確率変数とみたときの確率分布、期待値、標準偏差と一致する。

復元抽出・非復元抽出

母集団から大きさ$${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}$$は、それぞれが母集団分布に従う互いに独立な変数と考えてよい。

母平均、母分散、母標準偏差を計算する

今回は次のような問題を考えてみます。

問題1
1, 2, 3の数字を記入した玉が、それぞれ2個、3個、5個の計10個袋に入っている。これを母集団として、次の問いに答えよ。
(1) 玉に書かれている数字の母集団分布を求めよ。
(2) 母平均$${m}$$、母分散$${\sigma^2}$$、母標準偏差$${\sigma}$$を求めよ。

アルゴリズム設計

問題1(1)の母集団分布については事前に求めておきます。

$$
\begin{array}{c||ccc|c}
\hline
X & 1 & 2 & 3 & \mathrm{計} \\
\hline
P & 2/10 & 3/10 & 5/10 & 1 \\
\hline
\end{array}
$$

この母集団分布は母平均、母分散、母標準偏差を計算するプログラムで利用します。
あとは問題1(2)をプログラミングするだけです。上記の解説のところであったように、母集団分布、母平均、母標準偏差は、大きさ 1 の無作為標本について、変量の値を確率変数とみたときの確率分布、期待値、標準偏差と一致します。これを利用して、母平均、母分散、母標準偏差を計算するプログラムを作成します。

プログラム

では、母平均、母分散、母標準偏差を計算するプログラムを作成していきます。

// 母平均、母分散、母標準偏差の計算
void setup(){

  // 確率変数の値
  int[] x = {1,2,3}; 
  // 母集団分布P
  float[] p = {2.0/10.0, 3.0/10.0, 5.0/10.0};

  // 母平均の計算
  float m = 0;
  for(int i=0;i<3;i++){
    m = m + x[i]*p[i];
  }
  
  // 母分散の計算
  float v = 0;
  for(int i=0;i<3;i++){
    v = v + (x[i]-m)*(x[i]-m)*p[i];
  }
  
  // 母標準偏差の計算
  float sigma = sqrt(v);
  
  // 母平均、母分散、母標準偏差の値をコンソールに出力
  println("母平均  :", m);
  println("母分散  :", v);
  println("母標準偏差:", sigma);
  
}

ソースコード1 母平均、母分散、母標準偏差を計算するプログラム

このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「MeanValue_etc_StatisticalPopulation」としています)、テキストエデ
ィタ部分に書いて実行します。

図1 スケッチ「MeanValue_etc_StatisticalPopulation」の実行結果

図1のように、問題1の母集団に対する母平均、母分散、母標準偏差を

母平均  : 2.3
母分散  : 0.61
母標準偏差: 0.781025

とコンソールに出力します。

なお、このプログラム(ソースコード1)は、記事『高校数学をプログラミングで解く(数学B編)「4-2 確率変数の期待値と分散」』で作成したスケッチ「ExpectedValue_Variance」を再利用して作成しています。これは、「母集団分布、母平均、母標準偏差は、大きさ 1 の無作為標本について、変量の値を確率変数とみたときの確率分布、期待値、標準偏差と一致する」ことを考慮しています。

標本抽出(サンプリング)してみる

今度は、標本抽出(サンプリング)する問題を考えてみます。

問題2
母集団{ A, B, C, D, E }から、大きさ 2 の標本を次のように抽出するとき、各場合の可能な標本をすべてあげよ。
(1) 復元抽出
(2) 非復元抽出で続けて取り出す。
(3) 非復元抽出で同時に取り出す。

アルゴリズム設計

今回の問題2では、基本的に母集団{ A, B, C, D, E }から1つ目の文字を取り出したあと、2つ目の文字を取り出すようにプログラムを作成していきます。その中で、条件をかけることで各抽出方法に合わせた抽出ができるようにプログラムを調整していきます。
まず、(1)は復元抽出ですので、特に条件をかけることなく標本抽出を行います。
(2)は非復元抽出で続けて取り出すので、1つ目の文字が2つ目に出てくることはありません。したがって、1つ目の文字と2つ目の文字が異なる場合のみを標本抽出するようにします。
(3)は非復元抽出で同時に取り出すので、1つ目の文字が2つ目に出てくることはない上、標本ABと標本BAとは同じものになります。したがって、母集団{ 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(i != j){ // 非復元抽出では同じ文字の抽出はない
        print(x[i] + x[j] + " ");
      }
    }
    println();
  }
  println();
  // (3) 非復元抽出で同時に取り出す。
  println("(3) 非復元抽出で同時に取り出す。");
  for(int i=0; i<5; i++){
    for(int j=i+1; j<5; j++){ // 同時に取り出すのでABとBAなどは同じ標本
      print(x[i] + x[j] + " ");
    }
    println();
  }
  
}

ソースコード2 標本抽出(サンプリング)を行うプログラム

このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「sampling」としています)、テキストエデ
ィタ部分に書いて実行します。

図2 スケッチ「sampling」の実行結果

図2のように、問題2の各抽出方法に対する標本抽出結果を

(1) 復元抽出
AA AB AC AD AE
BA BB BC BD BE
CA CB CC CD CE
DA DB DC DD DE
EA EB EC ED EE

(2) 非復元抽出で続けて取り出す。
AB AC AD AE
BA BC BD BE
CA CB CD CE
DA DB DC DE
EA EB EC ED

(3) 非復元抽出で同時に取り出す。
AB AC AD AE
BC BD BE
CD CE
DE

とコンソールに出力します。

まとめ

今回は、数学Bで学ぶ「母集団と標本」について、母平均、母標準偏差を計算するプログラムや標本抽出を行うプログラムを作成しました。
母平均、母分散、母標準偏差を計算するプログラムでは、あらかじめ母集団分布を求めておいて、それに基づき母平均、母分散、母標準偏差を計算するようにしました。
また、標本抽出(サンプリング)を行うプログラムでは、各抽出方法に合わせた抽出ができるように条件をかけることでプログラムを調整しました。実際に設定した条件自体はシンプルですが、各抽出方法に合わせた条件の設定はアルゴリズム設計の勉強になるでしょう。そして、この記事では『アルゴリズム設計』の節で説明した条件設定にしましたが、もっと良い条件設定方法もあるかもしれません。それを考えてみるのも勉強になると思いますので、ちょっと考えてみてください。

参考文献

改訂版 教科書傍用 スタンダード 数学B(数研出版、ISBN9784410209468)

母集団(Wikipedia) https://ja.wikipedia.org/wiki/母集団


この記事が気に入ったらサポートをしてみませんか?