列から情報を差し引く必要があるデータセットに取り組んでいます。これは、1 人が最大 6 回、最小 2 回までテストされる反復測定データセットです。データは長い形式です
サンプルのデータセットは次のとおりです。
ID=c('X1', 'X1', 'X1', 'X1', 'X2', 'X2', 'X2', 'X3', 'X3', 'X3', 'X3')
Time=c(1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4)
Score=c(10, 9, 8, 6, 10, 8, 4, 9, 8, 6, 4)
dat=data.frame(ID, Time, Score)
最も単純な形式では、私のデータには次の変数が含まれています。
Participant ID
- 一意の英数字コードTime
- 1 ~ 6 の範囲Score
- テスト 1 のスコアは 1 ~ 10 です。スコアは同じままであるか、テストを繰り返しても低下する可能性があります。
テスト セッションでの連続したスコアの差を計算し、それらを合計して、各参加者が持っているスコアの数で割りたいと思います。より単純な形式では、次のようになります。
Sum of [(time1-time2 score) + (time2-time3 score) + (time3-time4 score)]/N (Scores for participant)
分母は、参加者ごとに異なる数の繰り返し測定を考慮する必要があります。
以前、私のコードはこれでした:
S = length(unique(dat$ID))
dat$ppt = as.numeric(factor(dat$ID, labels = 1:S))
mat = matrix(nrow = S, ncol = 2) # empty matrix
for (s in 1:S) { # for each subject
scores = dat[dat$ID == s, 'Score'] # get scores for participant s
scores = na.omit(scores)
avCumDiff = sum(diff(scores))/length(scores) # average cumulative difference
mat[s,] = c(s, avCumDiff) # add to matrix
}
colnames(mat) <- c('ppt', 'AvDiff')
このコードの問題は、スコアを相互に累積的に減算することです。スコア1と2、2と3、3と4などの違いを追加したい.
これをどのように行うのが最善ですか?