Почему я не могу применить интегрированную функцию оценки, обратную к меткам времени, заканчивающимся прямо во время испытания в неоднородном пуассоновском процессе в 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 не работает Пожалуйста помоги.

Если мне не хватает некоторых деталей, пожалуйста, дайте мне знать. Если мой вопрос нарушает некоторые правила, пожалуйста, оставьте комментарий, я позабочусь об этом.

0 ответов

Другие вопросы по тегам