コンテキスト:私は、自然史制御を伴う臨床試験のデータを分析する方法を理解することに興味があります。つまり、あるグループの人々(たとえば、疾患の遺伝的リスクがある人々)が採用され、すべてが扱われる臨床試験です薬物、およびそれらの生存率(たとえば、発症時の年齢、またはこの疾患による死亡)が、同じ遺伝的リスクを持つ未治療の歴史的対照の生存率と比較されます。
始める前に、このトピックに触れたFDAガイダンスドキュメント(例:希少疾患:医薬品開発における一般的な問題)を読んだことを認めたいと思います。自然に忍び込むことができる多くの種類のバイアスがあることをよく認識しています歴史の比較と、この理由から、FDAはそのような試験を薬の有効性の証拠として受け入れることはほとんどなく、通常は無作為化試験をはるかに強力な証拠と見なしています。自然史コホートを薬物で治療される将来のコホートと公平に比較できるかどうかをどのように決定するかという問題は、重要で複雑な問題です。しかし、それは今日の私の質問のトピックではありません。その代わり、私は、まだはるかに簡単な質問に困惑の問題だということを発見しています場合に自然史のコホートは比較可能で偏りがないと見なされます。統計的に言えば、比較はどのように行われますか?
これがシナリオです。
- 簡単にするために、私の病気には単一の既知の遺伝的原因があり、この遺伝子型の人はある程度の年齢まで完全に健康であり、その後突然病気になったとします。発症年齢は非常に変動しやすく、危険は年齢の関数として変化します。以下に説明するすべてのデータセットの誰もが、この病気を引き起こす遺伝子型を持っています。
- データセットAには、架空の臨床試験に参加している人々に関するデータがあります。彼らは1歳で登録し(
starting_age
)、薬剤で治療され、2番目の年齢(last_age
)で病気になる(event == 1
)か、または試験から離脱する()まで、さまざまな期間が経過したevent == 0
。 - 「理想的な理想」のシナリオでは、おそらく自然史コホートは、この遺伝子型を持つ多数の人々であり、出生からこの疾患または無関係の原因で死亡するまで続きます。そのようなデータセットは存在しません。代わりに、自然史コホートが何であるかについて2つの可能なオプションを検討してください(BおよびC)...
- データセットBには、いくつかのランダムな年齢(
starting_age
)で前向き研究に登録し、薬物治療を受けておらず、2番目の年齢(last_age
)になるまで、さまざまな期間、単純に追跡された人々に関するデータがあります。病気(event == 1
)または研究を中止(event == 0
)。開始年齢の分布とフォローアップの年数は、データセットAと同じ分布に従うとは想定できません。 - データセットCには、純粋に遡及的なデータがあります。ここでは将来のフォローアップはありませんでした。私たちは一人一人を単純に観察しました。一部の人々は、いくつかの特定の年齢で病気になることを観察した(して
age
、そしてevent == 1
他の人がまだいくつかの特定の年齢で健康であることを見て(している間)age
、およびevent == 0
)。
用語を正しく理解していれば、AとBのデータは左打ち切りと右打ち切りと見なされます。Cのデータは、右打ち切りのみと見なされます。Cain 2011で使用されている用語によると、データセットBは「流行しているコホート」であり、データセットCは「インシデントコホート」であると思います。
私の質問は:
- データが各個人の異なる年齢で左端が切り捨てられている場合、データセットAまたはBの生存関数(またはハザード関数など)を構築するにはどうすればよいでしょうか。
- データセットAの人がBまたはCの人よりも有意に長く生存するか、ハザードが著しく低いかをテストするためにどの統計テスト(またはブートストラップ法)が使用されますか?
- データセットBまたはC しかなく、特定のハザード比に対してN人の個人を対象とした特定の臨床試験の統計的検出力を推定したい場合、どうすればよいでしょうか?
- (ボーナス質問)人々が、たとえば、年齢の関数としてさまざまなハザードに関連するさまざまな遺伝的変異も持っている場合、その変数を上記の回答にどのように組み込みますか?
これまでに試したいくつかのこと:
- 私はフローラのZ統計[ フローラ1978 ] を検討しましたが、いくつかは同様の状況で適用されましたが、参照として使用されている自然史コホートのサンプリングの差異を考慮していないのではないかと心配しています。
- 左打ち切り時間の異なる生存分析などの用語のいくつかの異なる組み合わせをグーグル検索し、生存分析:左打ち切りデータ、PROC PHREGを使用した左打ち切りの存続など、同様の問題について説明しているページをいくつか見つけましたが、これらは根本的な原因を説明していません彼らのソリューションの数学。
- 私はついにCain 2011に出会いました。この記事では、問題を詳細に説明しており、補足として、左切り捨てを処理するためのRコードがあります。左打ち切りを組み込んだMLEに独自の関数を実装しましたが、R
survival
ライブラリに組み込まれた機能を使用して、左打ち切りはCox比例ハザードモデルですでに処理できると主張していますcoxph(Surv(time=agestart,time2=x,event=cx,type='counting')~bmi)
。ここで、Surv
オブジェクトはtime
、開始年齢time2
として、event
または発生したか発生しなかった年齢として使用して作成されます。これは賢明に聞こえるSurv
かもしれませんが、のヘルプファイルでは、ここで実際に何が行われているのかは説明されていませんcounting
。私はsurvival
マニュアルを見ましたそして、の参照としてcounting
、Andersen&Gill 1982を指摘しました。これは私の頭の上に少しあり、左の切り捨てについて、または少なくともその名前では議論していないようです。特徴の1つは、「カウント」モデルが、個人が生涯に複数のイベントを保持できるケースに適合するように構築されているように見えることです。私の例ではそうではありませんが、おそらくそれは問題ではありません。 - 上記に基づいて、Coxの「カウント」モデルはデータセットAとBを比較する正しい方法であると思われ、Rでそのような比較を行うことができました(以下のコードを参照)。私はここで正しいことをしていますが、そのようなアプローチがデータセットAとCを比較するためにどのように(もしあれば)適用できるかわかりません。
- 最後に、私は、検索クロス検証済みのため切り捨てを左に生存し、人々は私が(求めているのと同様の質問をしていた事例が多数見つかった1、2、3、4、4、5、6、7)が、ほとんど未回答だったが、1つは上記のカインリファレンスを指し、もう1つはクライン&モエシュバーガー2003を指しました これは役に立ちました(egp 123とp。312を参照)。AとBはかなり単純なCoxアプローチを使用して比較できるという概念をサポートしているようですが、AとCの比較可能性や電力計算の質問には対応していません。 (ただし、統計的検定の質問に答えた場合、ブートストラップを行うことでおそらく能力を引き出すことができます)。
以下は、このシナリオを示すRの架空のデータです。各データセットに20行を含めましたが、重要なのは、私が想像している実際のシナリオでは、データセットAとBはおそらく50または100の患者のオーダーであり、データセットCは500または1,000人の患者。
# A) hypothetical data from clinical trial
data_a = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
1|33|42|0
2|45|49|0
3|47|52|1
4|30|34|0
5|37|44|0
6|34|37|0
7|29|34|0
8|58|66|0
9|58|60|0
10|66|75|0
11|37|41|0
12|37|46|0
13|58|62|0
14|44|48|1
15|45|50|0
16|56|65|0
17|54|63|0
18|36|41|0
19|47|55|1
20|45|55|0
"))
# B) hypothetical data from a prospective natural history study
data_b = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
101|19|28|0
102|39|52|0
103|38|41|1
104|18|27|0
105|20|24|0
106|16|20|0
107|39|41|0
108|48|50|0
109|40|50|0
110|38|41|1
111|40|43|1
112|26|29|0
113|37|39|0
114|21|30|0
115|36|41|1
116|46|48|0
117|27|32|0
118|26|29|0
119|29|38|0
120|47|58|0
"))
# C) hypothetical data from a retrospective natural history study
data_c = read.table(sep='|',header=T,textConnection("
indiv_id|age|event
201|43|1
202|53|1
203|64|1
204|45|1
205|88|1
206|70|1
207|66|1
208|55|1
209|51|1
210|48|1
211|63|1
212|36|0
213|61|0
214|63|1
215|63|1
216|57|1
217|74|0
218|63|1
219|59|1
220|57|1
"))
# one possible approach to compare A and B using Cox counting model
data_a$drug = TRUE
data_b$drug = FALSE
nh_compare = rbind(data_a, data_b)
m = survfit(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
summary(m)
coxph(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
最後の注意:Cross Validatedに2つを超えるリンクを投稿するには10の評判が必要なため、上に表示されるはずの(多くの)ハイパーリンクをすべて削除しました。リンク付きのこの投稿のバージョンは私のブログで入手できます。許可された場合、または許可された場合は、リンクを含めるようにこの投稿を更新します。 更新:賛成票を投じたすべての人に感謝!私の評判は> 10で、リンクを含めるようにこの投稿を更新しました。