We simulate the evolution of a binary trait through time

The simulation function

simulate <- function (T, p, lambda) {
  N = 0
  t = 0.0
  state = rbinom(1,1,p)
  states = c(state)
  waitingTimes = c()
  while (t < T) {
    X = rexp(n=1, lambda)
    t = t+X
    if (t < T) {
      N=N+1
      if (state == 0) {
        state = 1
      }
      else {
        state = 0
      }
      states=c(states, state)
      waitingTimes = c(waitingTimes, X)
    }
  }
  return (list(N, states, waitingTimes))
}

We simulate:

Initial values

T = 1.0
p = 0.3
lambda = 10

The actual simulation

elements = simulate(T, p, lambda)
print("Number of substitutions: ")
[1] "Number of substitutions: "
print(elements[[1]])
[1] 12
print("History of the states: ")
[1] "History of the states: "
print(elements[[2]])
 [1] 0 1 0 1 0 1 0 1 0 1 0 1 0
print("Waiting times between substitutions:")
[1] "Waiting times between substitutions:"
print(elements[[3]])
 [1] 0.06138306 0.05248648 0.03947663 0.04999134 0.01849040 0.06142619 0.22715882 0.08331782 0.10947962 0.04423772
[11] 0.03183283 0.03069679
print("Sum of the waiting times:")
[1] "Sum of the waiting times:"
print(sum(elements[[3]]))
[1] 0.8099777
LS0tCnRpdGxlOiAiRXZvbHV0aW9uIG9mIGEgYmluYXJ5IHRyYWl0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyBXZSBzaW11bGF0ZSB0aGUgZXZvbHV0aW9uIG9mIGEgYmluYXJ5IHRyYWl0IHRocm91Z2ggdGltZQoKCiMjIFRoZSBzaW11bGF0aW9uIGZ1bmN0aW9uCgpgYGB7cn0Kc2ltdWxhdGUgPC0gZnVuY3Rpb24gKFQsIHAsIGxhbWJkYSkgewogIE4gPSAwCiAgdCA9IDAuMAogIHN0YXRlID0gcmJpbm9tKDEsMSxwKQogIHN0YXRlcyA9IGMoc3RhdGUpCiAgd2FpdGluZ1RpbWVzID0gYygpCiAgd2hpbGUgKHQgPCBUKSB7CiAgICBYID0gcmV4cChuPTEsIGxhbWJkYSkKICAgIHQgPSB0K1gKICAgIGlmICh0IDwgVCkgewogICAgICBOPU4rMQogICAgICBpZiAoc3RhdGUgPT0gMCkgewogICAgICAgIHN0YXRlID0gMQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHN0YXRlID0gMAogICAgICB9CiAgICAgIHN0YXRlcz1jKHN0YXRlcywgc3RhdGUpCiAgICAgIHdhaXRpbmdUaW1lcyA9IGMod2FpdGluZ1RpbWVzLCBYKQogICAgfQogIH0KICByZXR1cm4gKGxpc3QoTiwgc3RhdGVzLCB3YWl0aW5nVGltZXMpKQp9CmBgYAoKIyMgV2Ugc2ltdWxhdGU6CgoKIyMjIEluaXRpYWwgdmFsdWVzCmBgYHtyfQpUID0gMS4wCnAgPSAwLjMKbGFtYmRhID0gMTAKCmBgYAoKIyMjIFRoZSBhY3R1YWwgc2ltdWxhdGlvbgoKYGBge3J9CmVsZW1lbnRzID0gc2ltdWxhdGUoVCwgcCwgbGFtYmRhKQoKcHJpbnQoIk51bWJlciBvZiBzdWJzdGl0dXRpb25zOiAiKQpwcmludChlbGVtZW50c1tbMV1dKQpwcmludCgiSGlzdG9yeSBvZiB0aGUgc3RhdGVzOiAiKQpwcmludChlbGVtZW50c1tbMl1dKQpwcmludCgiV2FpdGluZyB0aW1lcyBiZXR3ZWVuIHN1YnN0aXR1dGlvbnM6IikKcHJpbnQoZWxlbWVudHNbWzNdXSkKcHJpbnQoIlN1bSBvZiB0aGUgd2FpdGluZyB0aW1lczoiKQpwcmludChzdW0oZWxlbWVudHNbWzNdXSkpCgpgYGAKCgo=