1

コンテキスト:私が見る限り、R には、生存/イベント履歴分析のコンテキストでのデータ準備を容易にする一貫した機能がありません。

各個人 ( ) には、各エピソードidの開始start.cp時間 ( ) と終了時間 ( ) が示されています。stop.cpさらに、1、2、...、ptvc.start_の時変共変量 (TVC) のそれぞれについて、エピソードの開始時 ( ) と終了時( )がわかりtvc.stop_ます。

私の例 (以下を参照) では、TVC の数は 2 ですが、通常、数はさまざまです (1 から p まで)。

例:

入力データ:

  id start.cp stop.cp tvc.start1 tvc.start2 tvc.stop1 tvc.stop2
1  1        1       2          2          3         4         7
2  1        2       3          2          3         4         7
3  1        3       4          2          3         4         7
4  1        4       7          2          3         4         7
5  1        7      12          2          3         4         7

structure(list(id = c(1, 1, 1, 1, 1), start.cp = c(1, 2, 3, 4, 
7), stop.cp = c(2, 3, 4, 7, 12), tvc.start1 = c(2, 2, 2, 2, 2
), tvc.start2 = c(3, 3, 3, 3, 3), tvc.stop1 = c(4, 4, 4, 4, 4
), tvc.stop2 = c(7, 7, 7, 7, 7)), .Names = c("id", "start.cp", 
"stop.cp", "tvc.start1", "tvc.start2", "tvc.stop1", "tvc.stop2"), 
row.names = c(NA, 5L), class = "data.frame")

TVC の名前はわかっています。つまり、この例では、次のことがわかっています。

tvc.start <- c("tvc.start1", "tvc.start2") 
tvc.stop <- c("tvc.stop1", "tvc.stop2")

予想された結果:

  id start.cp stop.cp tvc.start1 tvc.start2 tvc.stop1 tvc.stop2 tvc.d1 tvc.d2
1  1        1       2          2          3         4         7      0      0
2  1        2       3          2          3         4         7      1      0
3  1        3       4          2          3         4         7      1      0
4  1        4       7          2          3         4         7      0      1
5  1        7      12          2          3         4         7      0      1

structure(list(id = c(1, 1, 1, 1, 1), start.cp = c(1, 2, 3, 4, 
7), stop.cp = c(2, 3, 4, 7, 12), tvc.start1 = c(2, 2, 2, 2, 2
), tvc.start2 = c(3, 3, 3, 3, 3), tvc.stop1 = c(4, 4, 4, 4, 4
), tvc.stop2 = c(7, 7, 7, 7, 7), tvc.d1 = c(0, 1, 1, 0, 0), tvc.d2 = c(0, 
0, 0, 1, 1)), .Names = c("id", "start.cp", "stop.cp", "tvc.start1", 
"tvc.start2", "tvc.stop1", "tvc.stop2", "tvc.d1", "tvc.d2"), row.names = c(NA, 
5L), class = "data.frame")

質問: TVC ごとに、特定のエピソード (と で定義) が TVC の間隔にオーバーラップ (=1) していることを示す新しいベクトル ( tvc.d1、 、例を参照)を作成したいと考えています。[ start.cp , stop.cp) . TVC のセットをループせずにこれを行うにはどうすればよいでしょうか。つまり、ベクトル化されたソリューションを探しています。tvc.d2start.cpstop.cp

PS:タイトルは自由に変更してください...

4

1 に答える 1

1

Terry Therneau はあなたの主張に異議を唱えたいと思うかもしれません。tcut関数とpyears推奨されるサバイバル パッケージの は、時間依存共変量の処理に関する Cindy Crowson との彼の技術記事の早い段階で説明されています。tcv.d1 の停止時間が 2 であるのに、なぜ tcv.d1 が 2 -> 3 の間隔で露出に寄与する必要があるのか​​理解できませんでした。しかし、後の読者のための説明は、質問へのコメントにあります。

実際には、入力データとして start.cp stop.cp ベクトルと最初の行だけが必要です。間隔を定義するベクトルを、各コンポーネント/個々の開始および終了ベクトルのベクトルと比較し、== '1' の間隔を見つけます。データが実際にこのように来ないかどうか、セットアップで開始時間と停止時間を複製する必要がないかどうか、私は疑問に思っています。

tvec <- with(dat, c(start.cp[1], stop.cp))
dat$tvc.d1 <- 1*( findInterval(tvec,      # the "1*" converts to numeric
                               as.numeric( dat[ 1, c("tvc.start1", "tvc.stop1")]) ,  
                               all.inside=FALSE)[1:5] == 1)
dat$tvc.d2 <- 1*( findInterval(tvec, 
                               as.numeric( dat[ 1, c("tvc.start2", "tvc.stop2")]) ,  
                               all.inside=FALSE)[1:5] == 1)
于 2011-11-14T15:23:09.013 に答える