【基礎編】第3回:確率と確率分布の基礎
とみー先生(産婦人科医)

臨床医の皆様が統計学を再学習し、臨床研究のデザインや統計学の基礎知識を身につけることを目的としたシリーズ「医師のための統計学再入門」。寄稿記事の第3回目となる今回は、「確率と確率分布の基礎」について解説します。
この記事では、確率の基本概念、正規分布、t分布、カイ二乗分布の特性と医療データへの応用について、専門的な内容を噛み砕いて説明します。
前回の記事はこちら:医師のための統計学再入門【基礎編】第2回:記述統計の基礎
- 目次
-
- 1.確率の定義と基本的な計算
- 2.正規分布の特性と医療データへの応用
- 3.t分布の概要と使用例
- 4.カイ二乗分布の概要と使用例
- 5.まとめ
確率の定義と基本的な計算
確率とは、ある事象が起こる可能性を数値で表したもので、0から1の間の値を取ります。
例えば、手術後の感染症(SSI)が発生する確率が13.6%であれば、これは0.136と表現します。確率の基本的な性質として、全ての可能な事象の確率の合計は1となります。
また、互いに排反な事象(同時に起こり得ない事象)の確率は、それぞれの確率の和となります。
ここでは、実際の医療現場で収集される「リアルワールドデータ」を想定し、架空の手術データを例示します。
ある病院で1000件の手術が実施され、そのうち実際にSSIが発生した件数が記録されています。以下のPythonコードは、Pandasを用いてこのデータセットを作成し、SSIの発生確率を計算する方法を示しています。
import pandas as pd # 架空の手術データとしています # 例:1000件の手術のうち、136件でSSIが発生(1:発生、0:非発生) data = { '手術ID': range(1, 1001), 'SSI': [1 if i < 136 else 0 for i in range(1000)] } df = pd.DataFrame(data) # SSI発生率の計算 ssi_rate = df['SSI'].mean() print(f"SSI発生率: {ssi_rate:.3f}") # 結果: 0.136
上記の使用例では、mean() 関数を用いてSSIの発生件数の割合(発生率)を計算しています。実際の医療データ解析では、このような基本的な確率計算により、手術後の感染リスクやその他のイベント発生率を正確に評価することが可能です。
注意点
- 独立事象と従属事象の区別
事象が独立であるか、あるいは他の事象に影響を受けていないかを見極めることが重要です。例えば、ある疾患の発症と特定の遺伝子変異の存在は従属事象である可能性があります。 - 条件付き確率の理解
特定の条件下での事象の確率を評価する際には、条件付き確率の概念を適用します。例えば、喫煙者における肺がんの発症確率などが該当します。
正規分布の特性と医療データへの応用
正規分布は、自然界や社会現象で頻繁に観察される連続型の確率分布で、平均値を中心に左右対称の釣鐘型の曲線を描きます。多くの医療データ、例えば血圧や血糖値などは正規分布に近似するとされています。
正規分布の特性を理解することで、データの平均値や標準偏差を用いた解析が可能となり、臨床研究におけるデータの解釈や予測に役立ちます。血液検査の正常範囲も正規分布を利用して算出しています。
- 架空データセットの作成
正規分布に従う医療データとして、架空の収縮期血圧データ(平均120 mmHg、標準偏差15 mmHg、サンプルサイズ100)を生成します。
- Pythonでのデータ処理方法
以下のコードは、NumPy、Pandas、Matplotlib、Scipyを用いて、データの生成、基本統計量の計算、ヒストグラムおよびQ-Qプロットの描画を行います。
正規分布に従う医療データとして、架空の収縮期血圧データ(平均120 mmHg、標準偏差15 mmHg、サンプルサイズ100)を生成します。
以下のコードは、NumPy、Pandas、Matplotlib、Scipyを用いて、データの生成、基本統計量の計算、ヒストグラムおよびQ-Qプロットの描画を行います。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import scipy.stats as stats # 血圧データ生成 np.random.seed(42) blood_pressure = np.random.normal(loc=120, scale=15, size=100) df = pd.DataFrame({'血圧': blood_pressure}) # 基本統計量の計算 mean_bp = df['血圧'].mean() std_bp = df['血圧'].std() print(f"平均: {mean_bp:.2f} mmHg, 標準偏差: {std_bp:.2f} mmHg") # [[1](https://www.slideshare.net/slideshow/the-standard-normal-curve-its-application-in-biomedical-sciences/25482568)] # ヒストグラムとQ-Qプロットの描画 plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.hist(df['血圧'], bins=10, edgecolor='black') plt.title("血圧データのヒストグラム") # [[2](https://realpython.com/python-for-data-analysis/)] plt.subplot(1, 2, 2) stats.probplot(df['血圧'], dist="norm", plot=plt) plt.title("血圧データのQ-Qプロット") # [[4](https://pmc.ncbi.nlm.nih.gov/articles/PMC3915399/)] plt.tight_layout() plt.show()
注意点
- データの正規性の検証
データが正規分布に従っているかを確認するために、ヒストグラムやQ-Qプロットなどの視覚的手法や、シャピロ・ウィルク検定などの統計的手法を用います。 - 外れ値の影響
外れ値は正規分布の仮定を崩す可能性があるため、データの前処理や変換が必要な場合があります。
補足
以下には上記の注意点に記載したシャピロ・ウィルク検定について補足します。余裕のある方のみ実際のコードを用いて動かしてみてください。
- シャピロ・ウィルク検定の概要
シャピロ・ウィルク検定は、サンプルが正規分布に従うかを評価するための仮説検定です。帰無仮説は「データは正規分布に従う」で、p値が0.05以上なら正規性が支持されます。疫学研究では、適切な解析手法選択のためにデータの正規性確認が重要です。 - 架空医療データセットとPython解析例
以下は、100人の患者の収縮期血圧データ(平均120 mmHg、標準偏差15 mmHg)を生成し、シャピロ・ウィルク検定を実施する例です。 - Q-Qプロットの概要
Q-Qプロット(Quantile-Quantile Plot)は、サンプルデータの各分位点(quantile)を、理論的な分布(通常は正規分布)の分位点と比較するグラフです。これにより、データがその理論分布にどれほど適合しているかを視覚的に評価できます。
疫学研究では、正規性の検証がパラメトリック解析(例:t検定、回帰分析)を適用する前提条件となります。Q-Qプロットは、データが正規分布に近いかどうかを直感的に把握するための有用なツールです。
例えば、血液検査の値や生体測定データが正規分布に従っているかどうかを確認する際に用いられ、もしデータ点が45度の直線上に概ね並ぶなら、正規性が支持されると解釈されます。
解釈方法としては、プロット上の点が直線に沿って分布している場合、サンプルは理論分布(正規分布)に適合していると判断されます。一方、点が直線から逸脱している場合は、データの分布が歪んでいる、または裾が重い(または軽い)ことを示唆し、さらなる検討が必要です。
上記のGoogle Colaboratoryでは、生成した血圧データの正規性を検証し、p値により正規分布の仮定を判断します。
コードを動かすと統計量 = 0.990, p値 = 0.655
との結果がでてきます。
シャピロ・ウィルク検定の統計量は1に近いほどデータが正規分布に近いことを示しますので、今回の値0.990は、ほぼ理想的な正規分布と同等であることを意味します。
また、p値が0.655と非常に高いことから、帰無仮説「データは正規分布に従う」を棄却できません。これは、観察されたデータが統計的に正規分布から逸脱しているとは言えない、すなわち正規性の仮定が成立していると解釈されます。
したがってこの結果は、対象となるデータが正規分布に近いと判断でき、以降の解析(例えばt検定や回帰分析)において正規性を仮定しても問題ないことを示唆しています。
このようにp値が0.05以上なら、データは正規分布とみなされ、解析手法の選定に有用です。
t分布の概要と使用例
t分布は、正規分布に従う母集団からの標本平均の分布を表すもので、特に標本サイズが小さい場合や母分散が未知の場合に使用されます。自由度と呼ばれるパラメータによって形状が変化し、自由度が大きくなるにつれて正規分布に近づきます。
臨床研究では、例えば新薬の効果を評価する際に、少数の患者データから母集団の平均値を推定する場合にt分布が活用されます。
使用例
例えば、新薬の効果評価のため、治療群と対照群それぞれ15名の患者の収縮期血圧(mmHg)を例にとってみてみます。
治療群は平均118、対照群は平均125、標準偏差は両群とも10と設定します。
NumPyとPandasを用いてデータセットを生成し、SciPyでt検定を実施する方法を示します。
import numpy as np import pandas as pd import scipy.stats as stats # シードの設定 np.random.seed(42) # 治療群と対照群の架空データ生成 treatment = np.random.normal(loc=118, scale=10, size=15) control = np.random.normal(loc=125, scale=10, size=15) # データフレームの作成 df = pd.DataFrame({'治療群': treatment, '対照群': control}) print(df.describe()) # t検定の実施(等分散性を仮定) t_stat, p_val = stats.ttest_ind(treatment, control, equal_var=True) print(f"t値: {t_stat:.3f}, p値: {p_val:.3f}")
結果の解釈
- 平均値の比較
治療群の平均収縮期血圧は118.10 mmHg、対照群は121.13 mmHgと、治療群の値が約3 mmHg低い傾向がありますが、この差は統計的に有意ではありません。 - t値とp値の意味
t値が-0.930という負の値は、治療群の平均が対照群より低い方向にあることを示唆しますが、p値0.360は有意水準(通常0.05)を大きく上回るため、帰無仮説(「両群間に差がない」)を棄却できません。すなわち、観察された差は偶然の変動の範囲内と解釈されます。 - サンプルサイズとばらつき
各群15人という小規模サンプルであり、治療群の標準偏差は9.94、対照群は7.78と異なるばらつきを示しています。小規模なサンプルでは検出力が低く、真の効果が見逃されるリスクがあるため、追加データの収集が望ましいです。
注意点
- 標本サイズの考慮
標本サイズが小さい場合、t分布を用いた推定の信頼性が低下する可能性があります。適切な標本サイズの設定が重要です。 - 等分散性の仮定
2群間の比較を行う際には、「各群の分散が等しい」という仮定が必要です。この仮定が満たされない場合、ウェルチのt検定などの代替手法を検討します。
カイ二乗分布の概要と使用例
カイ二乗分布は、正規分布に従う独立な変数の二乗和が従う分布で、自由度によって形状が変化します。この分布は、分散分析や独立性の検定などに用いられます。
例えば、臨床試験において、治療群と対照群の間で特定の副作用の発生率に差があるかを検定する際に、カイ二乗検定が使用されます。
使用例
ここで下記のデータセットを作成し使用してみます。
- 1.治療群
治療群は200人の患者で構成され、そのうち45人が副作用を発症し、155人が発症していません。これは、治療群における副作用発生率が22.5%(45/200)であることを示しています。 - 2.対照群
対照群も同じく200人の患者で、30人が副作用を発生し、170人は副作用を発生していません。対照群の副作用発生率は15%(30/200)となります。
治療群と対照群で副作用発生率に差があるかどうかを、カイ二乗検定を用いて検定してみます。
import numpy as np import scipy.stats as stats # 架空のクロス集計表 data = np.array([[45, 155], [30, 170]]) # カイ二乗検定の実施 chi2, p_val, dof, expected = stats.chi2_contingency(data) print(f"カイ二乗統計量: {chi2:.3f}, p値: {p_val:.3f}") print("期待度数:") print(expected)
使用例の結果の解釈
上記の結果は
カイ二乗統計量: 3.216, p値: 0.073 期待度数: [[ 37.5 162.5] [ 37.5 162.5]]でした。
- 1.検定結果の概要
このカイ二乗検定では、カイ二乗統計量が3.216、p値が0.073という結果でした。これは、治療群と対照群の間で副作用の発生率に関して、帰無仮説(群間に差がない)を棄却できず、統計的有意差が認められなかったことを示しています。 - 2.期待度数の意義
期待度数[[37.5, 162.5], [37.5, 162.5]]は、もし治療群と対照群間に実際の差がなければ、各セルに期待される患者数です。観察されたデータがこの期待値と大きく逸脱しなければ、統計的な有意差は見出されません。 - 3.解釈
この結果から、治療の有無による副作用発生の分布に差は認められず、介入が副作用発生に及ぼす影響は統計的に確認できないと判断します。
ただし、p値0.073は0.05に近いため、一概に「意味がない」という判断を行わずに、サンプルサイズの増加や他の要因の検討により、さらなる解析が必要な場合もあります。
注意点
- 1.期待度数の確認
カイ二乗検定を適用する際には、各セルの期待度数が5以上であることが望ましいとされています。期待度数が小さい場合、フィッシャーの正確検定などの代替手法を検討します。 - 2.独立性の仮定
データが独立であるという仮定が満たされているかを確認する必要があります。関連性のあるデータの場合、適切な解析手法を選択する必要があります。
まとめ
確率と確率分布の理解は、臨床研究におけるデータ解析や結果の解釈に不可欠です。正規分布、t分布、カイ二乗分布などの主要な確率分布の特性を把握し、適切な場面で適用することで、研究の信頼性と妥当性を高めることが可能となります。
特に、データの正規性の検証や標本サイズの考慮、各分布の適用条件を理解することが重要です。これらの知識を基に、臨床研究のデザインやデータ解析を適切に行い、統計的トリックに惑わされない判断力を養うことが重要です。

- とみー先生
- 産婦人科医として勤務しつつ、人工知能やビッグデータの解析研究を行っています。
Xアカウントはこちら
コメントを投稿する