You’re right — your travel time is not exactly normal. But you can’t model it with a Poisson distribution either.

By the way, this is your example:

 

Let’s define a generic function to calculate total delay time due to some reason, with the following parameters:

delay <- function(n, p, mean, sd) sum(
    rtruncnorm(n, 0, Inf, mean, sd)[
        sample(
            c(FALSE, TRUE),
            size = n,
            replace = TRUE,
            prob = c(1 - p, p)
        )
    ]
)

 

A simple model of your travel time — sum of three components:

n <- 1100
plot_ly(
    data.frame(
        model = c(
            rep("example", 220),
            rep("model", n)
        ),
        t = c(
            rep(45, 90), rep(40, 40), rep(50, 40), rep(55, 30), rep(60, 15), rep(90, 5),
            rnorm(n, 40, 1)
                + replicate(n, delay(10, .2, 5, 1))
                + replicate(n, delay(10, .01, 30, 5))
        )
    ),
    alpha = 0.5,
    colors = "Set1",
    width = 900
) %>% 
add_histogram(
    color = ~model,
    x = ~t,
    xbins = list(
        size = 1,
        start = .5, end = 120
    )
) %>% layout(
    barmode = "overlay",
    xaxis = list(
        dtick = 15,
        rangemode = "tozero",
        title = "minutes"
    ),
    yaxis = list(
        title = "occurences"
    )
)

 

Not bad.

By the way, this appears to be a serious topic of research. For example: Modeling Distribution of Travel Time in Signalized Road Section Using Truncated Distribution.

 

LS0tDQp0aXRsZTogIkl2bydzIHRyYXZlbCB0aW1lIHRvIHdvcmsiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpZb3UncmUgcmlnaHQgLS0tIHlvdXIgdHJhdmVsIHRpbWUgaXMgbm90IGV4YWN0bHkgbm9ybWFsLiBCdXQgeW91IGNhbid0IG1vZGVsIGl0IHdpdGggYSBQb2lzc29uIGRpc3RyaWJ1dGlvbiBlaXRoZXIuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHRydW5jbm9ybSkNCmBgYA0KDQpCeSB0aGUgd2F5LCB0aGlzIGlzIHlvdXIgZXhhbXBsZToNCg0KYGBge3IgZWNobz1GQUxTRX0NCnBsb3RfbHkoDQoJZGF0YS5mcmFtZSgNCgkJdCA9IGMoDQoJCQlyZXAoNDUsIDkwKSwgcmVwKDQwLCA0MCksIHJlcCg1MCwgNDApLCByZXAoNTUsIDMwKSwgcmVwKDYwLCAxNSksIHJlcCg5MCwgNSkpDQoJKSwNCgl3aWR0aCA9IDkwMA0KKSAlPiUgDQphZGRfaGlzdG9ncmFtKA0KCXggPSB+dCwNCgl4YmlucyA9IGxpc3QoDQoJCXNpemUgPSAxLA0KCQlzdGFydCA9IC41LCBlbmQgPSAxMjANCgkpDQopICU+JSBsYXlvdXQoDQoJeGF4aXMgPSBsaXN0KA0KCQlkdGljayA9IDE1LA0KCQlyYW5nZW1vZGUgPSAidG96ZXJvIiwNCgkJdGl0bGUgPSAibWludXRlcyINCgkpLA0KCXlheGlzID0gbGlzdCgNCgkJdGl0bGUgPSAib2NjdXJlbmNlcyINCgkpDQopDQpgYGANCg0KJm5ic3A7DQoNCkxldCdzIGRlZmluZSBhIGdlbmVyaWMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRvdGFsIGRlbGF5IHRpbWUgZHVlIHRvIHNvbWUgcmVhc29uLCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoNCg0KKiBuIC0tLSBudW1iZXIgb2YgIm9wcG9ydHVuaXRpZXMiIGZvciBkZWxheSB0byBvY2N1ciAoZS5nLiBudW1iZXIgb2Ygc2lnbmFscyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBzdGF0aW9ucyk7DQoqIHAgLS0tIHByb2JhYmlsaXR5IG9mIGRlbGF5IGdpdmVuIGFuIG9wcG9ydHVuaXR5Ow0KKiBtZWFuIC0tLSBhdmVyYWdlIGRlbGF5IHRpbWU7DQoqIHN0YW5kYXJkIGRldmlhdGlvbiAod2UgYXNzdW1lIGRlbGF5IHRpbWUgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQpLg0KDQpgYGB7cn0NCmRlbGF5IDwtIGZ1bmN0aW9uKG4sIHAsIG1lYW4sIHNkKSBzdW0oDQoJcnRydW5jbm9ybShuLCAwLCBJbmYsIG1lYW4sIHNkKVsNCgkJc2FtcGxlKA0KCQkJYyhGQUxTRSwgVFJVRSksDQoJCQlzaXplID0gbiwNCgkJCXJlcGxhY2UgPSBUUlVFLA0KCQkJcHJvYiA9IGMoMSAtIHAsIHApDQoJCSkNCgldDQopDQpgYGANCg0KJm5ic3A7DQoNCkEgc2ltcGxlIG1vZGVsIG9mIHlvdXIgdHJhdmVsIHRpbWUgLS0tIHN1bSBvZiB0aHJlZSBjb21wb25lbnRzOg0KDQoqICJiYXNlIiB0aW1lIC0tLSBub3JtYWxseSBkaXN0cmlidXRlZCwgd2l0aCAkbWVhbiA9IDQwJCBhbmQgJHNkID0gMSQ7DQoqIDEwIHNpZ25hbHMgd2l0aCBwcm9iYWJpbGl0eSBvZiBiZWluZyByZWQgb2YgMjAlLCBhbmQgZGVsYXkgdGltZSB3aXRoICRtZWFuID0gNSQgYW5kICRzZCA9IDEkOw0KKiAxMCAib3Bwb3J0dW5pdGVzIiBvZiBhIGJpZyBkZWxheSAoc2ljayBwZW9wbGUsIGV0Yy4pIHdpdGggcHJvYmFiaWxpdHkgb2YgMSUsIGFuZCBkZWxheSB0aW1lIHdpdGggJG1lYW4gPSAzMCQgYW5kICRzZCA9IDUkLg0KDQpgYGB7cn0NCm4gPC0gMTEwMA0KDQpwbG90X2x5KA0KCWRhdGEuZnJhbWUoDQoJCW1vZGVsID0gYygNCgkJCXJlcCgiZXhhbXBsZSIsIDIyMCksDQoJCQlyZXAoIm1vZGVsIiwgbikNCgkJKSwNCgkJdCA9IGMoDQoJCQlyZXAoNDUsIDkwKSwgcmVwKDQwLCA0MCksIHJlcCg1MCwgNDApLCByZXAoNTUsIDMwKSwgcmVwKDYwLCAxNSksIHJlcCg5MCwgNSksDQoJCQlybm9ybShuLCA0MCwgMSkNCgkJCQkrIHJlcGxpY2F0ZShuLCBkZWxheSgxMCwgLjIsIDUsIDEpKQ0KCQkJCSsgcmVwbGljYXRlKG4sIGRlbGF5KDEwLCAuMDEsIDMwLCA1KSkNCgkJKQ0KCSksDQoJYWxwaGEgPSAwLjUsDQoJY29sb3JzID0gIlNldDEiLA0KCXdpZHRoID0gOTAwDQopICU+JSANCmFkZF9oaXN0b2dyYW0oDQoJY29sb3IgPSB+bW9kZWwsDQoJeCA9IH50LA0KCXhiaW5zID0gbGlzdCgNCgkJc2l6ZSA9IDEsDQoJCXN0YXJ0ID0gLjUsIGVuZCA9IDEyMA0KCSkNCikgJT4lIGxheW91dCgNCgliYXJtb2RlID0gIm92ZXJsYXkiLA0KCXhheGlzID0gbGlzdCgNCgkJZHRpY2sgPSAxNSwNCgkJcmFuZ2Vtb2RlID0gInRvemVybyIsDQoJCXRpdGxlID0gIm1pbnV0ZXMiDQoJKSwNCgl5YXhpcyA9IGxpc3QoDQoJCXRpdGxlID0gIm9jY3VyZW5jZXMiDQoJKQ0KKQ0KYGBgDQoNCiZuYnNwOw0KDQpOb3QgYmFkLg0KDQpCeSB0aGUgd2F5LCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBzZXJpb3VzIHRvcGljIG9mIHJlc2VhcmNoLiBGb3IgZXhhbXBsZTogW01vZGVsaW5nIERpc3RyaWJ1dGlvbiBvZiBUcmF2ZWwgVGltZSBpbiBTaWduYWxpemVkIFJvYWQgU2VjdGlvbiBVc2luZyBUcnVuY2F0ZWQgRGlzdHJpYnV0aW9uXShodHRwOi8vd3d3LnNjaWVuY2VkaXJlY3QuY29tL3NjaWVuY2UvYXJ0aWNsZS9waWkvUzE4NzcwNDI4MTQwNDEwODEpLg0KDQombmJzcDsNCg==