有意差検定(significance test)は、母集団のパラメータ(確率変数)または母集団の分布形式について事前に仮説を立て、サンプル情報を使用して、この仮説(対立仮説)が合理的であるかどうかを判断し、つまり全体の状況が実際の仮説との有意差検定です。言い換えると、有意性検定は、サンプルと母集団から作成した仮説との違いが純粋な偶然の変動であるか、または作成した仮説と母集団の実際の状況との不一致が原因であるかを判断することです。有意差検定は、作成された仮説を全体的に検定することであり、その原理は、「小確率のイベントが実際に不可能」を受け入れるか否認します。
有意差検定は、実験群と対照群または2つの異なる処理の効果に差があるかどうか、およびこの差が有意であるかどうかを判断する方法です。
SciPyは、SciPyの有意性検定の機能を実行するためのscipy.statsモジュールを提供します。
目次
統計的仮説
統計的仮定は、1つ以上の確率変数の未知の分布に関する仮定です。 確率変数の分布形式は既知であり、分布に1つまたは少数の未知のパラメータのみが含まれる統計的仮定はパラメータ仮定と呼ばれます。統計的仮説を検定する過程は仮説検定と呼ばれ、パラメータ仮説を区別するための検定はパラメトリック検定と呼ばれます。
帰無仮説
帰無仮説(null hypothesis)、統計用語であり、帰無仮説とも呼ばれ、統計的検定を実行するときに事前に確立された仮説を指します。帰無仮説が確立されると、関連する統計は特定の既知の確率分布に従う必要があります。
統計の計算値が負の領域に該当する場合、小確率のイベントが発生したことがわかっているため、帰無仮説を否認する必要があります。
検証する仮説(帰無仮説、null hypothesis)はH0として示されることが多く、H0と反対の仮説は対立仮説と呼ばれるH1として示されます。
- 元の仮説が真である場合、元の仮説を放棄し、第1種類の誤差と呼ばれ、その発生の確率は通常、
α
として記録されます。 - 元の仮説が真でない場合、元の仮説を放棄しなく、第2種類の誤差と呼ばれ、その発生確率は通常、
β
として記録されます。 - α+βは1に等しいとは限りません。
通常、第1種類の誤差の最大確率のα
のみが承認され、第2種類の誤差の確率β
は考慮されません。このような仮説検定は有意性検定とも呼ばれ、確率α
は有意水準と呼ばれます。
常用のα
値は、0.01、0.05、0.10などです。通常、研究課題によって、真の仮説を放棄すると損失が大きくなるため、このような誤差を減らすためにα
の値を小さくし、逆の場合には、α
の値を大きくします。
対立仮説
対立仮説(alternative hypothesis)は、統計の基本概念の1つであり、帰無仮説を無効にする全体的な分布に関するすべての課題が含まれています。
対立仮説は、帰無仮説を置き換えることができます。
例えば、学生の評価に対して、以下の標準を行います。
「学生は平均より悪い」——帰無仮説とします
「学生は平均より良い」——対立仮説とします。
片側検定
片側検定(one-sided test)では、検定統計量の密度曲線と、臨界領域を構築するために2つの軸が使用されます。検定の方法は片側検定と呼ばれます。
仮説が値の片側のみを検定する場合、「片側検定」と呼ばれます。
実例:
帰無仮説の場合:
「平均はkに等しい」
対立仮説の場合:
「平均がk未満」
または
「平均がkより大きい」
両側検定
両側検定(two-sided test)は、仮説検定の場合に、検定統計量の密度曲線と、x軸が囲まれた領域の両側のテール領域を使用し、臨界領域を構築します。
仮説が両側検定を実行する場合:
帰無仮説の場合:
「平均はkに等しい」
対立仮説の場合:
「平均はkと等しくない」
この場合、平均がkより小さいか大きい場合は、両側検定を実行する必要があります。
アルファ値
アルファ値は有意水準です。
有意水準は、推定された全体的なパラメータが特定の間隔内に誤差を発生する確率であり、αで表示されます。
帰無仮説を放棄するには、データが極端に近い必要があります。
通常、その値は0.01、0.05、または0.1です。
P値
P値は、データが実際、極端に近い程度を示します。
P値とアルファ値(alpha)を比較して、統計的有意性を決定します。
p値<= alphaの場合、帰無仮説を放棄し、データが統計的有意性を含むと言います。それ以外の場合は、帰無仮説を受け入れます。
T検定(T-Test)
T検定は、2つの変数の平均値に有意差があるかどうかを判断し、それらが独立同分布に属しているかどうかを判断するために使用されます。
これは両側検定です。
関数ttest_ind()は、同じサイズの2つのサンプルを取得し、t統計量とp値のタプルを生成します。
指定された値v1とv2が独立同分布からのものであるかどうかを調べします:
実例
import numpy as np
from scipy.stats import ttest_ind
v1 = np.random.normal(size=100)
v2 = np.random.normal(size=100)
res = ttest_ind(v1, v2)
print(res)
出力結果は次のとおりです。
Ttest_indResult(statistic=0.40833510339674095, pvalue=0.68346891833752133)
p値のみを返したい場合は、pvalue属性を使用します。
実例
import numpy as np
from scipy.stats import ttest_ind
v1 = np.random.normal(size=100)
v2 = np.random.normal(size=100)
res = ttest_ind(v1, v2).pvalue
print(res)
出力結果は次のとおりです。
0.68346891833752133
KS検定
KS検定は、指定された値が分布と一致しているかどうかを調べるために使用されます。
この関数は、検定の値とCDF、2つのパラメータを受け取ります。
CDFは累積分布関数(Cumulative Distribution Function)であり、分布関数とも呼ばれます。
CDFは、文字列と確率を返す呼び出し可能な関数にすることができます。
片側検定または両側検定として使用できます。
デフォルトでは、両側検定です。パラメータ置換を両側、小さい、または大きい、どちらの文字列として渡すことができます。
指定された値が正規分布と一致しているかどうかを調べます。
実例
import numpy as np
from scipy.stats import kstest
v = np.random.normal(size=100)
res = kstest(v, 'norm')
print(res)
出力結果は次のとおりです。
KstestResult(statistic=0.047798701221956841, pvalue=0.97630967161777515)
データ統計の説明
次の値を含む配列の情報を表示するには、describe()関数を使用します。
- nobs — 観測数
- minmax — 最小値と最大値
- mean — 平均値
- variance — 分散
- skewness — 歪度
- kurtosis — 尖度
配列に記述統計の情報を表示します。
実例
import numpy as np
from scipy.stats import describe
v = np.random.normal(size=100)
res = describe(v)
print(res)
出力結果は次のとおりです。
DescribeResult(
nobs=100,
minmax=(-2.0991855456740121, 2.1304142707414964),
mean=0.11503747689121079,
variance=0.99418092655064605,
skewness=0.013953400984243667,
kurtosis=-0.671060517912661
)
正規性の検定(歪度と尖度)
観測データによって母集団が正規分布に従うかどうかを判断する検定は、正規性の検定と呼ばれます。それは、統計的判断における特別な適合度検定です。
正規性の検定は、歪度と尖度に基づいています。
normaltest()関数は、帰無仮説のp値を返します。
「Xは正規分布から由来する」
歪度
データの対称性の尺度。
正規分布の場合、それは0です。
負の場合は、データが左に傾いていることを意味します。
正の数の場合は、データが正しく歪んでいることを意味します。
尖度
尖度はデータが分布の裾が重いか、軽いか、どちらで分布しているかの尺度です。
正の尖度は裾が重いことを意味します。
負の尖度は裾が軽いことを意味します。
配列内の値の歪度と尖度を見つけます:
実例
import numpy as np
from scipy.stats import skew, kurtosis
v = np.random.normal(size=100)
print(skew(v))
print(kurtosis(v))
出力結果は次のとおりです。
0.11168446328610283
-0.1879320563260931
データが正規分布からのものであるかどうかを調べます。
実例
import numpy as np
from scipy.stats import normaltest
v = np.random.normal(size=100)
print(normaltest(v))
出力結果は次のとおりです。
NormaltestResult(statistic=4.4783745697002848, pvalue=0.10654505998635538)
コメントを残す