生存分析で使用するための打ち切り従属変数を開発しています。私の目標は、誰かが調査で質問に最後に答えた時間(「時間」)を見つけることです(たとえば、「q.time」が「1」としてコード化され、「q.time +1」とqがまったくない点)。以降の時間は「0」としてコード化されます。
このロジックにより、最後に回答された質問は「1」(q.time)としてコード化されます。回答されない最初の質問(q.time + 1)は、「0」としてコーディングする必要があります。また、最初の質問に答えられなかった後のすべての質問は、「NA」としてコード化する必要があります。次に、DV=NAであるすべての行をデータセットから削除します。
非常に寛大な同僚が私が次のコードを開発するのを手伝ってくれましたが、彼は今休暇中であり、もう少し愛情が必要です。コードは次のとおりです。
library(plyr) # for ddply
library(stats) # for reshape(...)
# From above
dat <- data.frame(
id=c(1, 2, 3, 4),
q.1=c(1, 1, 0, 0),
q.2=c(1, 0, 1, 0),
dv.1=c(1, 1, 1, 1),
dv.2=c(1, 1, 0, 1))
# From above
long <- reshape(dat,
direction='long',
varying=c('q.1', 'q.2', 'dv.1', 'dv.2'))
ddply(long, .(id), function(df) {
# figure out the dropoff time
answered <- subset(df, q == 1)
last.q = max(answered$time)
subs <- subset(df, time <= last.q + 1)
# set all the dv as desired
new.dv <- rep(last.q,1)
if (last.q < max(df$time)) new.dv <- c(0,last.q)
subs$dv <- new.dv
subs
})
残念ながら、これによりエラーメッセージが表示されます。
"Error in `$<-.data.frame`(`*tmp*`, "dv", value = c(0, -Inf)) :
replacement has 2 rows, data has 0"
何か案は?問題は「rep」コマンドにあるようですが、私はRの初心者です。どうもありがとうございました。
更新:以下の説明を参照してから、フォローアップの質問を参照してください
こんにちは。私は完全にあなたをフォローしました。あなたが私を助けてくれた時間を本当に感謝しています。私は自分のデータに戻り、すべての回答者の値が「1」であるダミーのQにコーディングしましたが、エラーが実際にどこにあるのかを発見しました。私の実際のデータセットには、30の質問があります(つまり、長い形式で30回)。すべてのid変数に対してFORSUREq == 1になるようにデータセットを変更した後、エラーメッセージは次のように変わりました。
"Error in `$<-.data.frame`(`*tmp*`, "newvar", value = c(0, 29)) : replacement has 2 rows, data has 31"
問題が潜水艦に割り当てられた行数にある場合、エラーの原因は...
subs <- subset(df, time <= last.q + 1)
つまり、$
time <= last.q + 1$
は、行数を値EQUALのlast.q + 1に設定していますか?
更新2:理想的には、新しい変数をどのように見せたいですか?
id time q dv
1 1 1 1
1 2 1 1
1 3 1 1
1 4 1 1
1 5 0 0
1 6 0 NA
2 1 1 1
2 2 1 1
2 3 0 0
2 4 0 NA
2 5 0 NA
2 6 0 NA
「q」は時間の経過とともに「0」または「1」の間で変化する可能性があることに注意してください(time=2でのid=1の観測を参照)が、生存分析の性質上、「dv」は変化しません。私がする必要があるのは、「q」が「1」と「0」の間で変化する最後の時間を見つけ、それに応じて打ち切られる変数を作成することです。ステップ4の後、私のデータは次のようになります。
id time q dv
1 1 1 1
1 2 1 1
1 3 1 1
1 4 1 1
2 1 1 1
2 2 1 1
2 3 0 0