Main Content

fishertest

フィッシャーの正確確率検定

説明

h = fishertest(x)x の 2 つのカテゴリカル変数の間に非無作為な関連性があるという対立仮説に対して、非無作為な関連性がないという帰無仮説のフィッシャーの正確確率検定を行なった結果を返します。検定で帰無仮説が有意水準 5% で棄却された場合、結果 h1、それ以外の場合は 0 になります。

[h,p,stats] = fishertest(x) は、検定の p 値 p と追加の検定結果を含む構造体 stats も返します。これには、オッズ比率とその漸近的な信頼区間が含まれます。

[___] = fishertest(x,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、検定の判定を返します。たとえば、検定の有意水準を変更したり、片側検定を実行することができます。

すべて折りたたむ

小規模の調査で、研究者は 17 人の対象者に今年インフルエンザの予防接種を受けたかどうか、またこの冬にインフルエンザに感染したかどうかを質問しました。結果は、インフルエンザの予防接種を受けなかった 9 人のうち、3 人がインフルエンザに感染し、6 人は感染しなかったことを示しています。インフルエンザの予防接種を受けた 8 人のうち、1 人はインフルエンザに感染しましたが、7 人は感染しませんでした。

調査データを含む 2 行 2 列の分割表を作成します。行 1 はインフルエンザの予防接種を受けなかった人のデータを、行 2 は予防接種を受けた人のデータを含みます。列 1 はインフルエンザに感染した人の数、列 2 はインフルエンザに感染しなかった人の数を含んでいます。

x = table([3;1],[6;7],'VariableNames',{'Flu','NoFlu'},'RowNames',{'NoShot','Shot'})
x=2×2 table
              Flu    NoFlu
              ___    _____

    NoShot     3       6  
    Shot       1       7  

フィッシャーの正確確率検定を使用して、インフルエンザ予防接種を受けることとインフルエンザの感染の間に無作為ではない関連性があるかどうかを判定します。

h = fishertest(x)
h = logical
   0

返された検定の判定 h = 0 は、既定の 5% の有意水準においてカテゴリカル変数の間に非無作為な関連性がないという帰無仮説を、fishertest が棄却しないことを示しています。したがって、検証結果に基づき、インフルエンザ予防接種を受けなかった人がインフルエンザに感染するオッズは、予防接種を受けた人と異なりません。

小規模の調査で、研究者は 17 人の対象者に今年インフルエンザの予防接種を受けたかどうか、またインフルエンザに感染したかどうかを質問しました。結果は、インフルエンザの予防接種を受けなかった 9 人のうち、3 人がインフルエンザに感染し、6 人は感染しなかったことを示しています。インフルエンザの予防接種を受けた 8 人のうち、1 人はインフルエンザに感染しましたが、7 人は感染しませんでした。

x = [3,6;1,7];

フィッシャーの正確確率検定の右側検定を使用して、インフルエンザ予防接種を受けなかった対象者がインフルエンザにかかる可能性が予防接種を受けた人よりも高いかどうかを判定します。有意水準 1% で検定を実行します。

[h,p,stats] = fishertest(x,'Tail','right','Alpha',0.01)
h = logical
   0

p = 0.3353
stats = struct with fields:
             OddsRatio: 3.5000
    ConfidenceInterval: [0.1289 95.0408]

返された検定の判定 h = 0 は、1% の有意水準においてカテゴリカル変数の間に非無作為な関連性がないという帰無仮説を、fishertest が棄却しないことを示しています。これは右側仮説検定であるため、インフルエンザ予防接種を受けない人がインフルエンザに感染するオッズは、予防接種を受けた人よりも高くないという結論になります。

病院データを読み込みます。

load hospital

hospital データセット配列には病院患者 100 人の、姓、性別、年齢、体重、喫煙状況、収縮期および拡張期の血圧測定値を含めたデータがあります。

喫煙状況が性別と独立しているかどうかを判定するには、crosstab を使用して喫煙者と非喫煙者の性別でグループ化された 2 行 2 列の分割表を作成します。

[tbl,chi2,p,labels] = crosstab(hospital.Sex,hospital.Smoker)
tbl = 2×2

    40    13
    26    21

chi2 = 4.5083
p = 0.0337
labels = 2x2 cell
    {'Female'}    {'0'}
    {'Male'  }    {'1'}

生成される分割表 tbl の行は患者の性別に対応し、行 1 には女性、行 2 には男性のデータが含まれています。列は患者の喫煙状況に対応し、列 1 には非喫煙者、列 2 には喫煙者のデータが含まれています。返された結果 chi2 = 4.5083 は独立性に対するカイ二乗検定のカイ二乗検定統計量の値です。返された値 p = 0.0337 は、カイ二乗分布に基づく p 値の近似値です。

crosstab によって生成された分割表を使用して、データに対するフィッシャーの正確確率検定を実行します。

[h,p,stats] = fishertest(tbl)
h = logical
   1

p = 0.0375
stats = struct with fields:
             OddsRatio: 2.4852
    ConfidenceInterval: [1.0624 5.8135]

結果 h = 1fishertest が有意水準 5% における喫煙状況と性別の間に関連付けがないという帰無仮説を棄却することを示します。つまり、性別と喫煙状況には関連付けがあります。オッズ比率から、男性患者が喫煙者であるオッズは女性患者の約 2.5 倍であることがわかります。

返された検定の pp = 0.0375 は、crosstab で取得した結果に近くなっていますが、厳密には同じではありません。これは、fishertest が標本データを使用して厳密な p 値を計算するのに対して、crosstab はカイ二乗近似を使用して p 値を計算するためです。

入力引数

すべて折りたたむ

分割表。非負の整数値を含む 2 行 2 列の行列または表として指定します。分割表は標本データの変数の頻度分布を含みます。crosstab を使用して標本データから分割表を生成できます。

例: [4,0;0,4]

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Alpha',0.01,'Tail','right' では、有意水準 1% で右裾仮説検定を指定します。

仮説検定の有意水準。'Alpha' と、(0,1) の範囲内のスカラー値で構成されるコンマ区切りのペアとして指定します。

例: 'Alpha',0.01

データ型: single | double

対立仮説のタイプ。'Tail' と以下のいずれかで構成される、コンマ区切りのペアとして指定します。

'both'両側検定。対立仮説は x の 2 つの変数の間に非無作為な関連性があるとして、オッズ比率は 1 と等しくありません。
'right'右側検定。対立仮説ではオッズ比率が 1 よりも大きくなります。
'left'左側検定。対立仮説ではオッズ比率は 1 よりも小さくなります。

例: 'Tail','right'

出力引数

すべて折りたたむ

論理値として返される仮説検定の結果。

  • h1 の場合、fishertest は有意水準 Alpha での帰無仮説を棄却します。

  • h0 の場合、fishertest は有意水準 Alpha での帰無仮説を棄却できません。

検定の p 値。[0,1] の範囲のスカラー値として返されます。p は、帰無仮説に基づく観測値と同様に、極端な検定統計量、またはより極端な検定統計量が観測される確率です。p の値が小さい場合、帰無仮説の妥当性に問題がある可能性があります。

検定データ。以下のフィールドを含む構造体として返されます。

  • OddsRatio — 2 つの変数間の関連付けの測定値。

  • ConfidenceInterval — オッズ比率の漸近的な信頼区間。x の任意のセル度数が 0 の場合、fishertest は信頼区間の計算を実行せず、代わりに [-Inf Inf] を表示します。

詳細

すべて折りたたむ

フィッシャーの正確確率検定

フィッシャーの正確確率検定はノンパラメトリックな統計的検定であり、変数の間に非無作為な関連性があるという対立仮説に対して、2 つのカテゴリカル変数の間に非無作為な関連性がないという帰無仮説の検定に使用します。

フィッシャーの正確確率検定は、標本が小さいか、極めて不均等な周辺分布をもつ標本にカイ二乗検定の代替方法を提供します。カイ二乗検定と異なり、フィッシャーの正確確率検定は大きな標本分布の仮定に依存せず、代わりに標本データに基づいた正確な p 値の計算を行います。フィッシャーの正確確率検定は任意のサイズの標本に対して有効ですが、計算量が多いため大規模な標本には推奨されません。分割表内のすべての頻度数が 1e7 以上の場合は、fishertest 誤差です。大きなカウント値を含むまたはバランスの良い分割表には、crosstab または chi2gof を代わりに使用します。

fishertest は 2 行 2 列の分割表を入力として受け入れ、検定の p 値を以下のように計算します。

  1. 分割表の各行、各列の合計および観測の総数を計算します。

  2. 帰無仮説が真で、行と列の合計が与えられる場合に、超幾何確率関数の多変量汎化を使用して、分割表内の正確な結果を観測する条件付き確率を計算します。条件付き確率は次のようになります。

    Pcutoff=(R1!R2!)(C1!C2!)N!i,jnij!,

    ここで R1 および R2 は行の合計、C1 および C2 は列の合計、N は分割表内の観測値の総数、nij は表の i 行 j 列目の値です。

  3. 行と列の合計と一致する非負の整数のすべての可能な行列を検索します。各行列に対して、関連付けられた条件付き確率を Pcutoff の式を使用して計算します。

  4. これらの値を使用して検定の p 値を対象の対立仮説を基にして計算します。

    • 両側検定のために、観測した分割表の Pcutoff 以下のすべての条件付き確率を合計します。これは帰無仮説が真の場合、実際の結果と同様に極端な結果、またはより極端な結果が観測される確率を表しています。p 値が小さい場合、変数間に関連付けがあるという対立仮説が優先され、帰無仮説の妥当性に問題がある可能性があります。

    • 左側検定の場合、(1,1) のセル度数が n11 以下であるすべての行列の条件付き確率が合計されます。

    • 右側検定の場合、観測対象の分割表における (1,1) のセル度数が n11 以上であるすべての行列の条件付き確率が合計されます。

オッズ比率は次のようになります。

OR=n11n22n21n12.

条件付きで独立しているという帰無仮説は、オッズ比率が 1 であるという仮説と同じです。左側検定の対立仮説はオッズ比率が 1 より小さいという仮説と、右側検定の対立仮説はオッズ比率が 1 より大きいという仮説と同じです。

オッズ比率に対する漸近的な 100(1 – α)% 信頼区間は、次のようになります。

CI=[exp(LΦ1(1α2)SE),exp(L+Φ1(1α2)SE)],

ここで、L は対数オッズ比率、Φ-1( • ) は逆正規累積分布関数の逆関数、SE は対数オッズ比率の標準誤差です。100(1 – α)% 信頼区間に値 1 が含まれない場合、関連付けは有意水準 α で有意になります。4 つの任意のセル度数が 0 の場合、fishertest は信頼区間の計算を実行せず、代わりに [-Inf Inf] を表示します。

fishertest は 2 行 2 列の分割表のみを入力として受け入れます。カテゴリカル変数の独立性を 3 水準以上で検定するには、crosstab で提供されるカイ二乗検定を使用します。

バージョン履歴

R2014b で導入