如果我在 R 中的整个持续时间内有一系列尖峰时间,我如何获得非均匀尖峰的光栅图?
How do I get a raster plot of nonhomogeneous spikes if I have a sequence of spike times over the total duration, in R?
我(相对)是 R 的新手,所以这个问题可能有一个简单的答案。我一直在尝试在 R 中绘制非齐次泊松过程。通过下面的代码,对于一次 10 秒的试验,我有一个序列 nhpp1
,其中包含在此特定试验中出现尖峰的时间戳。我如何获取这个序列 nhpp1
并得到它的光栅图。更重要的是,我想重复(复制?)这整个过程 10 次试验并得到一个看起来像这样的光栅图:(请看下面的代码)
nhpp <- function(lambda){
set.seed(1)
t_max = 10
t = 0
s = 0
Lambda <- function(tupper) integrate(f=lambda, lower =0, upper=
tupper)$value
LambdaInv <- function(s) {
v <- seq(0, t_max+1, length=1000)
min(v[which(Vectorize(Lambda)(v) >= s)])
}
X = numeric(0)
while(t <= t_max){
u <- runif(1)
s <- s-log(u)
t <- LambdaInv(s)
X <- c(X,t)
}
return(X)
}
lambda <- function(t) 100*(sin(pi*t)+1)
nhpp1 <- nhpp(lambda)
我已经有了尖峰时间戳,我需要帮助找到一种方法来绘制这个试验(在时间轴上出现尖峰的地方出现小条)以及如何将这个过程复制 10 次试验,那么?任何帮助将不胜感激。
我使用另一个基于泊松模型的脉冲序列生成器。
arrival_time_v3 <- function(firing_rate,tMax,sampling_rate){
lambda <- firing_rate/sampling_rate
## find the number 'n' of exponential r.vs required by imposing that
## Pr{N(t) <= n} <= 1 - eps for a small 'eps'
n <- qpois(1 - 1e-8, lambda = lambda * tMax)
## simulate exponential interarrivals the
X <- rexp(n = 2*n, rate = lambda)
S <- c(0, cumsum(X))
arr_time <- S[which(S <= tMax)]
arr_time <- as.integer(arr_time)
arr_time <- arr_time[which(arr_time!=0)]
arr_time <- unique(arr_time)
return(arr_time)
}
num_of_spike_trains <- 10
firing_rate_arr <- matrix(c(10,20,30,40,50,60,70,80,90,100),1,num_of_spike_trains)
sampling_rate <- 10000
durartion_sample <- sampling_rate*10 ##10 sec
spike_arrival_time_mat_list <- list()
for(i in seq(1,num_of_spike_trains,1)){
spike_arrival_time_mat_list[[i]] <- t(as.matrix(arrival_time_v3(firing_rate_arr[i],durartion_sample,sampling_rate)))
}
生成 10 个脉冲序列(事件序列)后,我们可以利用 R 中的 barcode
包:
#install.packages("barcode")
library(barcode)
barcode(spike_ariv_time_mat_list,xlab="Time",main="Spike Trains")
我(相对)是 R 的新手,所以这个问题可能有一个简单的答案。我一直在尝试在 R 中绘制非齐次泊松过程。通过下面的代码,对于一次 10 秒的试验,我有一个序列 nhpp1
,其中包含在此特定试验中出现尖峰的时间戳。我如何获取这个序列 nhpp1
并得到它的光栅图。更重要的是,我想重复(复制?)这整个过程 10 次试验并得到一个看起来像这样的光栅图:(请看下面的代码)
nhpp <- function(lambda){
set.seed(1)
t_max = 10
t = 0
s = 0
Lambda <- function(tupper) integrate(f=lambda, lower =0, upper=
tupper)$value
LambdaInv <- function(s) {
v <- seq(0, t_max+1, length=1000)
min(v[which(Vectorize(Lambda)(v) >= s)])
}
X = numeric(0)
while(t <= t_max){
u <- runif(1)
s <- s-log(u)
t <- LambdaInv(s)
X <- c(X,t)
}
return(X)
}
lambda <- function(t) 100*(sin(pi*t)+1)
nhpp1 <- nhpp(lambda)
我已经有了尖峰时间戳,我需要帮助找到一种方法来绘制这个试验(在时间轴上出现尖峰的地方出现小条)以及如何将这个过程复制 10 次试验,那么?任何帮助将不胜感激。
我使用另一个基于泊松模型的脉冲序列生成器。
arrival_time_v3 <- function(firing_rate,tMax,sampling_rate){
lambda <- firing_rate/sampling_rate
## find the number 'n' of exponential r.vs required by imposing that
## Pr{N(t) <= n} <= 1 - eps for a small 'eps'
n <- qpois(1 - 1e-8, lambda = lambda * tMax)
## simulate exponential interarrivals the
X <- rexp(n = 2*n, rate = lambda)
S <- c(0, cumsum(X))
arr_time <- S[which(S <= tMax)]
arr_time <- as.integer(arr_time)
arr_time <- arr_time[which(arr_time!=0)]
arr_time <- unique(arr_time)
return(arr_time)
}
num_of_spike_trains <- 10
firing_rate_arr <- matrix(c(10,20,30,40,50,60,70,80,90,100),1,num_of_spike_trains)
sampling_rate <- 10000
durartion_sample <- sampling_rate*10 ##10 sec
spike_arrival_time_mat_list <- list()
for(i in seq(1,num_of_spike_trains,1)){
spike_arrival_time_mat_list[[i]] <- t(as.matrix(arrival_time_v3(firing_rate_arr[i],durartion_sample,sampling_rate)))
}
生成 10 个脉冲序列(事件序列)后,我们可以利用 R 中的 barcode
包:
#install.packages("barcode")
library(barcode)
barcode(spike_ariv_time_mat_list,xlab="Time",main="Spike Trains")