MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

R で適合度の検定に必要なサンプル数を計算する方法

「あなたのデータ、本当にその仮説に合ってる?」📈 統計分析でよくあるこの疑問。

今回は、観測されたデータが、ある理論的な分布や比率にどれくらい「適合しているか」を科学的に評価する「適合度検定」について、基本から具体例、必要なサンプル数の計算の実践までを解説。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

適合度検定とは

適合度検定は、観測されたデータが特定の理論的分布や比率にどれだけ当てはまるかを統計的に評価する手法だ。

例えば、「サイコロの各目の出方が均等か」といった疑問に答える際に用いる。

カイ二乗検定が一般的で、観測度数と期待度数のズレをカイ二乗値で数値化する。

この値とp値に基づき、データが理論に適合するかを判断する。

あるカテゴリカル変数が理論に適合するかを調べることが目的であり、独立性の検定とは異なる。

適合度検定の具体例

ある製薬会社が新薬の副作用について調査したとする。

過去のデータから、この種の薬では「頭痛」「吐き気」「発疹」の副作用がそれぞれ20%, 30%, 50%の割合で発生することが分かっていた。

新薬を100人の患者に投与したところ、頭痛が25人、吐き気が28人、発疹が47人に発生した。

ここで適合度検定を用いることで、「新薬の副作用の発生割合が、これまでの薬の発生割合と統計的に異なっているか?」を判断できる。

もしp値が有意水準(例えば5%)を下回れば、新薬の副作用の割合は過去の薬と異なると結論できるだろう。

R で計算する場合、以下のようなスクリプトになる。

# 1. 観測度数の定義
# 新薬を100人の患者に投与した結果
observed_counts <- c(
  "頭痛" = 25,
  "吐き気" = 28,
  "発疹" = 47
)

# 2. 期待される比率(過去のデータ)の定義
# 過去のデータから、副作用の発生割合は「頭痛: 20%, 吐き気: 30%, 発疹: 50%」
expected_proportions <- c(
  "頭痛" = 0.20,
  "吐き気" = 0.30,
  "発疹" = 0.50
)

# 3. カイ二乗適合度検定の実行
# chisq.test() 関数を使用し、観測度数 (x) と期待される比率 (p) を指定
chi_square_test_result <- chisq.test(x = observed_counts, p = expected_proportions)

# 4. 検定結果の表示
cat("--- 適合度検定の結果 ---\n")
print(chi_square_test_result)

検定結果は以下のとおりで、有意水準5%とすると、過去のデータと異なるとは言えないという結果になる。

> # 4. 検定結果の表示
> cat("--- 適合度検定の結果 ---\n")
--- 適合度検定の結果 ---
> print(chi_square_test_result)

        Chi-squared test for given probabilities

data:  observed_counts
X-squared = 1.5633, df = 2, p-value = 0.4576

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

適合度検定に必要なサンプル数の計算

適合度検定のサンプルサイズ計算をRで行うには、主にpwrパッケージのpwr.chisq.test()関数を使用する。

この関数を使うには、以下の情報が必要

  • w (効果量 Cohen’s w): 検出したい効果の大きさ。カテゴリカルデータの場合、Cohen’s wが用いられる。小さい効果(0.1)、中程度の効果(0.3)、大きい効果(0.5)が目安とされる。
  • df (自由度): カテゴリの数から1を引いた値。例えば、3つのカテゴリがある場合、df = 3 – 1 = 2 となる。
  • sig.level (有意水準): 通常は0.05(5%)が用いられる。
  • power (検出力): 帰無仮説が偽である場合に、正しくそれを棄却できる確率。通常は0.8(80%)が目標とされる。
  • N (サンプルサイズ): これが計算したい値。
# pwrパッケージがインストールされていない場合はインストール
# install.packages("pwr")

# pwrパッケージを読み込む
library(pwr)

# 適合度検定のサンプルサイズ計算
# パラメータ設定:
# w: 効果量 (Cohen's w) - 中程度の効果を想定
# df: 自由度 (カテゴリ数 - 1)。例: 3つのカテゴリ (頭痛、吐き気、発疹) -> df = 2
# sig.level: 有意水準
# power: 検出力 (目標とする検出力)
sample_size_result <- pwr.chisq.test(
  w = 0.3,         # Cohen's w (効果量): 0.1(小), 0.3(中), 0.5(大)
  df = 2,          # 自由度: カテゴリ数 - 1
  sig.level = 0.05, # 有意水準
  power = 0.8,     # 検出力
  N = NULL         # 計算したいNはNULLに設定
)

# 結果の表示
print(sample_size_result)

# サンプルサイズをより明確に表示
cat("\n必要なサンプルサイズ (N): ", ceiling(sample_size_result$N), "\n")

結果は以下のとおり、N = 108 と計算される

> print(sample_size_result)

     Chi squared power calculation 

              w = 0.3
              N = 107.0521
             df = 2
      sig.level = 0.05
          power = 0.8

NOTE: N is the number of observations

> # サンプルサイズをより明確に表示
> cat("\n必要なサンプルサイズ (N): ", ceiling(sample_size_result$N), "\n")

必要なサンプルサイズ (N):  108 

効果量 w の計算方法

ここで、効果量 w はどのようにして計算するか。

適合度検定における効果量として、一般的にCohen’s w (またはファイ係数 ϕ) が用いられる。これは、観測された度数と期待される度数の間の「ずれ」の大きさを標準化した指標である。

Cohen’s w は、以下の計算式で求められる。

$$ w=\sqrt{\frac{\chi^2}{N}} $$​

ここで、

  • χ2 は適合度検定によって得られたカイ二乗値
  • N は総サンプルサイズ(観測度数の合計)

ここでは、先の「新薬の副作用」の例を使って、カイ二乗検定を行い、その結果からCohen’s wを計算するRスクリプトを示す。

例題: 新薬を100人の患者に投与したところ、

  • 頭痛: 25人
  • 吐き気: 28人
  • 発疹: 47人 が発生した。

過去のデータから、副作用の発生割合は「頭痛: 20%, 吐き気: 30%, 発疹: 50%」と期待される。

# 1. 観測度数を定義
observed_counts <- c(25, 28, 47)
names(observed_counts) <- c("頭痛", "吐き気", "発疹")

# 2. 期待される比率を定義 (合計が1になるように)
expected_proportions <- c(0.20, 0.30, 0.50)

# 3. カイ二乗適合度検定を実行
# chisq.test() 関数は、引数 p に期待される比率を渡すことで適合度検定を行う
chi_square_test_result <- chisq.test(x = observed_counts, p = expected_proportions)

# 結果を表示
print(chi_square_test_result)

# 4. カイ二乗値と総サンプルサイズを取得
chi_square_value <- chi_square_test_result$statistic
total_sample_size <- sum(observed_counts)

# 5. Cohen's w を計算
cohens_w <- sqrt(chi_square_value / total_sample_size)

# 結果を表示
cat("\n適合度検定の結果:\n")
cat("カイ二乗値 (Chi-squared value):", chi_square_value, "\n")
cat("自由度 (df):", chi_square_test_result$parameter, "\n")
cat("p値 (p-value):", chi_square_test_result$p.value, "\n")
cat("総サンプルサイズ (Total N):", total_sample_size, "\n")
cat("Cohen's w (効果量):", cohens_w, "\n")

# 効果量の解釈の目安 (Cohen, 1988)
# w = 0.1: 小さい効果
# w = 0.3: 中程度の効果
# w = 0.5: 大きい効果

その結果、効果量 w は 約 0.125 と計算された

適合度検定の結果:
> cat("カイ二乗値 (Chi-squared value):", chi_square_value, "\n")
カイ二乗値 (Chi-squared value): 1.563333 
> cat("自由度 (df):", chi_square_test_result$parameter, "\n")
自由度 (df): 2 
> cat("p値 (p-value):", chi_square_test_result$p.value, "\n")
p値 (p-value): 0.4576426 
> cat("総サンプルサイズ (Total N):", total_sample_size, "\n")
総サンプルサイズ (Total N): 100 
> cat("Cohen's w (効果量):", cohens_w, "\n")
Cohen's w (効果量): 0.1250333 

w = 0.125 で再計算すると、617 例必要と計算された。

> # w = 0.125 で再計算
> sample_size_result <- pwr.chisq.test(
+     w = 0.125, # Cohen's w (効果量): 0.1(小), 0.3(中), 0.5(大)
+     df = 2, # 自由度: カテゴリ数 - 1
+     sig.level = 0.05, # 有意水準
+     power = 0.8, # 検出力
+     N = NULL # 計算したいNはNULLに設定
+ )
> # 結果の表示
> print(sample_size_result)

     Chi squared power calculation 

              w = 0.125
              N = 616.6201
             df = 2
      sig.level = 0.05
          power = 0.8

NOTE: N is the number of observations

> # サンプルサイズをより明確に表示
> cat("\n必要なサンプルサイズ (N): ", ceiling(sample_size_result$N), "\n")

必要なサンプルサイズ (N):  617 

まとめ

適合度検定は、観測データがある理論的な分布や比率にどれほど「適合しているか」を評価する統計手法である。

サイコロの目の出方や新薬の副作用比率など、手元のデータが期待される割合と一致するかを判断する際に活用される。

主にカイ二乗検定を用い、観測度数と期待度数のズレから統計的有意性を評価する。

研究計画時には、Cohen’s wなどの効果量を考慮したサンプルサイズ計算が重要となる。

これにより、効率的かつ信頼性の高いデータ分析が可能となり、クリニカルクエスチョンに科学的な根拠を与えてくれる。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次