Capturing domComplere attribute in pageload context

I have a question regarding “Measuring page load times with the performance timing context”. We have started capturing performance timing context with our pageviews. With that we want to know the page load timing of our pages. Now while digging into data I came to know that for only 40% of pageviews the complete page load attributes are captured i.e. till domComplete. For other 60% attributes till domInteractive is captured.
According to this tutorial, we should add snowphlow code in setTimeout function in order to capture all the attributes. The questions I am seeking answers to are :
a) If setTimeout function is required to capture all the attributes then why 40% pageviews are able to capture all the attributes without it.
b) In some cases, the domComplete is captured for few pages in the same session and not for others.
c) For the same page (same url, same additional resources, some html), domComplete is captured for some users and not captured for others.
d) In some cases, where the page load is > 15s then also domComplete is captured, but for pageviews < 3s domComplete is not captured.