対象のコホートに手術時に測定された単一の連続変数があり、その後2年後に機能的転帰または障害転帰として分類される研究に必要なサンプルサイズをどのように計算しますか。
その測定が悪い結果を予測できたかどうかを確認したいと思います。ある時点で、連続変数のカットポイントを導出したい場合があります。これを超えると、結果が損なわれる可能性を減らすために介入しようとします。
何か案は?Rの実装。
対象のコホートに手術時に測定された単一の連続変数があり、その後2年後に機能的転帰または障害転帰として分類される研究に必要なサンプルサイズをどのように計算しますか。
その測定が悪い結果を予測できたかどうかを確認したいと思います。ある時点で、連続変数のカットポイントを導出したい場合があります。これを超えると、結果が損なわれる可能性を減らすために介入しようとします。
何か案は?Rの実装。
回答:
ロジスティック回帰のサンプルサイズの計算は複雑です。ここではまとめません。この問題に対する合理的にアクセス可能なソリューションは、次の場所にあります。
Hsieh FY。ロジスティック回帰のサンプルサイズテーブル。医学の統計。1989 7月; 8(7):795-802。
Hsieh FY、他 線形およびロジスティック回帰のサンプルサイズ計算の簡単な方法。医学の統計。1998年7月30日; 17(14):1623-34。
Hosmer&LemeshowのApplied Logistic Regressionの最後の章(セクション8.5 pp 339-347)で、計算例を使用した問題に関するアクセス可能な議論を見つけることができます。
通常、シミュレーションを実行する方が簡単で高速です。論文は、読み、理解し、最終的に興味のある特殊なケースには適用されないという結論に至るまでに長い時間がかかります。
したがって、私はいくつかの主題を選択し、関心のある共変量をシミュレートし(予想どおりに分布)、仮定した関数形に基づいて良い/悪い結果をシミュレートします(共変量のしきい値効果?非線形性?)検出したい最小の(臨床的に)有意な効果サイズを使用して、分析を通じて結果を実行し、効果がアルファで見つかるかどうかを確認します。これを10,000回再実行し、80%のシミュレーション(または他の必要なパワー)で効果を見つけたかどうかを確認します。被験者の数を調整し、満足する力が得られるまで繰り返します。
これには非常に一般的であるという利点があるため、特定の関数形式や特定の数または共変量の分布に制限されません。ドロップアウトを含めることができます。ランダムに、または共変量や結果に影響されて、上のchlのコメントを参照してください。基本的には、最終サンプルで行う分析を事前にコーディングします。これは、研究デザインに私の考えを集中させるのに役立つ場合があります。そして、それは簡単にRで行われます(ベクトル化!)。
Stephan Kolassaの投稿(コメントとして追加することはできません)に続き、シミュレーション用の代替コードをいくつか用意しました。これは同じ基本構造を使用していますが、少し分解されているため、おそらく少し読みやすくなっています。また、KleinmanとHortonによるロジスティック回帰をシミュレートするコードに基づいています。
nnはサンプルの数値です。共変量は継続的に正規分布し、0とsd 1を意味するように標準化する必要があります。これを生成するためにrnorm(nn)を使用します。オッズ比を選択し、それをodds.ratioに保存します。切片の数も選択します。この数の選択は、サンプルのどの部分が「イベント」を経験するかを決定します(例:0.1、0.4、0.5)。適切な比率になるまで、この数値をいじる必要があります。次のコードでは、サンプルサイズが950、ORが1.5で比率が0.1になります。
nn <- 950
runs <- 10000
intercept <- log(9)
odds.ratio <- 1.5
beta <- log(odds.ratio)
proportion <- replicate(
n = runs,
expr = {
xtest <- rnorm(nn)
linpred <- intercept + (xtest * beta)
prob <- exp(linpred)/(1 + exp(linpred))
runis <- runif(length(xtest),0,1)
ytest <- ifelse(runis < prob,1,0)
prop <- length(which(ytest <= 0.5))/length(ytest)
}
)
summary(proportion)
summary(割合)は割合が0.1であることを確認します
次に、同じ変数を使用して、10000回の実行でパワーが計算されます。
result <- replicate(
n = runs,
expr = {
xtest <- rnorm(nn)
linpred <- intercept + (xtest * beta)
prob <- exp(linpred)/(1 + exp(linpred))
runis <- runif(length(xtest),0,1)
ytest <- ifelse(runis < prob,1,0)
summary(model <- glm(ytest ~ xtest, family = "binomial"))$coefficients[2,4] < .05
}
)
print(sum(result)/runs)
このコードは正しいと思います-1998年にHsiehで提供された例(表2)と照合しましたが、そこに示されている3つの例と一致しているようです。私はまた、HosmerとLemeshowのp 342-343の例に対して、0.75の検出力(HosmerとLemeshowでの0.8と比較)に対してテストしました。したがって、状況によっては、このアプローチは力を過小評価している可能性があります。ただし、このオンライン計算機で同じ例を実行したところ、HosmerとLemeshowの結果ではなく、私と同じであることがわかりました。
これが事実である理由を誰かが教えてくれるなら、私は知りたいです。
実際、あなたの研究は逐次的に行われるように思えます。その場合、それを実験の明示的な部分にすることはお金になるかもしれません。多くの場合、順次サンプリングは、固定サンプルサイズの実験よりも効率的です[平均で必要な観測が少ない]。
farrel:コメントに返信してこれを追加します。
サンプルサイズを取得するには、通常、ある種の精度基準(CIの長さなど)またはデータに対して実行されるテストの指定された代替手段での検出力を指定します。あなたはこれらの基準の両方に言及したようです。原則として、何も問題はありません。2つのサンプルサイズ計算を実行するだけです。1つは目的の推定精度を達成するためであり、もう1つは上記の代替方法で目的の検出力を得るためです。次に、2つのサンプルサイズのうち大きい方が必要です。[ところで、80%の出力と言う以外に、実行する予定のテスト、または80%の出力が必要な代替案について言及していないようです。]
逐次分析を使用する場合:被験者が同時に研究に登録されている場合、サンプルサイズを固定することは理にかなっています。ただし、対象者が少ない場合は、必要な人数が登録されるまでに1〜2年かかる場合があります。したがって、裁判は3年または4年(またはそれ以上)続く可能性があります。その場合、順次スキームはそれよりも早く停止する可能性を提供します-探している効果が試験の早い段階で統計的に有意になる場合。