「標本調査」について学ぶ(統計学)
この記事では、初めて統計学を学ぶ筆者が、「標本調査」について学んだ内容について記載しています。
学習には、Wikipediaの「標本調査」の記事を参考にし、Pythonのプログラミングにも触れ、理解を深めました。
プログラミングには、機械学習ライブラリのscikit-learnを使用しました。
この記事は、他の人が参考にできるよう、わかりやすく書くことを心がけました。
標本調査
標本調査は、母集団全体を調査することが難しい場合に、母集団からランダムに選ばれたサンプルを調査することで、母集団の特徴を統計的に推定する方法です。
標本調査とは、母集団をすべて調査対象とする全数調査(悉皆調査)に対して、母集団から標本を抽出して調査し、それから母集団の性質を統計学的に推定する方法である。
標本調査
全数調査に比べて費用や時間、労力が少なくて済むため、一般的に標本調査が選ばれます。
全数調査は一般に以下のような理由によって不可能なことが多いので、標本調査が必要になる。
・物品を対象とする場合、破壊検査では調査すること自体が調査目的に合わない。全数検査は非破壊的検査に限る。
・費用・手間・時間がかかる。
・例えば医学・心理学などの調査では、全人類(これから生まれる人も含む)が母集団になり、全数調査は費用・手間・時間が問題となるので調査は不可能。
標本調査
標本調査は、以下のステップで行われます。
- 対象となる母集団の定義
- 抽出の枠の設定
- 抽出方法の特定
- 抽出とデータ収集/データ分析
- 再調査
標本調査は次のような段階を踏んで行われる。
1. 対象とする母集団の定義
2. 抽出の枠(測定する要素のリスト)の設定
3. 枠から要素を選択する(標本抽出)方法の特定
4. 標本抽出とデータ収集データ解析
5. 再調査
標本調査
最初に、対象となる母集団を定義します。例えば、ある製品を購入する顧客全体が母集団の場合、その顧客を対象にした標本調査を行います。
次に、抽出の枠を設定します。これは、標本をどのように抽出するかの基準を定めることです。たとえば、年齢、性別、地域などの属性で枠を設定することができます。
その後、抽出方法を特定し、ランダムに標本を抽出します。
データ収集では、標本から必要なデータを集めます。
データ分析では、集めたデータを統計的に分析し、母集団の特徴を推定します。
最後に、再調査を行うことで、誤差を修正します。
標本調査は、調査方法によっては誤差が生じる場合があります。しかし、正しい方法で行われる場合は、全数調査に比べて費用や時間、労力を節約することができ、母集団の特徴を正確に把握することができます。
母集団の定義
標本調査を行う際に最初に行うステップの一つが、調査対象となる母集団の定義です。
母集団とは、調査を行う対象全体のことを指します。
たとえば、ある商品の購買履歴を調査する場合、その商品を購入した全ての人々が母集団となります。
母集団を正確に定義することは、調査の信頼性を高める上で非常に重要です。
定義が曖昧だったり、誤解が生じるような表現を用いたりすると、調査結果が正確ではなくなる場合があります。
したがって、標本調査を行う前に、対象となる母集団を明確に定義し、それに基づいて調査を進める必要があります。
まず問題を定義する。例えば商品の一部を調べる場合、その商品全体が母集団である。一方動物実験のように、母集団を特定すること(実験データの理想化)がむしろ目的となる場合もある。
標本調査
Pythonプログラミング
「母集団の定義」をイメージしやすいよう、pythonでのプログラミングについても学びます。
scikit-learn トイデータセット
機械学習ライブラリscikit-learnに用意されている「トイデータセット」を使います。トイデータセットは、機械学習の問題を解くためのサンプルデータセットのことで、いくつかの種類が用意されています。例えば、Iris(アヤメ)の花の特徴から、その種類を分類する問題を解くための「irisデータセット」や、ボストン市の住宅価格に関するデータを用いて、住宅価格を予測する問題を解くための「bostonデータセット」などがあります。
これらのデータセットを使って、母集団に対する標本調査をイメージすることができます。例えば、Irisデータセットを用いて、アヤメの種類を分類する問題を考えます。このデータセットには、3種類のアヤメの花の特徴が記録されています。
ここで、このデータセットが母集団であると考え、その中からランダムに10個のデータを抽出し、標本とします。この標本を用いて、母集団全体のアヤメの種類の比率を推定することができます。
このように、トイデータセットを使って、母集団に対する標本調査をイメージすることができます。ただし、トイデータセットはあくまでも簡単な例であり、現実の調査ではより複雑なデータや抽出方法が必要となります。
scikit-learnにはいくつかの小さな標準データセットが付属しており、外部のウェブサイトからファイルをダウンロードする必要はありません。
これらは以下の関数を使って読み込むことができます。
load_boston() : load_boston は 1.0 で非推奨となり、1.2 で削除される予定である。
load_iris() : アヤメのデータセット(分類)をロードして返す。
load_diabetes() : 糖尿病のデータセット(回帰)をロードして返す。
load_digits() : 数字のデータセット(分類)をロードして返す。
load_linnerud() : 身体運動のデータセットをロードして返す。
load_wine() : ワインのデータセット(分類)をロードして返す。
load_breast_cancer() : ウィスコンシン州の乳がんのデータセット(分類)をロードして返す。
7.1. Toy datasetsts
アヤメのデータセット
アヤメのデータセットは、機械学習における代表的なデータセットの1つであり、サンプルデータの中でも特に有名なものの1つです。
アヤメのデータセットには、ヒオウギアヤメ(Iris-Setosa)、アイリス・バージカラー(Iris Versicolour)、アイリス・ヴァージニカ(Iris Virginica)の3種類のアヤメが含まれており、各々50件のデータがあります。データには、「がく片の長さ」、「がく片の幅」、「花びらの長さ」、「花びらの幅」といった4つの属性があり、また3種のアヤメの分類に関するデータも含まれています。
Iris Setosa (ヒオウギアヤメ)
アラスカ、メイン、カナダ(ブリティッシュコロンビア、ニューファンドランド、ケベック、ユーコンなど)、ロシア(シベリアなど)、アジア北東部、中国、韓国、日本など北極海を越えて広く分布する根生葉の多年草です。
茎は高く伸び、葉は中緑色、花は紫、紫紺、青、ラベンダー色です。また、ピンクや白の花を咲かせる植物もあります。
Iris Versicolour (アイリス・バージカラー)
北アメリカ、アメリカ東部とカナダ東部に自生するアヤメの一種です。スゲ草地や湿地、川岸や海岸に普通に見られます。
特異形質バージカラー(versicolor)は「様々な色彩の」という意味です。
Iris Virginica (アイリス・ヴァージニカ)
北アメリカ東部原産の多年草です。アメリカ南東部のフロリダ州からジョージア州にかけての海岸平野によく見られます。
プログラム
以下は、アヤメのデータセットをpandasのデータフレームに読み込み、最初の5行を出力するpythonプログラムです。
import pandas as pd
from sklearn.datasets import load_iris
# アヤメのデータセットを読み込み
iris = load_iris()
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
# 最初の5行を出力
print("アヤメのデータセットの最初の5行")
print(df.head())
実行結果
最初の5件のデータについて、以下の情報が出力されました。
「sepal length(がく片の長さ)」、「sepal width(がく片の幅)」、「petal length(花びらの長さ)」、「petal width(花びらの幅)」の値と「Species(アヤメの分類)」が含まれます。
アヤメのデータセットの最初の5行
sepal length (cm) sepal width (cm) ... petal width (cm) Species
0 5.1 3.5 ... 0.2 setosa
1 4.9 3.0 ... 0.2 setosa
2 4.7 3.2 ... 0.2 setosa
3 4.6 3.1 ... 0.2 setosa
4 5.0 3.6 ... 0.2 setosa
[5 rows x 5 columns]
プログラムの説明
import pandas as pd
from sklearn.datasets import load_iris
pandasというライブラリをpdという名前でimportしています。
scikit-learnという機械学習ライブラリから、Irisデータセットを読み込んでいます。
# アヤメのデータセットを読み込み
iris = load_iris()
iris変数にload_iris()関数を使って、Irisデータセットを読み込んでいます。
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
Irisデータセットのデータ部分をデータフレームに格納しています。iris.dataには4つの特徴量(属性)が含まれます。この4つの特徴量の名前はiris.feature_namesに含まれているので、列名として指定しています。
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
Irisデータセットの分類部分をデータフレームに追加しています。Irisデータセットのtargetには、各データの分類情報が数値として含まれています。この数値に対応するアヤメの種類名は、iris.target_namesに含まれているので、この情報を使ってデータフレームに追加しています。
# 最初の5行を出力
print("アヤメのデータセットの最初の5行")
print(df.head())
データフレームの最初の5行を出力しています。head()関数を使うことで、データフレームの最初のn行を取得できます(ここではn=5)。
標本抽出
抽出の枠
次に、母集団の各要素を特定するために、抽出枠を設定します。抽出枠は、母集団を代表するものでなければならず、統計学だけでなく各分野での判断が必要です。
次に、各要素を識別するための抽出枠(リスト)を設定する。 抽出枠は母集団を代表するものでなければならないが、これには統計学だけでなく個別の分野での判断も重要である。
標本調査
抽出枠が母集団を代表していなければ、サンプル数が多くても、調査結果に偏りが生じる可能性があります。
選挙の世論調査の場合、例えばインターネット上で行われるオンライン調査では、アクセスできる人の層によって偏りが生じることがあります。
富裕層の方がインターネットにアクセスしやすいため、調査結果が富裕層に偏る可能性があります。そのため、調査方法を慎重に選択し、標本の偏りを最小限に抑えることが重要です。
一例を挙げると、1936年のアメリカ大統領選で、Literary Digestは230万人の調査から、対立候補がF.D.ルーズベルト候補に勝つ(57%対43%)と予想した。しかし、世論調査会社ギャラップははるかに少ない人数の調査からルーズベルトの勝利を予想し、結局こちらが正しかった。Literary Digestの調査では、電話や自動車の保有者リストを用いたことや、1,000万の調査対象に対し230万の有効回答しか得られなかったこと、読者層に保守派が多かったことなどが原因となって、標本のサイズが莫大だったにもかかわらず富裕層に偏ってしまった。同じようなことは、近年のインターネットによる調査でも問題になっている。
標本調査
抽出枠の設定方法には、「単純抽出」、「層化(層別)抽出(層別抽出法)」、「クラスター抽出」、「割り当て抽出(クォータ・サンプリング)」などがあります。それぞれの方法によって、どのように抽出するかが異なります。
たとえば、層化抽出は母集団を複数の層に分け、各層からランダムに抽出する方法で、各層に含まれる要素の特性に応じた適切なサンプルを抽出することができます。一方、クラスター抽出は、母集団を小さなグループに分け、それらのグループをランダムに抽出する方法で、データ収集の効率が向上する場合があります。
単純抽出
単純抽出は、母集団のすべての要素を同じ確率で抽出する方法です。つまり、抽出枠に分けずに、母集団からランダムにサンプリングします。この方法では、母集団のすべての要素を平等に扱います。
これは全要素を平等に扱い、分割はしない方法である。
標本調査
Pythonプログラミング
「単純抽出」をイメージしやすいよう、pythonでのプログラミングについても学びます。
プログラム
機械学習ライブラリscikit-learnで提供されているアヤメのデータセットを「母集団」として、10件の無作為(ランダム)な「単純抽出」を行います。
import pandas as pd
from sklearn.datasets import load_iris
# アヤメのデータセットを読み込み
iris = load_iris()
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
# 10件の単純抽出を行う
sample = df.sample(n=10, random_state=0)
print(sample)
実行結果
10件のデータが無作為に抽出され、出力されました。
sepal length (cm) sepal width (cm) ... petal width (cm) Species
114 5.8 2.8 ... 2.4 virginica
62 6.0 2.2 ... 1.0 versicolor
33 5.5 4.2 ... 0.2 setosa
107 7.3 2.9 ... 1.8 virginica
7 5.0 3.4 ... 0.2 setosa
100 6.3 3.3 ... 2.5 virginica
40 5.0 3.5 ... 0.3 setosa
86 6.7 3.1 ... 1.5 versicolor
76 6.8 2.8 ... 1.4 versicolor
71 6.1 2.8 ... 1.3 versicolor
[10 rows x 5 columns]
プログラムの説明
import pandas as pd
from sklearn.datasets import load_iris
# アヤメのデータセットを読み込み
iris = load_iris()
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
「母集団の定義」で記載されている内容と同じですので、説明を省略します。
# 10件の単純抽出を行う
sample = df.sample(n=10, random_state=0)
DataFrameから10件のランダムなデータを取り出し、sample変数に代入します。ランダムな抽出は、pandasのsample()
関数を使用して実行します。random_stateを0に設定することで、再現性を保つことができます。
print(sample)
ランダムに抽出した10件のデータを表示します。
層化(層別)抽出(層化抽出法)
層化抽出法は、母集団が複数の異なるカテゴリに属する場合に使用されるサンプリング方法です。この方法では、母集団を複数の層に分け、各層ごとにサンプルを抽出します。
層化抽出法を用いる場合、母集団のカテゴリが互いに重ならないことが前提です。まず、母集団をカテゴリごとに分け、各カテゴリを層として扱います。その後、各層の平均が十分に異なり、かつ分散が全体の分散より小さいように選択します。
そして、各層から抽出する標本サイズの配分を決定します。この配分は、比例割り当て法や最適割り当て法などの方法で決定されます。
たとえば、ある商品の購入者を調査する場合、性別や年齢層などのカテゴリに分けて層化抽出法を用いることができます。この方法を用いることで、各層から適切なサンプルを抽出し、より正確な結果を得ることができます。
母集団が互いに重ならない複数のカテゴリからなる場合には、枠をそのカテゴリ、すなわち層に分ける。各層は、平均が互いに十分異なり、分散が全体の分散より小さいように選ぶとよい。各層から抽出する標本サイズの配分は比例割当法または(ネイマンの)最適割当法 などによって決定される。
標本調査
比例割り当て法
層化抽出における比例割り当て法とは、各層の大きさに応じて、それぞれから抽出するサンプルの割合を決める方法です。つまり、各層の大きさに応じて、その層から抽出するサンプル数を調整することで、母集団全体からバランスよくサンプルを抽出する方法です。
例えば、ある調査でA、B、Cの3つの地域からサンプルを抽出する場合、A地域が1000人、B地域が500人、C地域が2000人だとすると、比例割り当て法を用いることで、A地域からは40%、B地域からは20%、C地域からは40%のサンプルを抽出することができます。
この方法は、各層の大きさに比例してサンプルを抽出するため、サンプル調査の精度を高めることができます。ただし、層の大きさが大きく異なる場合は、大きい層からのサンプルが多くなりすぎる可能性があるため、割合を適切に調整する必要があります。
最適割り当て法
層化抽出の最適割り当て法は、ネイマン(Neyman)によって提唱された方法で、各層からの標本数を割り当てる際に、調査対象の母集団内での各層の分散や相関関係を考慮して、最適な割り当てを行う方法です。
最適割り当て法では、各層の分散や相関関係を反映した最適な割り当てを行うことで、調査精度を高めることができます。つまり、調査対象の母集団において、層間の差異が大きい場合はその層から多くの標本を抽出し、差異が小さい場合は少ない標本を抽出することで、全体的な精度を高めることができるのです。
最適割り当て法は、比例割り当て法と比べて調査の効率性が高いという利点がありますが、母集団についての情報が必要であるため、実際には使用できない場合があります。また、割り当てについての最適解を得るためには、複雑な計算が必要であるため、専門的な知識が必要な場合があります。
クラスター抽出
クラスター抽出とは、母集団が複数の小さなグループ(クラスター)で構成されている場合に用いられる抽出方法です。各グループの名簿をあらかじめ作成し、無作為に選択されたグループからすべての標本(サンプル)を抽出します。例えば、全国の学校から生徒の意見を調査する場合、各学校をグループとして抽出枠を設定し、無作為に選択された学校から全ての生徒を対象に調査を行います。
この方法は、抽出にかかる時間と費用を削減できる利点があります。しかし、小さなグループ内の標本(サンプル)は類似する傾向があるため、精度が低下する可能性があります。例えば、全国の学校から生徒の意見を調査する場合、ある学校の生徒たちは共通の地域・背景・文化的な影響を受けている可能性が高いため、抽出したデータには偏りが生じる可能性があります。
母集団の要素がクラスターを作っている場合、抽出にこれを利用してコストを省くことができる。例えば電話の通話を標本とする場合には、まず利用者を抽出し、その人の全ての通話(クラスターを作る)を調べるという方法がとれる。ただしクラスター内の各標本は無作為抽出した標本よりも互いに似た傾向があり、これを補うために標本サイズを大きくする必要がある。
割当て抽出(クォータ・サンプリング)
割り当て抽出、またはクォータ・サンプリングは、母集団を性別や年齢などのカテゴリに分類し、各カテゴリから一定割合をサンプルとして抽出する方法です。層化抽出法と同様に、カテゴリごとに分類することでサンプルの偏りを防ぎ、より正確な結果を得ることができます。
たとえば、ある市の住民に対してアンケート調査を行う場合、性別と年齢を組み合わせたカテゴリに分類して割り当て抽出を行うことができます。例えば、男性20代、女性30代、男性40代などのカテゴリに分け、各カテゴリから一定数のサンプルを抽出します。
割り当て抽出は、層化抽出法よりも簡便であり、層間の分散の大きな場合にも有効です。ただし、各カテゴリのサンプルサイズが均等にならないため、サンプルの偏りが生じる可能性があります。そのため、割合の決定には注意が必要です。
まず母集団を層別抽出と同じように別個の部分集団に分割し、次に各部分に対してそれぞれ決まった割合で対象を選抜する。例えば街頭で45歳から60歳までの女性200人と男性300人にインタビューする場合がこれにあたる。この方法は無作為でないことが一番の欠点である。
抽出方法
抽出方法は、標本調査において非常に重要な役割を担います。抽出の枠の設定に基づき、対象となる母集団からどのような方法でサンプルを選択するかを決定します。単独で使用することもできますし、複数の方法を組み合わせて使用することもできます。例えば、層化抽出法と多段抽出法を組み合わせて使用することができます。また、抽出方法を変更することによって、得られるデータの質や信頼性を向上させることができます。抽出方法は、調査の目的や研究の性質に応じて慎重に検討する必要があります。
上記の各タイプの枠内で、次のような抽出法を、単独で、または組合せで使うことができる。
標本調査
無作為(ランダム)抽出
無作為抽出、またはランダム抽出は、母集団から確率的にサンプルを選ぶ方法です。抽出されたサンプルは、母集団全体を適切に代表することが期待されます。ただし、抽出による誤差や偶然の要因により、選ばれたサンプルが母集団を正確に表すことができない場合があります。
このリスクを最小限に抑えるため、統計理論では抽出誤差のリスクを算出することができます。このリスクを許容範囲内に抑えるために、実用的なサンプルサイズを決定することができます。例えば、ある商品の購入者に対してアンケート調査を行う場合、全ての購入者からランダムに抽出することで、より正確な結果を得ることができます。
無作為抽出は確率的抽出の代表的なものであり、全ての要素の組合せの起こる確率がわかっている(必ずしも同じとは限らない)場合である。標本が母集団を適切に代表しないリスクはあるが、統計学理論により抽出に伴う誤差からそのリスクを計算し、適切な(リスクが容認できる範囲で実用的な)標本サイズを選ぶことができる。
標本調査
無作為(ランダム)抽出は、確率的抽出の基本的な方法です。単純無作為(ランダム)抽出では、各要素が同じ確率で選ばれますが、実際にはこれは多くの場合実用的ではありません。そのため、より実用的な確率的抽出方法として、層化抽出法や多段抽出法がよく用いられます。
層化抽出法では、母集団を互いに重ならない複数の層に分け、各層から一定割合の要素を抽出します。各層の特性を反映する標本を作成するため、各層の選択には特定の方法が必要です。
多段抽出法は、複数の段階からなる抽出方法で、反復無作為(ランダム)抽出を行います。まず最初に、小さなサンプルをランダムに選択し、その中から再度サンプルを選択します。この方法は、母集団の全要素にアクセスすることが困難な場合に有用です。
例えば、全国の高校生の身長を調査する場合、全ての高校生を一度に調査することは難しいため、まず都道府県ごとにランダムに選択し、次にその中から学校を再度ランダムに選択するという方法が使われます。
無作為抽出のうちで最も基本的な単純無作為抽出では、各要素を同じ確率で選び出す。しかし、これは実用的でない場合も多い。より実用的な確率的抽出として層化抽出(上述)や多段階抽出(無作為抽出を反復する)をよく用いる。
標本調査
無作為(ランダム)抽出が不可能な場合には、代替手段として非確率的な抽出方法を用います。 例えば、利用可能な全要素をリストアップし、そのリストから順番に抽出する方法や、特定の要素を抽出したい場合には目的の要素を含むサンプルを作成する方法があります。 しかし、非確率的な抽出方法は、母集団全体を代表するとは限らず、偏りを生じる可能性があるため、結果の解釈には注意が必要です。
無作為抽出が不可能な場合は、以下のような非確率的抽出が用いられる。
標本調査
系統抽出
系統抽出は、例えば電話帳から10ページごとに抽出する方法のように、規則的な間隔で標本を選び出す方法です。単純で手軽な方法ではありますが、データに非対称性や偏りがある場合には、偏った結果になりやすく注意が必要です。また、電話帳自体が無作為化されていない場合には、非確率的な抽出になってしまいます。例えば、電話帳に載っている人々の名前がアルファベット順に並んでいる場合には、姓の頭文字を使って無作為化することができます。
系統抽出の例としては、電話帳から10番目ごとに抽出する方法がある。簡単ではあるが、データの非対称性と偏りから、結果の偏りが出やすい。電話帳自体が無作為化されていない限り非確率的抽出になる。
標本調査
機械的抽出
機械的抽出とは、機器を使って対象物を抽出する方法です。例えば、自動車工場での生産ライン上からサンプリングする場合が挙げられます。しかし、機械の設計や動作条件によって偏りが生じることがあり、無作為ではなくなってしまいます。このため、機械的抽出が確率的なものであるためには、機械の設計や動作条件を確率的に表現できる必要があります。例えば、自動車工場での生産ライン上からのサンプリングであれば、抽出する部品をランダムに選択することで確率的な抽出が実現できます。しかし、機械的抽出はその性質上、抽出されたサンプルが偏る場合があるため、注意が必要です。
機械的抽出とは、器具を使って物質をサンプリングする方法をいう。機械的抽出は、機械の設計の意図、機械の動作条件によって偏りが生じる可能性があるので、無作為ではない。機械の設計の意図、機械の動作条件を確率論的に表現できれば、確率的抽出の一種であるということもできる。標本が枠を確実に代表するように注意を要する。
標本調査
便宜的抽出
「便宜的抽出」とは、抽出枠と呼ばれる枠の中からランダムに要素を選択する方法です。この方法は、構造を作らないため誤差が大きくなりがちですが、実用的な方法です。社会科学の研究においても、同様の方法が使われており、その中に「雪だるま式抽出」という方法があります。
雪だるま式抽出は、既存のサンプル対象者が自分の知り合いから将来のサンプル対象者を募集する非確率的な抽出方法です。これによって、サンプル群は雪玉を転がすように成長していきます。サンプルが増えていくと、研究に役立つ十分なデータが集まるため、研究者にとって有用な手法とされています。特に、アクセスが難しい隠れた集団に対して用いられることが多いです。
例えば、ある社会問題を研究するために、その問題に直接的に関わっている人々を対象にしたい場合があります。しかし、その人々にはアクセスが難しい場合があるため、雪だるま式抽出を用いることで、既存のサンプルから彼らを紹介してもらい、サンプル群を成長させることができます。
研究においては、正確なデータを収集することが重要ですが、場合によってはアクセスが難しい集団に対しても、便宜的抽出や雪だるま式抽出を利用することで、有用なデータを収集することができます。
要素を枠から任意に、構造を作らずに選ぶ方法である。誤差が大きくなりがちだが、実用的である。社会科学の研究で用いられる似た方法に雪だるま式抽出があり、これは確保した対象を使ってさらに多くの対象を集める方法である。
標本調査
復元抽出
復元抽出は、統計的なサンプリング方法の一つで、一度調査した対象を再度調査対象として含める抽出方法です。具体例としては、アンケート調査を複数回行う場合が挙げられます。例えば、ある商品を買った人々に対して、製品の使用感や改善点などをアンケート調査する場合、同じ人々に複数回アンケート調査を実施することができます。その際、同じ人々を再度調査対象に含めることで、各回の調査結果を比較することができます。
復元抽出は、複数の調査の期間が空いていたり、調査の目的が全集合を対象にした無作為抽出または作為抽出である必要がある場合に行われます。ただし、復元抽出を用いる場合、同じサンプルが複数回選ばれる可能性があるため、サンプルサイズが小さい場合には正確な結果を得ることができません。
一度調査した対象をまた調査対象に含める。複数の調査の期間が空いていたり、調査の目的が全集合を対象にした無作為抽出または作為抽出である必要がある場合に行う。
標本調査
Pythonプログラミング
「復元抽出」をイメージしやすいようPythonでのプログラミングについても学びます。
プログラム
機械学習ライブラリscikit-learnで提供されているアヤメのデータセットを「母集団」として、20件の無作為(ランダム)な「復元抽出」を行います。
import pandas as pd
from sklearn.datasets import load_iris
# アヤメのデータセットを読み込み
iris = load_iris()
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
# 20件の復元抽出を行う
sample = df.sample(n=20, replace=True, random_state=0)
print(sample)
実行結果
20件のデータが無作為に抽出され、出力されました。
「復元抽出」のため、抽出された30件のデータには、同じデータが含まれています。
sepal length (cm) sepal width (cm) ... petal width (cm) Species
47 4.6 3.2 ... 0.2 setosa
117 7.7 3.8 ... 2.2 virginica
67 5.8 2.7 ... 1.0 versicolor
103 6.3 2.9 ... 1.8 virginica
9 4.9 3.1 ... 0.1 setosa
21 5.1 3.7 ... 0.4 setosa
36 5.5 3.5 ... 0.2 setosa
87 6.3 2.3 ... 1.3 versicolor
70 5.9 3.2 ... 1.8 versicolor
88 5.6 3.0 ... 1.3 versicolor
140 6.7 3.1 ... 2.4 virginica
58 6.6 2.9 ... 1.3 versicolor
39 5.1 3.4 ... 0.2 setosa
87 6.3 2.3 ... 1.3 versicolor
88 5.6 3.0 ... 1.3 versicolor
81 5.5 2.4 ... 1.0 versicolor
25 5.0 3.0 ... 0.2 setosa
77 6.7 3.0 ... 1.7 versicolor
72 6.3 2.5 ... 1.5 versicolor
9 4.9 3.1 ... 0.1 setosa
[20 rows x 5 columns]
プログラムの説明
import pandas as pd
from sklearn.datasets import load_iris
# アヤメのデータセットを読み込み
iris = load_iris()
# データと属性名をデータフレームに設定
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類をデータフレームに追加
df['Species'] = iris.target_names[iris.target]
「母集団の定義」で記載されている内容と同じですので、説明を省略します。
# 20件の復元抽出を行う
sample = df.sample(n=20, replace=True, random_state=0)
DataFrameから10件のランダムなデータを取り出し、sample変数に代入します。
ランダムな抽出は、pandasのsample()関数を使用して実行します。replace=Trueは復元抽出を行うため、1つのデータが複数回抽出されることを許容します。random_stateを0に設定することで、再現性を保つことができます。
# 抽出結果を出力
print(df_Sample)
ランダムに抽出した20件のデータを表示します。
非復元抽出
一度調査した対象を調査対象から除外する抽出方法です。具体例として、ある製品の品質を調査する場合を考えてみましょう。非復元抽出を用いる場合は、一度サンプリングした製品は調査から除外され、次のサンプルとして新しい製品が選択されます。同じ人々にアンケート調査を複数回行う場合でも、最初の調査で回答した人は次の調査で調査対象から外されます。
非復元抽出は、調査結果にバイアスが生じる可能性があるものの、より正確な結果を得ることができます。例えば、製品の品質調査を行う場合、同じ製品を複数回サンプリングしてしまうと、前回の調査結果が残っていることで結果に影響を与える可能性があります。また、アンケート調査を複数回行う場合、回答者が前回の回答内容を覚えていることで、回答内容が変化することがあります。
一方、非復元抽出は、調査結果にバイアスが生じる可能性があるというデメリットがあります。例えば、ある地域での調査を行う場合、前回の調査で回答した人々が全員次の調査から除外されてしまうと、その地域に住んでいる人々の特定の層の意見が反映されなくなる可能性があります。また、一度調査した対象が調査対象から外れることで、サンプルサイズが小さくなることもあります。
一度調査した対象は調査対象から除外する。複数の調査が短期間であったり、調査の謝礼を渡す方式だったりすると、一度調査した対象は除外することがある。
標本調査
抽出とデータ収集
データ収集においては、偏りが起きないようにすることが重要です。具体的には、あらかじめ規定した抽出過程に従ってデータを収集する必要があります。たとえば、ランダムにサンプリングすることが望ましいです。また、データの時間順序を守り、調査過程での注意点を記録することも大切です。さらに、調査不能となった対象についても、記録する必要があります。
例えば、ある地域の住民調査を行う場合、ランダムに住民を選択してアンケート調査を行うことが望ましいです。この方法を用いることで、偏りを防ぐことができます。しかし、万が一偏りが起きた場合には、抽出過程を再調査できるように配慮する必要があります。このように、データ収集においては、慎重な準備と注意が必要とされます。
・既定の抽出過程に従って行う。
・データの時間順序を守る。
・調査過程での注意点を記録する。
・調査不能となった対象を記録する。
標本調査
データ解析
「データ解析」は、標本調査の最後のステップであり、標本から得られたデータを分析して母集団の特性を推定するための方法です。
中心極限定理と正規分布近似を用いることで、標本から得られたデータをもとに、母集団の平均や分散などの母数を推定することができます。具体的には、標本平均や標本分散を計算し、それらをもとに母集団の平均や分散を推定することができます。
ただし、推定の精度は標本の大きさに依存します。一般的に、標本の大きさが大きくなるほど、推定の精度が向上します。また、標本選択に偏りがある場合は、推定結果に誤差が生じる可能性があるため、そのような場合には再調査が必要となります。
データ解析の目的は、標本から得られたデータをもとに、母集団の特性を推定することであり、その結果に基づいて、意思決定や問題解決に役立てることができます。例えば、ある商品の販売促進活動の効果を検証するために、標本調査を行い、得られたデータをもとに、母集団の購買意欲の変化を分析することができます。
伝統的な標本調査は、標本から中心極限定理と正規分布近似(場合によっては正規分布によらないノンパラメトリック推定も利用できる)を利用して、母集団と母数を推定することで行う。これは計画に基づく抽出といわれる。
標本調査
中心極限定理
中心極限定理とは、母集団がどのような分布であっても、無作為に抽出された標本の平均値が正規分布に従うことを示す定理です。例えば、ある製品の重さを母集団として考えた場合、母集団の分布がどのように偏っていたとしても、その母集団から無作為に抽出した標本の平均値は正規分布に従うことがわかります。
具体的には、標本サイズが大きくなるにつれて、標本平均の分布が正規分布に近づくことが中心極限定理によって示されます。これは、大数の法則とも関連しており、無作為に選んだ標本が母集団を正確に反映するためには、標本サイズが大きくなければならないことを意味します。この定理は、統計学や機械学習において、標本から母集団の性質を推定するために重要な理論の一つとなっています。
大数の法則は、試行回数が増えるにつれて、確率的な現象の結果が確定値に近づくという法則です。つまり、多くの独立な試行を繰り返すと、その平均値が真の平均値に近づくということです。
中心極限定理は、確率論・統計学における極限定理の一つ。 大数の法則によると、ある母集団から無作為抽出した標本の平均は標本の大きさを大きくすると母平均に近づく。これに対し中心極限定理は標本平均と母平均との誤差を論ずるものである。多くの場合、母集団の分布がどんな分布であっても、その誤差は標本の大きさを大きくしたとき近似的に正規分布に従う。 なお、標本の分布に分散が存在しないときには、極限が正規分布と異なる場合もある。 統計学における基本定理であり、例えば世論調査における必要サンプルのサイズの算出等に用いられる。
正規分布
正規分布とは、ある集団が持つ数値の分布のうち、平均値を中心に左右対称の形状を持つ分布のことを指します。この分布は、多くの現象に対して適用できるため、様々な分野で利用されています。
例えば、身長や体重、テストの得点、商品の売上数など、様々な数値を持つものに対して、正規分布が当てはまることがあります。平均値を中心に、それより離れる値がどれだけ出やすいかは、標準偏差の値によって決まります。標準偏差が小さいほど、平均値に近い値が多く、標準偏差が大きいほど、平均値から離れた値が出現する可能性が高くなります。
また、中心極限定理により、母集団がどのような分布であっても、その母集団から無作為に抽出した標本の平均は、標本の大きさが十分に大きい場合、正規分布に従うことが知られています。このため、標本から得られる情報を正確に推定するために、正規分布の性質を利用することがあります。
Pythonプログラミング
「中心極限定理」と「正規分布」をイメージしやすいよう、pythonでのプログラミングについても学びます。
アヤメのデータセットから30個のランダムなサンプルを取得し、「sepal length(がく片の長さ)」という特徴量の平均値を計算します。これを1000回繰り返して、標本平均の分布を求めます。この分布は、中心極限定理によって正規分布に近似されるため、ヒストグラムを描画することで正規分布の近似が確認できます。
この例では、「sepal length(がく片の長さ)」という特徴量を対象にしていますが、他の特徴量に対しても同様の手順で正規分布の近似を行うことができます。
プログラム
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# データセット読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 中心極限定理に基づく正規分布の近似
sample_means = []
for i in range(1000):
sample = np.random.choice(df['sepal length (cm)'], size=30)
sample_means.append(sample.mean())
# ヒストグラム表示
plt.hist(sample_means, bins=30, alpha=0.5)
plt.xlabel('Sepal length (cm)')
plt.ylabel('Frequency')
plt.show()
実行結果
標本平均の分布が中心極限定理によって正規分布に近似されることが確認できます。
プログラムの説明
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
必要なパッケージをインポートしています。pandasはデータ処理のために使用され、numpyは科学計算のために使用され、sklearnは機械学習のために使用されます。matplotlib.pyplotはグラフ描画のために使用されます。
# データセット読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
Irisデータセットが変数irisに読み込まれます。Irisデータセットには、Irisの3つの種類(setosa、versicolor、virginica)に属する各50の花について、がく片の長さと幅、花弁の長さと幅の4つの特徴が含まれます。
pandasのDataFrameを使用して、irisデータセットから特徴量を取り出して、それを変数dfに格納しています。
# 中心極限定理に基づく正規分布の近似
sample_means = []
for i in range(1000):
空のリストsample_meansを作成して、後で計算されたサンプル平均値を格納するために使用します。
1000回の繰り返しを実行して、ランダムな30個のサンプルを抽出し、そのサンプルの平均値を計算し、それをリストsample_meansに追加します。
sample = np.random.choice(df['sepal length (cm)'], size=30)
sample_means.append(sample.mean())
numpyライブラリのnp.random.choice()関数を使用して、Irisデータセットの’sepal length (cm)’から30個のランダムなサンプルを取得します。
numpy配列のmean()関数を使用して、抽出した30個のサンプルの平均値を計算しています。
リストsample_meansに計算された平均値を追加しています。
# ヒストグラム表示
plt.hist(sample_means, bins=30, alpha=0.5)
plt.xlabel('Sepal length (cm)')
plt.ylabel('Frequency')
plt.show()
Matplotlibのpyplotモジュールにあるplt.hist()関数を使用して、ヒストグラムを作成しています。この関数には、次の引数が与えられています。
- sample_means: ヒストグラムを作成するデータ
- bins=30: ビンの数を設定する引数で、この場合は30個のビンを作成します。
- alpha=0.5: ヒストグラムの色の透過率を設定する引数で、この場合は0.5に設定されています。
x軸のラベルを’Sepal length (cm)’に設定しています。
y軸のラベルを’Frequency’に設定しています。
plt.show()関数を使用して、作成したヒストグラムを表示しています。
標本の加重
層別抽出とは、母集団をいくつかの層に分割し、各層から無作為にサンプリングして標本を作成する方法です。しかし、層ごとの割合が異なる場合、標本が母集団を適切に代表しなくなることがあります。
そこで、標本に加重をかけて、母集団を正しく代表するようにします。具体的には、層ごとに重みを割り当てて、各標本の重みを掛け合わせることで、母集団の分布を考慮した統計的解析ができます。
例えば、ある都道府県の人口を年齢別に層別化し、各層から無作為にサンプリングして調査を行うとします。しかし、20代以下の層の人口が全体の半数以上を占める場合、その層から無作為にサンプリングしても、20代以下の人口が適切に代表されない可能性があります。その場合、20代以下の層の標本には重みをかけて、母集団の分布を考慮した統計的解析を行います。
層別抽出では、一般に標本として抽出される比率が層によって異なるので、データには正しく母集団を代表するように加重をしなければならない。例えば社会調査で単純無作為抽出をするには、僻地の人も含めねばならないが、僻地の人にインタビューするにはコストがかかる。このコストを節約する方法として、都会と地方に層化する方法がある。地方の標本サイズが小さくなっても、分析で重みをつけることによって補うことができる。
標本調査
Pythonプログラミング
「標本の加重」をイメージしやすくするためのプログラムをPythonで書いてみます。
アヤメのデータセットを用いてsetonaのsepal lengthに2倍の重みをつけた標本の加重平均を計算し、その結果を表示します。
プログラム
import pandas as pd
from sklearn.datasets import load_iris
# データセット読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# setosaのsepal lengthに2倍の重みをつける
weights = [2 if iris.target[i]==0 else 1 for i in range(len(df))]
# 標本の加重平均を計算
weighted_mean = sum(df['sepal length (cm)']*weights)/sum(weights)
# 結果の表示
print("Weighted mean: ", weighted_mean)
実行結果
Weighted mean: 5.634000000000003
プログラムの説明
import pandas as pd
from sklearn.datasets import load_iris
Pandasライブラリをインポートしています。
sklearn.datasetsからIrisデータセットを読み込んでいます。
# データセット読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
IrisデータセットをPandasのデータフレームに変換しています。
# setosaのsepal lengthに2倍の重みをつける
weights = [2 if iris.target[i]==0 else 1 for i in range(len(df))]
Setosaのsepal lengthに2倍の重みをつけるために、リスト内包表記を使って、"iris.target"の要素が0(=Setosa)の場合には2、それ以外の場合には1を返すリスト"weights"を作成しています。
# 標本の加重平均を計算
weighted_mean = sum(df['sepal length (cm)']*weights)/sum(weights)
“df['sepal length (cm)’]"と"weights"を掛けた結果を合計し、"weights"の合計で割ることで重み付き平均を計算しています。
# 結果の表示
print("Weighted mean: ", weighted_mean)
計算結果を表示しています。
抽出過程の再調査
抽出過程の再調査は、実際に行われた抽出過程をもう一度確認することです。この再調査は、標本の信頼性を確保するために非常に重要です。特に、調査不能対象者がいる場合は、再調査が必要となります。
例えば、ある企業が従業員の意見を調査した場合、調査対象となる従業員が全員回答することは期待できません。そのため、調査不能対象者が生じます。再調査によって、調査不能対象者の割合がどの程度あるかを確認し、その割合に応じて標本の加重を調整することが必要になる場合があります。
再調査によって、抽出過程の正確性を確保し、標本の信頼性を向上させることができます。
抽出後の分析での変動が起こす影響を検討するために、(最初に意図した方法ではなく)実際に行った抽出過程について再調査する必要がある。特に問題となるのは、調査不能対象である。
標本調査
調査不能者
調査対象として設定した人の中には、調査に協力することを拒否したり、連絡が取れなかったりする「調査不能者」が存在します。調査不能者が存在すると、調査可能な人たちと調査不能者たちとの間で調査結果に偏りが生じ、標本全体にも偏りが生じる可能性があります。そのため、調査結果をより正確に把握するためには、追跡調査などの対策を講じる必要があることがあります。追跡調査とは、調査不能者を再度調査することで、標本全体の偏りを修正することを目的とした調査手法の一つです。
特に人を対象とした社会調査で、標本とされた人が参加を拒否したり、連絡がつかなかったりすることがある。この場合、調査できた人と調査不能者との違いが、結果的に選抜の偏り(非確率的誤差)につながるおそれがあるので、しばしば追跡調査が必要になる。
標本調査
ディスカッション
コメント一覧
まだ、コメントがありません