以前の質問に関連して ( ggplot2 y 値で 2 つのヒストグラムを取得する方法 = 1 のカウント / 両方のカウントの合計)、data.frame を応答の入力として受け取る関数を作成しようとしました。いくつかの条件での複数の参加者の時間 (RT) と精度 (正しい) を取得し、ヒストグラムのように集計されたデータを含む「要約」data.frame を出力します。ここでの特異性は、各ビンの応答の絶対数ではなく、相対数を取得したいということです。
私が相対カウントと呼んでいるのは、ヒストグラムの各ビンの値が次のように対応することです。
relative_correct = ncorrect / sum(ncorrect+nincorrect)
relative_incorrect = nincorrect / sum(ncorrect+nincorrect)
結果は実際には密度プロットに近くなりますが、1 に等しい各曲線の合計ではなく、正しい曲線と正しくない曲線の合計である点が異なります。
サンプル データを作成するコードは次のとおりです。
# CREATE EXAMPLE DATA
subjectname <- factor(rep(c("obs1","obs2"),each=50))
Visibility <- factor(rep(rep(c("cond1","cond2"),each=25),2))
RT <- rnorm(100,300,50)
correct <- sample(c(rep(0,25),rep(1,75)),100)
my.data <- data.frame(subjectname,Visibility,RT,correct)
最初に、後で ddply で使用する関数を定義する必要があります
histRTcounts <- function(df) {out = hist(df$RT, breaks=seq(5, 800, by=10), plot=FALSE)
out = out$counts}
次に、メイン関数 (関数内での動作を妨げる 2 つの小さな問題があります。????? の行を参照してください。ただし、関数の外ではこのコードは動作します)。
relative_hist_count <- function(df, myfactors) {
require(ggplot2)
require(plyr)
require(reshape2)
# ddply it to get one column for each bin of the histogram
myhistRTcounts <- ddply(df, c(myfactors,"correct"), histRTcounts)
# transform it in long format
myhistRTcounts.long = melt(myhistRTcounts, id.vars =c(myfactors,"correct"), variable.name="bin", value.name = 'mycount')
# rename the bin names with the ms value they correspond to
levels(myhistRTcounts.long$bin) <- seq(5, 800, by=10)[-1]-5
# make them numeric and not a factor anymore
myhistRTcounts.long$bin = as.numeric(levels(myhistRTcounts.long$bin))[myhistRTcounts.long$bin]
# cast to have count_correct and count_incorrect as columns
# ??????????????????????? problem when putting that into a function
# Here I was not able to figure out how to combine myfactors to the other variables in the call
myhistRTcount.short = dcast(myhistRTcounts.long, subjectname + Visibility + bin ~ correct)
names(myhistRTcount.short)[4:5] <- c("countinc","countcor")
# compute relative counts
myhistRTcounts.rel <- ddply(myhistRTcount.short, myfactors, transform,
incorrect = countinc / sum(countinc+countcor),
correct = countcor / sum(countinc+countcor)
)
myhistRTcounts.rel = subset(myhistRTcounts.rel,select=c(-countinc,-countcor))
myhistRTcounts.rel.long = melt(myhistRTcounts.rel, id.vars = c(myfactors,"bin"), variable.name = 'correct', value.name = 'mycount')
# ??????????????????????? idem here, problem when putting that into a function to call myfactors
ggplot(data=myhistRTcounts.rel.long, aes(x=bin, y=mycount, color=factor(correct))) + geom_line() + facet_grid(Visibility ~ subjectname) + xlim(0, 600) + theme_bw()
return(myhistRTcounts.rel.long)
それをデータに適用するための呼び出し
new.df = relative_hist_count(my.data, myfactors = c("subjectname","Visibility"))
まず、dcast() と ggplot() で myfactors 変数を使用できる関数として機能させるために、あなたの助けが必要です。
しかし、もっと重要なことは、この関数をもっとエレガントに、そして最も簡単な方法で、より少ないステップで書くことができるとほぼ確信しているということです。
よろしくお願いします。