ページ

↑ からメニューを選択できます

2026年5月3日

【歴史研究者向け】歴史学でカイ二乗検定・フィッシャー正確確率検定を用いる手順(フリー統計ソフト「EZR」の場合)

歴史研究者が学ぶべき最も重要な統計手法は「カイ二乗検定」といわれます。

カイ二乗検定などの意義については、過去の記事で紹介しました。

統計学まなびはじめ(『人文学のための計量分析入門』『基礎から学ぶ統計学』)


かつては手計算するしかなかった統計検定も、現代ではオンライン上で必要なデータを入れれば自動的に計算される時代です。

高等数学や統計学を修めた一部の人々しか扱えなかった検定が、今は門外漢でも利用できるということです。


では、歴史学でカイ二乗検定を扱う場合、どのような手順を踏んで算出まで導けばいいか?

書籍『自然石祭祀遺構の基礎的研究―巨石遺跡・磐座遺跡の時代を越えて―』で統計検定を使用した私が、実際にどのような試行錯誤を経て使用ツールとプロンプトを用いたか、備忘録と今後利用したいと考えている皆様へ向けて記録を残しておきます。

※2026年5月時点の情報です。めまぐるしく変わるweb環境のため、永久に使える方法とは限らないことをご了承ください。


【前提作業】データから分割表を作っておく

大前提として、検定で使用する「分割表」は事前に作っておいてください。

分割表は、何かの群ともう一つの別の群の数値を比較するために作られます。

たとえば、行を時代や場所などで設定すると、ある時代とある時代の何かを比べたり、ある場所とある場所の何かを比べたりできます。列は、単純な「あり/なし」や「Yes/No」などの二列分類でもいいですし、比較するに足る複数の項目を並べてもいいわけです。

分割表は基本的には2行×2列から構成されますが、別に3列・3行以上でもOKです(ただし検定後の評価に他の統計学的知識が必要になります)。

これらの分割表によって、何かの群ともう一つの群の間に、データ差や相関を見出しやすくなります。カイ二乗検定に使う場合は、ある群とある群の数値に相関関係があるか逆に独立関係にあるかを示すことになります。

どんな分割表を作るかは、まさに歴史研究をするあなたのオリジナリティーが発揮される部分です。数値化するために、件数を数えられる項目やカテゴリーがないかを探してみましょう。

歴史学における注意点を挙げるなら、同一線上で比較できないような不統一な群同士を比較することに意味はないでしょう。

また、分割表自体は百分率で表されることが多いですが、カイ二乗検定に用いる場合は百分率にせず、実際の数値(件数)で入力したままの表とすることに注意してください。


ありなし
A時代128144
B時代155230

表1:2つの時代の遺跡において、ある要素が認められるか認められないかを2行×2列分割表にしたもの(表内の数値は集計件数)


オンライン上の統計計算ツール

統計学の専門をかじっていない歴史研究者でも扱いやすいツールはあるのでしょうか。

一番かんたんなのは、インストール・ダウンロード作業をしなくてもブラウザ上の計算で完結するオンラインサイトです。


私が推奨するサイトとしては、エミュイン合同会社が運営する Reactive stat です。下にリンクを掲載します。

https://www.emuyn.net/stats/features

キャッチフレーズは「ブラウザだけで使える無料統計ソフト~信頼性の高い R で統計解析し、その結果を AI が解説します!」

サイトのコンセプトなどの詳細は上のリンク内をご確認いただきたいですが、一言で言えば、理数系に弱い私でも直感的に理解できるサービスでした。AI解説なしで統計解析するだけなら無料で利用できます。

怪しいサイトではなく、医学論文などでも対応できるように工夫が凝らされた設計です。統計検定の根拠も信頼性の高いと言われるR言語に基づいて行われており、サイト内の各記述を読む限り信頼が置けるサイトだと思います。

 Reactive stat でカイ二乗検定ができるページは下のURLです。

https://www.emuyn.net/stats/enter_and_analyze_two-way_table

ページ内にすでに分割表の欄が用意されているので、後はあらかじめ作成している分割表の数値を入力すれば、リアルタイムで検定結果が即算出されます。

元の分割表をExcelなどで作成している場合、コピペでうまくいける時とうまく貼れない時があります。元の分割表と見比べて誤りがないかよく確認しましょう。

先に例示した表1の分割表を Reactive stat に入力した場合、下のようになります。

Reactive stat にて作成

Reactive stat におけるカイ二乗検定結果例

カイ二乗検定の場合、次の3つの数値が算出されます。

  • Chi-Square 統計量 3.00
  • 自由度 1
  • p値 0.083

Chi-Square 統計量はカイ二乗統計量のことで、統計検定をする時に出される検定統計量です。この統計量の数値がいくつかによって、その分割表の群同士が相関か独立かを示唆する根拠となります。統計量が大きくなればなるほど、有意差があるという評価をします。

自由度は分割表の行数と列数で自動的に決まる数値ですが、その意味を理解して適切に取り扱うには正直、歴史研究者としては若干手に余る指標であり割愛します。

一番重要な指標は、最後のp値です。p値=確率であり、カイ二乗検定の場合はその分割表の数値の分布が偶然でも成立するものかどうかの確率を算出します。表1の例の場合、p値は0.083で8.3%という意味です。なにが8.3%なのかというと、この分割表は統計学的に8.3%の確率で偶然できあがる数値の分布ということです。

では、8.3%は確率的に高いのか低いのか。統計学では慣例的に有意差があるかどうかを判断する有意水準というものがあり、それは一般的に5%といわれています。

つまり、5%以上が出た場合は「有意差なし」、5%未満となった場合は「有意差あり」とみなします。どうやらこの有意差を5%で区分することが望ましいかどうかには多くの議論があるようですが、門外漢の歴史研究者にはどうしようもなく、現状通説的見解とされる5%有意水準を採用しておくのが妥当でしょう。

ということで、表1の場合は「有意差なし」の判定となります。A時代よりB時代のほうが「なし」の数が増えたように思えますが、統計学的には有意差があるとは言えない、という言いかたになります。


しかし、仮に表1の数値がこのように変わったらどうでしょうか。

表2:Reactive stat にて作成

A時代の「なし」を144から134に変えました。それ以外は同じ数値です。

表2でカイ二乗検定を実施した結果が下です。

  • Chi-Square 統計量 4.68
  • 自由度 1
  • p値 0.0305

検定統計量がさっきより増えて、p値は0.0305と小さくなりました。これは3.05%ということで有意水準5%未満になり、統計学的には「有意差あり」の判定となります。偶然起こるとは言いにくい、見逃せない数値の偏りなのです。

この、主観的に見れば「わずか」にも見える数値(件数)の違いを、統計学の根拠に基づいてp値という形で数量的な根拠を示してくれるのがカイ二乗検定です。

歴史研究者がやりがちな、大体これくらいの数値が出れば「高い割合」「低い割合」と評価してしまうのを、統計学的根拠に基づいて論ずることができるようになります。このことをクレール・ルメルシエ、クレール・ザルク[著] 長野壮一[訳]『人文学のための計量分析入門―歴史を数量化する―』(人文書院 2025年)は述べているのです。


カイ二乗検定が使えないならフィッシャー正確確率検定

しかし、これだけではまだ歴史研究者は安心して統計検定を使用できません。次は、カイ二乗検定を使えないケースがあることに注意が必要です。

それは、分割表の数値が少ない場合です。具体的な基準も決まっていて、分割表のセルに入る期待値が5件未満の場合です(最近は1件未満とする説もあるようですが、私には統計学領域の議論の判断がつかないため通説的見解の5件未満を採用します)。

期待値とは、いわゆる平均値と同義とされやすい概念ですが、平均値は実際のデータの単純平均であるのに対して、期待値はその名のとおり、データ標本で現れ出た数値が将来的にこれくらいになると理論的に期待される平均値となります。
表1の場合は次のとおり、Reactive stat 上でも「期待度数」という指標で計算できます。

Reactive stat で表1を期待度数表示した場合

ご覧のとおり、表1の場合は期待度数が5件をゆうに超えているので問題なくカイ二乗検定を使えます。いいかえれば、データ件数の多い分割表であればまずカイ二乗検定を使っておけば大丈夫です。

しかし、私が研究に用いたデータはそうではありませんでした。たとえば拙著には下のような分割表があります。

ありなし
A時代05
B時代052
C時代746
D時代543
E時代439
F時代319
表3:カイ二乗検定を使えない分割表の例

「あり」の要素が少なく、ほとんどの事例においてその要素が認められなかった場合、このような分割表が作成されます。
しかし、A時代、B時代に0件でC時代以降にわずかでも事例件数が存在するこの分割表において、主観ではなく統計的に意味がないかどうかを算出する意味はあるでしょう。

それでは、表3をReactive stat に入力して期待度数を表示してみましょう。

表3をReactive stat で作成

「あり」の列を見ていただければ一目瞭然ですが、期待度数で5件を上回っているセルが1つもありません。A時代の「あり」のセルは1件未満であり、最新の基準においてもカイ二乗検定には不適切な分割表となります。


では、カイ二乗検定が使えないならもう終わりなのかというとそうではなく、期待度数5件未満の統計表の場合は「フィッシャーの正確確率検定」(以下、フィッシャー検定と略)を使用することが推奨されています。

フィッシャー検定は、分割表の件数が少ない場合もカイ二乗検定のように、ある群とある群の相関/独立をp値で算出してくれる検定です。

カイ二乗検定との違いは、検定統計量が出ず、直接p値が出ます。また、カイ二乗検定に比べて膨大な計算量が必要となるため、データ数や列・行が多いと手計算どころかコンピュータ計算でも負荷がかかりすぎて計算エラーになる恐れがあります。
基本的には2列×2行の分割表であれば計算負荷はそこまでかからないといわれます。

とはいえ、Reactive stat では最大で6列×6行までの分割表について、カイ二乗検定と同時にフィッシャー検定の結果も自動計算してくれます。
カイ二乗検定結果のページをさらに下にスクロールすると下の画面が出てきます。
「Fisherの正確確率検定=フィッシャー検定」です。

Reactive stat におけるフィッシャー検定結果例

カイ二乗検定の時と違って、わかりやすくp値が書いてありません。
「Rの出力結果」と書いてある欄にこのようなテキストが表示されています。
      あり なし
A時代    0    5
B時代    0   52
C時代    7   46
D時代    5   43
E時代    4   39
F時代    3   19

#### Fisher の正確確率検定 

Fisher's Exact Test for Count Data

data:  .Table
p-value = 0.068
alternative hypothesis: two.sided

--------------------------------------------------------------
Analysis is conducted using R version 4.5.2 (2025-10-31) 
The script uses the following packages and versions:
この内の「p-value = 0.068」と書いてある部分がフィッシャー検定結果のp値です。
0.068ということで有意確率6.8%、すなわち統計的に「有意差なし」の判定です。

フィッシャー検定を用いることで、データ件数の少ない分割表においても、カイ二乗検定の代わりに有意差検定ができました。

フィッシャー検定で計算エラーが出る場合はモンテカルロ法を使用

Reactive stat が万能かというと、そうではありません。

たとえば下のような分割表の場合は、計算量の限界を超えたようでエラーが出ました。

表4:期待度数5未満があるのでフィッシャー検定を行うべき分割表の例(Reactive stat で作成)

表4のフィッシャー検定「Rの出力結果」は次のとおりです。

    列A 列B

行1   0   5

行2  19  33

行3  25  28

行4  34  14

行5  30  13

行6  14   8



#### Fisher の正確確率検定 



fisher.test(.Table) でエラー: 

  FEXACT error 7(location). LDSTP=18630 is too small for this problem,

  (pastp=64.2946, ipn_0:=ipoin[itp=71]=742, stp[ipn_0]=65.205).

Increase workspace or consider using 'simulate.p.value=TRUE'

実行が停止されました
「fisher.test でエラー」「実行が停止されました」のテキストが確認できます。そしてp値の表示が見当たりません。この場合、計算は失敗しています。

表3よりも表4のほうが全体のデータ件数が多いからこのようなことになるのだと思います。元来、フィッシャー検定は膨大な計算を伴うため2列×2行分割表に向いているとされる所以です。

こういう場合の対策方法はいくつかある模様です。
私なりにいろいろ調べた結果、たとえば下のwebページに参考となる情報がありました。

【フィッシャーの正確確率検定】エラーが出てしまって分析できないので... - Yahoo!知恵袋

Yahoo!知恵袋の問答ページですが、回答者は顕名の井口豊氏であり、同氏の研究室ホームページから統計解析の専門家でもあることがわかります。

回答結果をまとめると、解決法は大きく2種類。

  1. 計算に充てるコンピュータのメモリを増やす
  2. モンテカルロ法(モンテカルロシミュレーション)を用いる

1番目の方法であるメモリ増強の方法もいくつかあるようですが、私はうまくいかず撤退。
2番目のモンテカルロ法に頼みの綱を求めます。

モンテカルロ法とは何か?
計算回数の上限を決めて、正確な値ではなく近似値を求める手法です。当然ながら、計算回数が多いければ多いほど、より実際に近似した値が出ます。
フィッシャー検定は正確に出そうとすると膨大な計算を重ねて、コンピュータ的にはメモリの限界を迎えてエラーを吐きます。そのため、フィッシャー検定においてモンテカルロ法を適用することは有用なのです。

ではReactive stat でモンテカルロ法を適用できる設定はあるのかと確認してみたのですが、どうやら存在しない模様。
大変便利なブラウザ上計算ツールでしたが、どうやらここで別のツールに切り替えるしかないと判断しました。

最終的にEZRの運用を推奨

Reactive stat のサイトにも書いてありますが、統計の世界で信頼性があるのはR言語に基づいたプログラムです。

Reactive stat はその最も簡便なツールでしたが、フィッシャー検定を使いたいのに計算エラーが出る場合、もう一段階、専門寄りのツールに切り替える必要があります。

それがEZR(Easy R)です。

フリーソフトです。

Easyの名を冠するだけあって、これでもR言語プログラムを使いやすくしたというコンセプトですが、こちらはインストールが必要なアプリであり、Reactive stat サイトの言を借りると「統計解析の初心者には難しいという声も聞かれ」るそうです(だからReactive stat を公開した)。

私も最初ちんぷんかんぷんでしたが、フィッシャー検定のところだけ理解できればいいという心持ちで操作に慣れていきました。その手順をこちらにまとめます。


EZRのダウンロードページ

自治医科大学のHP内でダウンロードできます↓

https://www.jichi.ac.jp/usr/hema/EZR/statmed.html

なぜならEZRの開発者は、自治医科大学附属さいたま医療センター血液科教授(2026年5月時点)の神田善伸氏だからです。

Reactive stat もそうでしたが、EZRも含めて統計解析ソフトは主に医療統計分野で発展してきた経緯があります。医師や医学者が医学論文で用いるための統計解析を、統計に疎い人でも利用できるようにという思いで無償で公開しているものです。

だからといって医療分野限定の仕様ではなく、当然ながら統計学は数学の世界ですから、数量を扱うあらゆる分野の統計において活用できます。歴史学もありがたくこの恩恵にあずかりましょう。

Window版、Mac OS版、LINUX版が公開されているので、ご使用の機種に合わせてダウンロードしてください。

ダウンロード前に、HPに書いてある留意事項などは一通り読んでおいてください。注意点としては、無料で使用できますが、EZRを使って算出した結果はEZRを使用したことを出典として示すことが条件づけられています(当たり前ですが)。

その出典の記載方法もHPに例示されているのでご確認をお願いします。


インストール後の使用方法

ウインドウの指示どおりにインストールを終えると、ローカルのインストールフォルダ内に「EZR簡易マニュアル」(EZRman.pdf)があるはずです。まずはそちらをご一読ください。

マニュアルの一番下に解析可能な検定のチェックリストが画像に示されており、その中に「カイ2乗検定」「フィッシャーの正確検定」の項目があるのを見つけられるでしょう。EZRにこれらの検定機能が搭載されていることがわかります。


では、起動してからフィッシャー検定するまでの流れをスクリーンショット画像掲載で紹介しましょう。

EZRアプリを起動すると下のウインドウが自動的に表示されます。


しばらく時間がかかりますが、このウインドウをそのまま放置しておくと別のもう1つのウインドウがさらに出てきます。それが下画面です。

上画像のウインドウが検定作業をする画面となるのでご注意ください。

まず通常の検定方法を説明します。

ツールバーの「統計解析」▶「名義変数の解析」▶「分割表の直接入力と解析」をクリックします。


すると下のウインドウが出てきます。


分割表を直接入力できます。

自分で用意した分割表の行数・列数に増やして数値を入力し、「フィッシャーの正確検定」にチェックを入れた状態で「OK」ボタンを押せばRプログラムが働いて自動的にp値結果を算出してくれます。

が、Reactive stat と同様に、表4のようなデータ数の分割表ではエラーが返ってきます。

見た感じ、このウインドウではモンテカルロ法の設定が見当たりません。

ということで、EZRの「Rスクリプト」画面に、直接スクリプトを打ってモンテカルロ法を用いることを指示しなければなりません。

先に紹介した井口豊氏の記述を参考にして色々試した結果、下のスクリプトであれば正常に検定できました。


dat<- matrix(c(

0, 5,

19, 33,

25, 28,

34, 14,

30, 13,

14, 8

), ncol=2, byrow=T)


fisher.test(dat,

simulate.p.value = TRUE, B = 1000000)


分割表の行数・列数に応じてスクリプト内のテキストを変える必要があるので、応用できるように、このスクリプトのそれぞれの意味を説明します。


dat<- matrix(c(

マトリックス(分割表)のデータであることをRに指示するコードです。


0, 5,

19, 33,

25, 28,

34, 14,

30, 13,

14, 8

表4の分割表をスクリプト画面に打つ時の形がこうです。

行ごとに列のセルの数値をコンマと半角スペースで区切りながら入力していきます。

表4は6行×2列なのでこうしていますが、3列や4列なら行の右側にコンマで区切りながらセルの数値を入力していってください。

要注意点は、一番最後の行・列(一番右下)の数値の後にはコンマを入力しないこと。私は当初ここにコンマを打ったことでひたすらエラーが出て悩まされました。


), ncol=2, byrow=T)

「ncol=2」は2列という意味。Rに列数がわかるように指示しています。ですので、3列や4列なら「ncol=3」「ncol=4」のように変更しておいてください。

「byrow=T」は、行の横方向の順番で読み込んで表データを作成するようにRに指示するコードです。

つまり、これによって2列の分割表を行の横方向に読み込めるようになるということです。


fisher.test(dat,

フィッシャー検定を実施するためのコード。


simulate.p.value = TRUE, B = 1000000)

これがモンテカルロ法で近似的なp値を算出するためのコードです。

「B = 1000000」は、試行回数を1,000,000回に指定するという意味です。

モンテカルロ法で試行回数を何回に指定するかは、用いるデータや目指す研究目標によって様々だそうです。

私は、エラーが出なかった分割表を使って、EZRでこの試行回数を「B = 1000」「B = 10000」「B = 100000」…と数値を変えながら算出されるp値を見比べて、最終的に1,000,000回計算すれば実際のフィッシャー検定結果のp値と近似すると判断して、このようにしました。

皆さんも、用いるデータや調査精度に合わせて試行回数を調整してください。


ということで、このスクリプトをEZRの画面に入れてみましょう。


要注意点は、入力したスクリプトを「すべて選択」した状態にして「実行」ボタンを押すことです。選択してスクリプト範囲を青くした状態にしないとエラーとなります。

正常に実行された結果が下画像です。


「出力」欄に「p-value = 0.000157」の文字が確認できました。

有意確率0.0157%ということで、表4の分割表の数値の分布は、極めて0%に近い強い有意差が示されました。

2×2分割表なら、1行目と2行目に有意差があるということを明確に示しますが、3行以上や3列以上となると、どの行・列のセルに有意差が認められるのか(有意に多いのか/有意に少ないのか)を特定する作業が別途必要です。

カイ二乗検定やフィッシャー検定は、分割表全体を見て有意差があるかないか自体を検定するものであり、表のどことどこに有意差があるのかまでは示してくれないからです。

どのセルに有意差があるのかを評価する方法に「調整済み標準化残差」の分析があり、この値が1.96を超えるセルはp値が5%未満で有意差があると判定しますが、このあたりまでいくと本記事の目的のさらに先の内容に突入するので、説明はここまでとします。


数名の読者の方のお役に立てばそれでよいと考えて書きました。

『自然石祭祀遺構の基礎的研究―巨石遺跡・磐座遺跡の時代を越えて―』の補遺として、本記事も大きな仕事ができたと思っています。


参考文献(EZR出典)

Kanda Y. Investigation of the freely-available easy-to-use software “EZR” (Easy R) for medical statistics. Bone Marrow Transplant. 2013:48,452-458. advance online publication 3 December 2012; doi: 10.1038/bmt.2012.244


0 件のコメント:

コメントを投稿

記事にコメントができます。または、本サイトのお問い合わせフォームからもメッセージを送信できます。