【发布时间】:2011-10-27 14:11:53
【问题描述】:
假设我有两个条件,“a”和“b”。一个神经元在“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”每秒引发大约两倍的尖峰。尖峰率不会随着演示数量的增加而增加,它只是变得不那么嘈杂。有没有办法在不预处理数据框 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 将只是一个常数以使单位正确?
【问题讨论】:
标签: r ggplot2 neuroscience