Почему я не могу применить интегрированную функцию оценки, обратную к меткам времени, заканчивающимся прямо во время испытания в неоднородном пуассоновском процессе в R?
Я довольно новый в R. Учусь, как я работаю. Мой вопрос касается неоднородных реализаций Пуассоновского процесса. Я использую скорострельность, зависящую от времени 100*(sin(pi*t)+1)
где t
он соответствует времени. Я использую метод пересчета времени, в котором я сначала моделирую метки времени всплеска для однородного процесса, а затем использую обратную интегральную функцию скорости, чтобы отобразить метки времени однородного всплеска в неоднородные экземпляры времени всплеска.
Часть моего кода сравнивается и корректируется через Интернет, например, когда я создал последовательность v
Я хотел, чтобы это было из 0
в tmax
с длиной 1000
так что количество бинов на временной шкале 1000
, Однако в следующем коде, если я использую код v <- seq(0, t_max, length=1000)
затем я получаю массив ошибок, первая из которых
Предупреждающее сообщение: в мин. (V [which(Vectorize(Lambda)(v) >= s)]): без пропущенных аргументов для min; возвращая инф
Ошибка в seq.default(0, max(nhpp1) + 1, by = 0.1): 'to' должно быть конечным числом
Ошибка в seq.default(0, max(nhpp1), при = 0,02): 'to' должно быть конечным числом
и последний,
Предупреждающее сообщение: In sin (pi * t): произведено NaNs
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)
hist(nhpp1,breaks=seq(0,max(nhpp1)+1,by=.1),col="yellow")
u=seq(0,max(nhpp1),by=.02)
lines(nhpp1,lambda(nhpp1)/10,lwd=2,col="red")
Если я изменю свою функцию оценки на более простую, скажем, 1+(t^2)
он возвращает все те же ошибки, только не последнее предупреждение. Так что я немного погуглил, и все ошибки исчезают, как только я меняю v
последовательность, чтобы охватить от 0
в t_max+1
, это сработало, даже если я поставил t_max+2
или же +3
или же +6
, Я не понимаю значение этого. Или зачем это нужно? или почему просто t_max
не работает Пожалуйста помоги.
Если мне не хватает некоторых деталей, пожалуйста, дайте мне знать. Если мой вопрос нарушает некоторые правила, пожалуйста, оставьте комментарий, я позабочусь об этом.