「a」と「b」という 2 つの条件があるとします。ニューロンは、条件「a」では平均 40 スパイク/秒 (Hz)、条件「b」では 80 スパイク/秒で発火します。条件「a」への応答は 20 回表示され、条件「b」は 10 回表示され、各表示は 1000 ミリ秒です。
AB <- rbind(
ldply( 1:20,
function(trial) {
data.frame(
trial=trial,
cond=factor('a',c('a','b')),
spiketime = runif(40,0,1000))
}
), ldply(21:30,
function(trial) {
data.frame(
trial=trial,
cond=factor('b',c('a','b')),
spiketime = runif(80,0,1000))
}
)
)
単純なヒストグラムは、次のようにプロットできます。
qplot(spiketime, data=AB, geom='line',stat='bin',y=..count..,
xlim=c(0,1000), colour=cond, binwidth=100,xlab='Milliseconds')
ただし、これはプレゼンテーション全体の平均ではないため、y 軸の値はほぼ同じです。y 軸に沿ってスパイク率 (スパイク/秒) をプロットしたいと思います。これは、条件「b」が 1 秒あたり約 2 倍のスパイクを誘発することを示しています。プレゼンテーションの数が増えてもスパイク率は増加せず、ノイズが少なくなるだけです。データフレーム AB を前処理せずにこれを行う方法はありますか?
言い換えれば、次の行に沿って何かを行うことができますか?
qplot(spiketime, data=AB, geom='line',stat='bin',
y=..count../num_presentations*1000/binwidth, ylab='Spikes per second',
xlim=c(0,1000), colour=cond, binwidth=100,xlab='Milliseconds')
ここで、num_presentations は、条件「a」の場合は 20、条件「b」の場合は 10 であり、1000/binwidth は、単位を正しく取得するための定数にすぎませんか?