サンプルサイズブック ―コピペで使える!簡単便利!― 統計ソフト R で使えるサンプルサイズ計算のスクリプト集 2 3 まえがき 本書は、ブログ「一日いち R」に掲載した、サンプルサイズ計算のためのスクリプトを集め たものである。スクリプト本体はブログに掲載したものと寸分たがわず同じものであるが、 記載の整理とスクリプトや結果の説明を加筆してある。また、ブログに掲載した順番より、 わかりやすい順番に並べ替えてある。 本書の利用方法はいたってシンプルである。下記のような太字のスクリプトを R のコンソ ールにコピー&ペーストする。 myPsize <- function(p,delta){ n <- 4*(1-p)/(p*delta^2) c("N at least"=n) } 次に、文中に出てくる結果セクションのプロンプト(>マーク)がついている先頭行を R の エディタにコピー&ペーストして、プロンプトは削除し、パラメータを希望に合わせて変 え、Run する。下記の場合 0.08 や 0.2 を変更する。 > myPsize(0.08,0.2) 参考文献中の式をスクリプトとして忠実に表現し、例題の解答とあっていることを確認し ているが、誤りを見つけた場合はご連絡いただければ幸いである。ブログ「一日いち R」の コメント欄に記載していただければと思う。 サンプルサイズを計算したいのだが、手ごろなソフトウェアや R のパッケージが見つから ないと悩んでいる諸氏のお役にたてれば幸いである。 なお、本書に掲載していない検定・試験デザインのサンプルサイズ計算は、随時追加する 予定であるので期待していただきたい。 2014 年 6 月 30 日 一日いち R 管理人 4 目次 母比率の推定···························································5 平均値の差の検定 ·················································· 6 ANOVA―誤差分散がわかる場合―··········································7 ANOVA―誤差分散がわからない場合― ·····································9 Dunnett 検定·························································12 傾向性の検定··························································15 相関係数の検定························································17 ロジスティック回帰モデル···············································19 Cox 比例ハザードモデル·················································21 割合の非劣性検定(Dunnett-Gent の方法) ···································24 割合の非劣性検定(最尤推定量に基づく方法) ·································26 平均値の非劣性検定····················································29 Cox 比例ハザードモデルの非劣性検定······································31 クロスオーバー試験····················································35 Matched case-control study··············································37 5 母比率の推定 相対精度 delta で,母比率を推定する際のサンプルサイズ計算。One arm の試験に応用可 能。 myPsize <- function(p,delta){ n <- 4*(1-p)/(p*delta^2) c("N at least"=n) } 8%を相対精度 20%(これを 95%信頼区間とする)で推定するためには、1150 例必要。1150 例で 8%(92 例)だった場合、95%信頼区間は 6.5-9.7%。±1.6%(8%の 20%)程度であるこ とを binom.test()で確認している。 > myPsize(0.08,0.2) N at least 1150 > binom.test(1150*0.08, 1150) Exact binomial test data: 1150 * 0.08 and 1150 number of successes = 92, number of trials = 1150, p-value < 2.2e-16 alternative hypothesis: true probability of success is not equal to 0.5 95 percent confidence interval: 0.06497587 0.09721197 sample estimates: probability of success 0.08 参考文献 丹後俊郎著 古川俊之監修 新版 医学への統計学 9.1.2 母比率の推定 pp.184-185 朝倉書店 6 平均値の差の検定 2つの母平均の差の検定(いわゆる t 検定)を行って解析する場合のサンプルサイズ計算。 power.t.test(power=, delta=) 有意水準両側 5%(デフォルト) 、検出力 80%、delta(2つの母平均の差を母標準偏差で割 ったもの)が 0.7 とした場合のサンプルサイズを見積もった場合、一群 34 人必要と計算さ れる。 > power.t.test(power=.8, delta=.7) Two-sample t test power calculation n = 33.02467 delta = 0.7 sd = 1 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group delta については、参考文献の p.186 にある「慣例的性質」についての記述が役に立つ。 以 下 d は delta と同じ。 「d の推定は困難である場合が多いので、慣例的性質を使い目安をつ けるのも一つの方法」とのこと。 1) 小さな差を検出したければ d=0.1~0.2 2) 中位な差を検出したければ d=0.4~0.5 3) 大きな差を検出したければ d=0.8~0.9 参考文献 丹後俊郎著 古川俊之監修 新版 医学への統計学 朝倉書店 9. 標本の大きさの求め方 9.2.1 二つの母平均の差の検定 pp.185-192 7 ANOVA―誤差分散がわかる場合― 連続変数を 3 群以上の群間で比較する分散分析のためのサンプルサイズ計算。検出力 80%・ 90%、有意水準 5%・1%それぞれの組み合わせ(4 通り)に対応している。 k:群の数 d:群間で最大の差(母平均の差の最大値) sigma0:誤差の母分散の平方根 anova.sample.size <- function(k, d, sigma0, alpha=0.05, power=.8){ DELTA <- d^2/(2*sigma0^2) phiA <- k-1 if (power==.8 & alpha==.05) {lambda <- 4.860+3.584*sqrt(phiA)} else if (power==.9 & alpha==.05) {lambda <- 7.049+4.244*sqrt(phiA)} else if (power==.8 & alpha==.01) {lambda <- 7.736+4.551*sqrt(phiA)} else if (power==.9 & alpha==.01) {lambda <- 10.439+5.213*sqrt(phiA)} n <- lambda/DELTA METHOD <- "ANOVA Sample Size Calculation" structure(list(n=n, delta=d, sd=sigma0, sig.level=alpha, power=power, method=METHOD),class="power.htest") } 以下は、4 群比較で、最大の 2 群間の差を 2、誤差分散の平方根を 1、有意水準を 5%とし て、検出力を 80%または 90%とすると、以下のように、それぞれ一群 6 例、8 例が必要と 計算される。 > anova.sample.size(k=4, d=2, sigma0=1) ANOVA Sample Size Calculation n = 5.533835 delta = 2 sd = 1 sig.level = 0.05 power = 0.8 8 > anova.sample.size(k=4, d=2, sigma0=1, power=.9) ANOVA Sample Size Calculation n = 7.199912 delta = 2 sd = 1 sig.level = 0.05 power = 0.9 参考文献 永田靖著 サンプルサイズの決め方 朝倉書店 pp.129-164 9.3 (誤差分散が既知の場合の)サンプルサイズ設計方法 pp.136-139 9 ANOVA―誤差分散がわからない場合― 誤差分散がわからない場合の分散分析のサンプルサイズ計算。わからないなりにも、わか っているとして、まず既知の場合でサンプルサイズ見積もりをする。そのnで未知の場合 の検出力を計算し、未知の場合のnを求める。nを1ずつずらして検出力を計算して、微 調整をするような感じ。 k:群の数 n:サンプルサイズ d:群間で最大の差(母平均の差の最大値) sigma0:誤差母分散の推定値の平方根 anova.power.michi <- function(k, n, d, sigma0, alpha=.05){ DELTA <- d^2/(2*sigma0^2) phiA <- k-1 phiE <- k*(n-1) lambda <- n*DELTA cA <- (phiA+2*lambda)/(phiA+lambda) phiA.star <- (phiA+lambda)^2/(phiA+2*lambda) w <- qf(p=alpha, df1=phiA, df2=phiE, lower.tail=FALSE) u <- (sqrt(w/phiE)*sqrt(2*phiE-1)-sqrt(cA/phiA)*sqrt(2*phiA.star-1))/(sqrt(c A/phiA+w/phiE)) power <- 1-pnorm(u) METHOD <- "ANOVA Power Calculation Variance unknown" structure(list(n=n, delta=d, sd=sigma0, sig.level=alpha, power=power, method=METHOD), class="power.htest") } 以下は、例として、3 群で、一群 5 例、最大の群間差を 2、誤差分散を 2 としたとき、検出 力が約 41%であると計算されている。 > anova.power.michi(k=3, n=5, d=2, sigma0=sqrt(2)) ANOVA Power Calculation Variance unknown 10 n = 5 delta = 2 sd = 1.414214 sig.level = 0.05 power = 0.4088796 誤差分散がわからない場合は、以下のように検討していく。まず誤算分散がわからないな りにも仮に 1 だとして、4 群で、最大の群間差を 2 として、有意水準を 5%、検出力を 90% とした場合のサンプルサイズを計算すると、以下の通り一群 8 例と計算される。 > anova.sample.size(k=4, d=2, sigma0=1, power=.9) ANOVA Sample Size Calculation n = 7.199912 delta = 2 sd = 1 sig.level = 0.05 power = 0.9 次に、一群 8 例の場合と 9 例の場合の検出力を、誤差分散がわからない時の計算方法で検 討する。 そうすると 9 例の時のほうが 90%を上回り、検出力 90%で検定したいのであれば、 一群 9 例のほうが適切であることがわかる。 > anova.power.michi(k=4, n=c(8,9), d=2, sigma0=1) ANOVA Power Calculation Variance unknown n = 8, 9 delta = 2 sd = 1 sig.level = 0.05 power = 0.8955750, 0.9338735 また、ほかの例として、5 群比較で、最大の群間差を 3、誤差分散を 3、有意水準 1%、検 出力 80%としたときのサンプルサイズ計算を行うと、一群 12 例と計算される。 11 > anova.sample.size(k=5, d=3, sigma0=sqrt(3), alpha=.01) ANOVA Sample Size Calculation n = 11.22533 delta = 3 sd = 1.732051 sig.level = 0.01 power = 0.8 同様に、誤差分散がわからないとして、一群 12 例と 13 例の時の検出力を比べてみると、 13 例の時が 80%を超えることがわかる。つまり検出力 80%で検定したいのであれば、一 群 13 例が適切であると言える。 > anova.power.michi(k=5, n=c(12,13), d=3, sigma0=sqrt(3), alpha=.01) ANOVA Power Calculation Variance unknown n = 12, 13 delta = 3 sd = 1.732051 sig.level = 0.01 power = 0.7754018, 0.8240690 参考文献 永田靖著 サンプルサイズの決め方 朝倉書店 10 1元配置分散分析-誤差分散が未知の場合 pp.129-164 10.2 検出力の計算方法 pp.150-155 10.3 サンプルサイズの設計方法 pp.156-158 12 Dunnett 検定 Dunnett(ダネット)検定は、対照群と複数の試験群の平均値を比較するときに、多重性を 考慮した検定方法。このセクションの参考文献である Liu の論文中の数値表を用いて計算 する。データフレーム dat.tab に数値表を格納して計算している。 dat.tab <- read.table("http://homepage3.nifty.com/ttyotani/ichirdat/110921_liu_199 7_table2_nu40_rev.txt") sample.size.dunnett <function( nu=40,sig.level=c(.1,.05,.01),power=c(.75,.80,.85,.90,.95), treat=c(2:10),Delta,sd=1 ) { dat.tab.abs <- subset(dat.tab, alpha==sig.level & Power==power & k==treat) n <- (dat.tab.abs$sqrt.n.delta/Delta*sd)^2 n0 <- sqrt(treat)*n NOTE <- "n is each number in *treatment* groups" METHOD <- "Sample size determination for Dunnett test" structure( list("n0 (control)" = n0, "n (treatment)" = n, "Treatment groups" = treat, "Diff. to be rejected" = Delta, SD = sd, sig.level = sig.level, power = power, alternative = "two.sided", note = NOTE, method = METHOD), class = "power.htest") } 有意水準両側 5%、 検出力 80%、 試験群 3 群、 帰無仮説の棄却が期待される平均値の差が 1、 標準偏差が 1(デフォルト)とすると、対照群が 43 人、試験群各群 25 人(試験群合計 75 13 人)必要と計算される。 > sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=1) Sample size determination for Dunnett test n0 (control) = 42.71438 n (treatment) = 24.66116 Treatment groups = 3 Diff. to be rejected = 1 SD = 1 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is each number in *treatment* groups 平均値の差を 0.5 と小さくすると、対照群が 171 人、試験各群 99 人必要と、必要例数が増 加する。 > sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=0.5) Sample size determination for Dunnett test n0 (control) = 170.8575 n (treatment) = 98.64462 Treatment groups = 3 Diff. to be rejected = 0.5 SD = 1 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is each number in *treatment* groups 平均値の差を 1 に戻し、標準偏差を 2 倍の 2 にしても上記と同じ結果が得られる。 14 > sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=1,sd=2) Sample size determination for Dunnett test n0 (control) = 170.8575 n (treatment) = 98.64462 Treatment groups = 3 Diff. to be rejected = 1 SD = 2 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is each number in *treatment* groups 参考文献 Liu W. On sample size determination of Dunnett's procedure for comparing several treatments with a control. J Stat Plan Inference 1997;62:255-261. 永田 靖 ダネットの方法におけるサンプルサイズの決め方について 医薬安全性研究会 会報 2005;50(May):51-59. 15 傾向性の検定 3 群以上の比較における、平均値の傾向性検定のサンプルサイズ計算。母数とスコアの相関 係数を考える。合計が 0 になるようにスコアを与えるのがポイント。例えば、K=3(3 グル ープ)の場合は c(-1,0,1)、K=4 の場合は c(-3,-1,1,3):等間隔(間隔は 2)など。ANOVA から 計算される誤差分散が必要であるが、実際の場面では、これを見つけるのが難しいように 思う。 score:線形対比(ベクトル) mu:母平均(ベクトル) sigma.sq:ANOVA から計算される誤差分散 samplesize.mean.trend.test <- function(mu, sigma.sq, score, sig.level=.05, power=.8){ Za <- qnorm(sig.level/2, lower.tail=FALSE) Zb <- qnorm(power) n <- ((Za+Zb)^2 * sigma.sq * sum(score^2))/(sum(score*mu)^2) list(n=n, mu=mu, sigma.sq=sigma.sq, score=score, sig.level=sig.level, power=power) } 3 群比較として、母平均が-2、-3.5、-3.5 であるとして、誤差分散が 70×0.362、スコ アを-2、1、1、有意水準 5%、検出力 80%とすると、以下の通り、一群 48 人必要と計算 される。 > samplesize.mean.trend.test(mu=c(-2,-3.5,-3.5), score=c(-2,1,1)) $n [1] 47.47002 $mu [1] -2.0 -3.5 -3.5 $sigma.sq [1] 9.072 sigma.sq=70*0.36^2, 16 $score [1] -2 1 1 $sig.level [1] 0.05 $power [1] 0.8 参考文献 丹後俊郎著 無作為化比較試験 朝倉書店 3.7 傾向性検定-量反応関係の検出 17 相関係数の検定 相関係数を求める際のサンプルサイズ計算。検定の帰無仮説は、母相関係数が 0(ゼロ)で あるため、統計学的有意でも母相関係数が 0 ではないと検証されるに過ぎない。つまり、 相関係数の検定が統計学的有意であることと、そのサンプルの相関係数が実質的に意味の あるものかどうかは、必ずしも一致しない。相関係数が真の意味があるかどうかの判定は 以下の表を参考に。 表 相関係数の解釈 相関係数の絶対値 解釈 0.0~0.2 ほとんど相関関係がない 0.2~0.4 やや相関関係がある 0.4~0.7 かなり相関関係がある 0.7~1.0 強い相関関係がある 引用:ピアソンの積率相関係数 http://aoki2.si.gunma-u.ac.jp/lecture/Soukan/pearson.html samplesize.cor.test <- function(r, sig.level=.05, power=.8){ Za <- qnorm(sig.level/2, lower.tail=FALSE) Zb <- qnorm(power) C <- 0.5*log((1+r)/(1-r)) N <- ((Za+Zb)/C)^2 + 3 c(N=N, r=r, alpha=sig.level, Power=power) } 相関係数 0.2、0.3、0.4、0.5、0.6、0.7 を、有意水準 5%、検出力 80%で、統計学的有意 に検出するためには、それぞれ、194 例、85 例、47 例、30 例、20 例、14 例が必要と算出 される。 > samplesize.cor.test(0.2) N r alpha Power 193.9680 0.2000 0.0500 0.8000 > samplesize.cor.test(0.3) N r alpha Power 84.92781 0.30000 0.05000 0.80000 18 > samplesize.cor.test(0.4) N r alpha Power 46.73161 0.40000 0.05000 0.80000 > samplesize.cor.test(0.5) N r 29.0123 0.5000 alpha Power 0.0500 0.8000 > samplesize.cor.test(0.6) N r alpha Power 19.33641 0.60000 0.05000 0.80000 > samplesize.cor.test(0.7) N r alpha Power 13.43442 0.70000 0.05000 0.80000 また、相関係数 0.4 を有意水準 1%、検出力 80%で検出する場合、有意水準 5%、検出力 90%で検出する場合は、それぞれ、69 例、62 例が必要と計算される。 > samplesize.cor.test(0.4, sig.level=.01) N r alpha Power 68.07171 0.40000 0.01000 0.80000 > samplesize.cor.test(0.4, power=.9) N r alpha Power 61.54422 0.40000 0.05000 0.90000 参考文献 Stephen B. Hulley & Steven R. Cummings, 木原正博監訳、現代疫学研究会訳 医学的研究のデザイン 研究の質を高める疫学的アプローチ メディカル・サイエンス・インターナショナル Appendix 13-C 相関係数を分析に用いる場合に必要なサンプルサイズ 19 ロジスティック回帰モデル ロジスティック回帰モデルにおいて、連続変数を用いたサンプルサイズ計算。1SD 上昇し た時の発生確率を想定して計算する。 p0:平均レベルにおける発生確率 p1:平均+1SD レベルにおける発生確率 sample.size.logistic <- function(p0, p1, sig.level=.05, power=.8,alternative=c("two.sided","one.sided")){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) odds0 <- p0/(1-p0) odds1 <- p1/(1-p1) theta <- odds1/odds0 lambda <- log(theta) Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) delta <- (1+(1+lambda^2)*(exp(5*lambda^2/4)))/(1+exp(-lambda^2/4)) n <- ((Za+Zb*exp(-lambda^2/4))^2*(1+2*p0*delta))/(p0*lambda^2) NOTE <- "n is size of entire cohort" METHOD <- "Sample size, logistic reg. with cont. var." structure(list(n = n, "Prob. in average level" = p0, "Prob. in ave.+SD level" = p1, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } 20 平均レベルの発生確率を 8%、平均+1SD レベルの発生確率を 8%の 1.5 倍=12%、検出力 90%、片側検定とすると、コホート全体の人数は 613 人必要と計算される。 > sample.size.logistic(p0=0.08, p1=0.08*1.5, power=.9, alternative="one.sided") Sample size, logistic reg. with cont. var. n = 612.0427 Prob. in average level = 0.08 Prob. in ave.+SD level = 0.12 sig.level = 0.05 power = 0.9 alternative = one.sided NOTE: n is size of entire cohort 検出力 80%、両側検定にすると、コホート全体で 569 人必要と計算される。 > sample.size.logistic(p0=0.08, p1=0.08*1.5) Sample size, logistic reg. with cont. var. n = 568.7537 Prob. in average level = 0.08 Prob. in ave.+SD level = 0.12 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is size of entire cohort 参考文献 Alan Agresti 著 渡邉裕之・菅波秀規・吉田光宏・角野修司・寒水孝司・松永信人 共訳 カテゴリカルデータ解析入門 サイエンティスト社 Hsieh FY. Sample size tables for logistic regression. Stat Med 1989;8(7):795-802. 21 Cox 比例ハザードモデル Cox の比例ハザードモデルにおけるサンプルサイズ計算。Freedman の方法と Shoenfeld の方法がある。 t:観察期間(年) S1:試験群の生存率 S0:対照群の生存率 dF:Freedman の方法で算出した各群の死亡数 dS:Shoenfeld の方法で算出した各群の死亡数 sample.size.cox <- function(t,S1,S0,alternative="two.sided",power=.8, sig.level=.05){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) beta <- log(log(S1)/log(S0)) H1 <- -1*log(S1)/t H0 <- -1*log(S0)/t HR <- H1/H0 Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) dF <- (Za+Zb)^2*(HR+1)^2/(2*(HR-1)^2) nF <- dF/(((1-S1)+(1-S0))/2) dS <- 2*(Za+Zb)^2/((log(HR))^2) nS <- dS/(((1-S1)+(1-S0))/2) NOTE <- "n is number in *each* group" METHOD <- "Sample Size Calculation of Cox Propotional Hazard Model" structure( list( "Death (Freedman)" = dF, "Number (Freedman)" = nF, "Death (Shoenfeld)" = dS, "Number(Shoenfeld)" = nS, "Survival trt" = S1, 22 "Survival ctl" = S0, "Hazard trt" = H1, "Hazard ctl" = H0, "Hazard ratio" = HR, "Follow up(y)" = t, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } 追跡期間を 5 年間、試験群の生存率を 0.8、対照群の生存率を 0.65 として、有意水準 5%、 検出力 80%とすると、Freedman の方法では各群 142 人、Shoenfeld の方法では各群 132 人必要と計算される。 > sample.size.cox(t=5, S1=0.8, S0=0.65) Sample Size Calculation of Cox Propotional Hazard Model Death (Freedman) = 38.92388 Number (Freedman) = 141.5414 Death (Shoenfeld) = 36.27976 Number(Shoenfeld) = 131.9264 Survival trt = 0.8 Survival ctl = 0.65 Hazard trt = 0.04462871 Hazard ctl = 0.08615658 Hazard ratio = 0.5179954 Follow up(y) = 5 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group 23 参考文献 浜田&藤井 生存時間解析における症例数設計 第 22 回 日本 SAS ユーザー会総会およ び研究発表会 論文集 2003 年 7 月 31 日~8 月 1 日 東京 24 割合の非劣性検定(Dunnett-Gent の方法) 割合がエンドポイントの場合の非劣性検定のサンプルサイズ計算(Dunnett-Gent の方法)。 以下の設定のほか、有意水準を片側 5%、検出率 80%をデフォルト設定としている。 pA:試験薬の有効率 pB:標準薬の有効率 pB.bar:帰無仮説 H0: pA=pB-DELTA の下で推定された pB.star の漸近値 delta:pA-pB DELTA:臨床的に意味のある最小の差(「有効率が下回る差はこれよりも小さい」が証 明したい仮説) non.inferior.sample.size <- function(pA, pB, DELTA, power=.8, sig.level=.05, alternative="one.sided"){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided = 1, two.sided = 2) delta <- pA-pB pB.bar <- pB+(delta+DELTA)/2 R <- sqrt((pB.bar-DELTA)*(1-pB.bar+DELTA)+pB.bar*(1-pB.bar)) S <- sqrt(pA*(1-pA)+pB*(1-pB)) Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) n <- ((Za*R+Zb*S)/(delta+DELTA))^2 NOTE <- "n is number in *each* group" METHOD <- "Non Inferiority Test Sample Size Calculation (Dunnett-Gent)" structure(list(n = n, pA = pA, pB = pB, DELTA=DELTA, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } 例として、試験薬が有効である被験者の割合を 0.813(81.3%) 、標準薬が有効である被験 25 者の割合を 0.741(74.1%)と見積もり、臨床的に意味のある最小の差を 0.1(10%)とし て、検出力 90%とすると、一群 100 例必要と計算される。 > non.inferior.sample.size(pA=0.813, pB=0.741, DELTA=.1, power=.9) Non Inferiority Test Sample Size Calculation (Dunnett-Gent) n = 99.17305 pA = 0.813 pB = 0.741 DELTA = 0.1 sig.level = 0.05 power = 0.9 alternative = one.sided NOTE: n is number in *each* group 参考文献 丹後俊郎著 無作為化比較試験 朝倉書店 5. 臨床的同等性・非劣性の評価 5.3 独立な母比率の差の検定 pp.100-105 26 割合の非劣性検定(最尤推定量に基づく方法) 割合がエンドポイントの場合の非劣性検定のサンプルサイズ計算で、最尤推定量に基づく 方法。以下の設定のほか、有意水準片側 5%、検出率 80%をデフォルト設定としている。 pA:試験薬の有効率 pB:標準薬の有効率 pB.bar:帰無仮説 H0: pA=pB-DELTA の下で推定された pB.star の漸近値 delta:pA-pB DELTA:臨床的に意味のある最小の差 non.inferior.sample.size.likelihood <- function(pA, pB, DELTA, power=.8, sig.level=.05, alternative="one.sided"){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided = 1, two.sided = 2) delta <- pA-pB a <- 2 b <- -2*pB-2-3*DELTA-delta c <- DELTA^2+2*(1+pB)*DELTA+2*pB+delta d <- -pB*DELTA*(1+DELTA) v <- b^3/(27*a^3)-(b*c)/(6*a^2)+d/(2*a) u <- sign(v)*sqrt(b^2/(9*a^2)-c/(3*a)) w <- (pi+acos(v/u^3))/3 pB.star <- 2*u*cos(w)-b/(3*a) R <- sqrt((pB.star-DELTA)*(1-pB.star+DELTA)+pB.star*(1-pB.star)) S <- sqrt(pA*(1-pA)+pB*(1-pB)) Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) n <- ((Za*R+Zb*S)/(delta+DELTA))^2 NOTE <- "n is number in *each* group" 27 METHOD <- "Non Inferiority Test Sample Size Calculation (Likelihood Method)" structure(list(n = n, pA = pA, pB = pB, DELTA=DELTA, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } Dunnett-Gent の方法と同様に、試験薬が有効である被験者の割合を 0.813(81.3%) 、標準 薬が有効である被験者の割合を 0.741(74.1%)と見積もり、臨床的に意味のある最小の差 を 0.1(10%)として、検出力 90%とすると、一群 102 例必要と計算される。 > non.inferior.sample.size.likelihood(pA=0.813, pB=0.741, DELTA=.1, power=.9) Non Inferiority Test Sample Size Calculation (Likelihood Method) n = 101.4188 pA = 0.813 pB = 0.741 DELTA = 0.1 sig.level = 0.05 power = 0.9 alternative = one.sided NOTE: n is number in *each* group 例として、2/72=2.8%と 2/132=1.5%を比べる場合、1.5%が 2.8%に比べて 0.02(2%)は小 さくないという仮説を検証するには一群約 5000 例必要となる。このような試験設定はあま り現実的でないと言える。 > non.inferior.sample.size.likelihood(pA=2/132, pB=2/72, DELTA=.02) Non Inferiority Test Sample Size Calculation (Likelihood Method) n = 4982.974 pA = 0.01515152 pB = 0.02777778 28 DELTA = 0.02 sig.level = 0.05 power = 0.8 alternative = one.sided NOTE: n is number in *each* group 参考文献 丹後俊郎著 無作為化比較試験 朝倉書店 5. 臨床的同等性・非劣性の評価 5.3 独立な母比率の差の検定 pp.100-105 29 平均値の非劣性検定 平均値を用いた非劣性検定のサンプルサイズ計算。 Delta:非劣性マージン Delta1:対立仮説 H1 における真の差 sample.size.non.inferiority.mean <- function(sig.level=.05, power=.8, Delta, Delta1, sd, alternative="one.sided"){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) d <- (Delta + Delta1)/sd Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) n <- 2*((Za+Zb)/d)^2 NOTE <- "n is number in *each* group" METHOD <- "Non Inferiority Test Sample Size Calculation (Mean)" structure(list(n = n, "Non-inferiority margin" = Delta, "True difference"=Delta1, SD = sd, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } 非劣性マージンを 7、真の差を 34.5-29.7=4.8、SD を 30 として、有意水準片側 5%、検出 力 80%では、一群 80 人必要と計算される。 > sample.size.non.inferiority.mean(Delta=7, Delta1=34.5-29.7, sd=30) Non Inferiority Test Sample Size Calculation (Mean) n = 79.92389 Non-inferiority margin = 7 True difference = 4.8 SD = 30 30 sig.level = 0.05 power = 0.8 alternative = one.sided NOTE: n is number in *each* group 参考文献 丹後俊郎著 無作為化比較試験 朝倉書店 5. 臨床的同等性・非劣性の評価 5.5 独立な母平均の差の検定 pp.113-117 31 Cox 比例ハザードモデルの非劣性検定 Cox の比例ハザードモデルを用いた非劣性検定のサンプルサイズ計算。Freedman と Shoenfeld の方法がある。 t:観察期間(年) S1:試験群の生存率 S0:対照群の生存率 dF:Freedman の方法で算出した各群の死亡数 dS:Shoenfeld の方法で算出した各群の死亡数 Delta.S0:非劣性マージン sample.size.cox.noninf <- function(t,S1,S0,Delta.S0, alternative=c("one.sided","two.sided"),power=.8, sig.level=.05){ alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) beta <- log(log(S1)/log(S0)) H1 <- -1*log(S1)/t H0 <- -1*log(S0)/t HR <- H1/H0 H0.prime <- -1*log(S0-Delta.S0)/t HR.prime <- H1/H0.prime Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) dF <- (Za+Zb)^2*(HR.prime+1)^2/(2*(HR.prime-1)^2) nF <- dF/(((1-S1)+(1-S0))/2) dS <- 2*(Za+Zb)^2/((log(HR.prime))^2) nS <- dS/(((1-S1)+(1-S0))/2) NOTE <- "n is number in *each* group" METHOD <- "Sample Size of Cox Model (noninferiority)" structure( list( "Death (Freedman)" = dF, "Number (Freedman)" = nF, 32 "Death (Shoenfeld)" = dS, "Number(Shoenfeld)" = nS, "Survival trt(S1)" = S1, "Survival ctl(S0)" = S0, "Noninf. margin"= Delta.S0, "Hazard trt(H1)" = H1, "Hazard ctl(H0)" = H0, "H0 w/ margin" = H0.prime, "Hazard ratio(HR)" = HR, "HR w/ margin" = HR.prime, "Follow up(y)" = t, sig.level = sig.level, power = power, alternative = alternative, note = NOTE, method = METHOD), class = "power.htest") } 追跡期間を 5 年間、試験群の生存率を 0.8、対照群の生存率を 0.65 として、非劣性マージ ンを 0.065(つまり対照群の生存率の 10%)、有意水準両側 5%、検出力 80%とすると、 Freedman の方法では各群 84 人、Shoenfeld の方法では各群 75 人必要と計算される。 > sample.size.cox.noninf(t=5, S1=0.8, S0=0.65, Delta.S0=0.065, + alternative="two.sided") Sample Size of Cox Model (noninferiority) Death (Freedman) = 23.09411 Number (Freedman) = 83.97858 Death (Shoenfeld) = 20.42905 Number(Shoenfeld) = 74.28746 Survival trt(S1) = 0.8 Survival ctl(S0) = 0.65 Noninf. margin = 0.065 Hazard trt(H1) = 0.04462871 33 Hazard ctl(H0) = 0.08615658 H0 w/ margin = 0.1072287 Hazard ratio(HR) = 0.5179954 HR w/ margin = 0.4162012 Follow up(y) = 5 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group 追跡期間 10 年間、試験群と対照群の生存率をともに 0.95 として、非劣性マージンを 0.05 (つまり対照群の生存率の約 5%) 、有意水準片側 5%、検出力 80%とすると、Freedman の方法では各群 520 人、Shoenfeld の方法では各群 478 人必要と計算される。 > sample.size.cox.noninf(t=10, S1=0.95, S0=0.95, Delta.S0=0.05, + alternative="one.sided") Sample Size of Cox Model (noninferiority) Death (Freedman) = 25.95087 Number (Freedman) = 519.0175 Death (Shoenfeld) = 23.86386 Number(Shoenfeld) = 477.2773 Survival trt(S1) = 0.95 Survival ctl(S0) = 0.95 Noninf. margin = 0.05 Hazard trt(H1) = 0.005129329 Hazard ctl(H0) = 0.005129329 H0 w/ margin = 0.01053605 Hazard ratio(HR) = 1 HR w/ margin = 0.486836 Follow up(y) = 10 sig.level = 0.05 power = 0.8 alternative = one.sided 34 NOTE: n is number in *each* group 参考文献 浜田&藤井 生存時間解析における症例数設計 第 22 回 日本 SAS ユーザー会総会およ び研究発表会 論文集 2003 年 7 月 31 日~8 月 1 日 東京 35 クロスオーバー試験 連続変数をエンドポイントにしたクロスオーバー試験のサンプルサイズ計算。個人差指数 が必要である。個人間分散と個人内分散の比であり、通常 1 より大きいはずであるが、こ の特定が難しいと思われる。先行研究でわかれば問題ないが、わからない場合は、1 で計算 すれば、控えめで無難かと思う。 delta:effect size sigma:標準偏差 theta:個人差指数 sigma.w:個人内標準偏差 rep.level:繰り返し計算を行う条件。デフォルトでは計算結果の差の割合が 10-8 未満 になるまで繰り返す。 samplesize.cross <- function(alpha, power, delta, rep.level=10^-8){ p.t.t <- power.t.test(power=power, delta=delta/sigma) np <- p.t.t$n nc <- np/(2*(1+theta**2)) nc.approx <- nc sigma.w <- sqrt(sigma**2/(1+theta**2)) nc0 <- nc nc1 <- nc+5 yy <- matrix(0,8,1) i <- 0 diff <- abs(nc1-nc0)/nc0 while (diff > rep.level){ i <- i+1 nc <- nc0 ta <- qt(p=1-alpha/2, df=2*nc-2) tb <- qt(p=power, df=2*nc-2) nc <- ((ta+tb)/(delta/sigma.w))**2 nc1 <- nc diff <- abs(nc1-nc0)/nc0 yy[i,1] <- nc1 nc.exact <- nc1 sigma, theta, 36 nc0 <- nc1 } print(c("Alpha"=alpha, "Power"=power, "Delta"=delta, "Sigma"=sigma)) print(c("n(parllel)"=np, "n(cross-over)"=nc.approx, "n(cross-over exact)"=nc.exact)) print(c(yy)) } 有意水準 5%、検出力 80%、effect size を 10、SD を 25 として、個人差指数を 1.5 とする と一群 17 例必要。ちなみに並行群間試験だと一群 100 例必要。また、個人差指数を 1.0 と すると一群 26 例必要。幾分控えめになる。 > samplesize.cross(alpha=.05, power=.8, delta=10, sigma=25, theta=1.5) Alpha Power Delta Sigma 0.05 0.80 10.00 25.00 n(parllel) n(cross-over) n(cross-over exact) 99.08057 15.24316 16.12026 [1] 16.18707 16.11550 16.12060 16.12024 16.12026 16.12026 16.12026 0.00000 > samplesize.cross(alpha=.05, power=.8, delta=10, sigma=25, theta=1) Alpha Power Delta Sigma 0.05 0.80 10.00 25.00 n(parllel) n(cross-over) n(cross-over exact) 99.08057 24.77014 25.53465 [1] 25.56813 25.53323 25.53471 25.53464 25.53465 25.53465 0.00000 0.00000 参考文献 丹後俊郎著 無作為化比較試験 クロスオーバー試験 p.182 朝倉書店 37 Matched case-control study Matched case-control study のサンプルサイズ計算。 p0:コントロールの曝露割合 rr:期待されるオッズ比 ctrl:ケース 1 に対するコントロールの人数 sample.size.matched.ccs <- function(p0, rr, sig.level=.05, power=.8, ctrl=1){ za <- qnorm(1-sig.level/2) zb <- qnorm(power) p <- rr/(1+rr) m <- (za/2 + zb*sqrt(p*(1-p)))**2/(p-1/2)**2 p1 <- p0*rr/(1+p0*(rr-1)) q0 <- 1-p0 q1 <- 1-p1 pe <- p0*q1+p1*q0 pair <- (ctrl+1)*(m/pe)/(2*ctrl) names(pair) <- rr print(pair) } コントロールの曝露割合を 0.3、期待されるオッズ比を 2、検出力 90%、ケースとコントロ ールの比を 1:1(デフォルト)とすると、ケースとコントロールそれぞれ 187 人必要と計算 される。 > sample.size.matched.ccs(p0=.3, rr=2, power=.9) 2 186.4132 ケースとコントロールの比を 1:2 とすると、必要なケースの人数が 140 人まで減少する。 この場合コントロールは 140 人×2=280 人必要になる。 > sample.size.matched.ccs(p0=.3, rr=2, power=.9, ctrl=2) 2 38 139.8099 参考文献 Schlesselman JJ, Case-Control Studies, Oxford University Press, Oxford NY, 1982 6.6 Sample size and power for pair-matched studies pp.160-162
© Copyright 2024 Paperzz