Рассчитать разницу в днях между событиями для 1000 столбцов - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь проверить, где мои реальные данные попадают в гипотетическое распределение вероятностей. Я создал DF из 1000 случайных переменных и перекодировал его, чтобы он соответствовал вероятности моих событий в реальном мире.

Далее я хочу вычислить «время между событиями» (IE, время между каждым 1 возникновением ), Затем сохраните среднее время между событиями для каждой случайной величины, чтобы я мог построить ее. (Конечная цель - 1 переменная из 1000 средних)

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

dat <-as.data.frame( matrix (0, nr=1303, nc = 1000))
for (i in 1:1000){x<- runif(1303)
dat[,i] <-x}
#calculating values to 0,1.
dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ))
#creating date range
start_date <- as.Date("2016/10/10")
Date<- seq(start_date, by = "day", length.out = 1303)
#add date vector to a df
dat$date <- Date

Я не уверен, как рассчитать время между событиями для всех переменных. Я сделал это для своих данных реального мира (только 21 событие за 1303 дня) в приведенном ниже коде, но я не уверен, как масштабировать его, чтобы применить ко всем 1000 случайным переменным, или как извлечь среднее среднее время между событиями "к отдельному df.

 events <- sort(sample(never1$date1, 21))
    d <- c(NA, diff(events))

Я знаю, что мое решение включает в себя расчеты с lubridate и dplyr и прокаткой. Но мой GoogleFU не слишком помогает.

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

Решено.

dat <- as.data.frame( matrix(0, nr=1303, nc = 1000) )

  #Generate random numbers
  for (i in 1:1000){
    x<- runif(1303) 
    dat[,i] <-x
  }


  #Split random numbers into zero and ones at the desired prevalence
  dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ) )

  length(dat[,1])

  plot.df <- as.data.frame(matrix(0, nr = 1000, nc = 3))
  colnames(plot.df) <- c("Mean","Sd","Median")

  #Check the run length encoding
  for (i in 1:1000){
  runs <- rle(dat[,i])
  #Check the length of runs
  runs$lengths
  #Remove the incident days and leave the length of 'no incident' runs
  noinc.days   <- runs$lengths[which(runs$lengths > 1)]
  plot.df[i,1] <- mean(noinc.days)
  plot.df[i,2] <- sd(noinc.days)
  plot.df[i,3] <- median(noinc.days)

За которыми следуют соответствующие GGplots.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...