I have two data sets. One with positive values and zeroes. The other with negative values and zeroes. Lets call them VP and VN respectively. I would like to find a best fit distribution for each. I am not aware of any one-sided distributions that work with zeroes, hence my question: are there any one-side distributions that are defined for zeroes? Thank you.

Data sets details: VP and VN are "relatively"" symmetrical, yet are samples for different things, and not a data set split into two. The zeroes are actual zeroes. And the samples are not truncated. Vector elements are High prices minus prior Close prices and Low prices minus prior Close prices for publicly traded financial assets at certain time windows (e.g. prior close can be the 10:30 1 minute bar closing price, and the High would be the High price for the following 1 minute bar).

Purpose: find best fit distribution for each, and use the CDF for looking at estimated probabilities. The data is discrete: the smallest value increment possible is 0.01. Yet I do not need to be very precise, so fitting a continuous distribution would be fine.


  1. Truncating symmetrical distributions. Doesn't work, as the mode for these samples is 0, and the highest probability bin is 0/0.1 for the VP and 0/-0.1 for VN.

  2. Adding infinitesimal values to all the zeroes. Inclined to do this in the absence of a better alternative, but rather not if can be avoided.

  3. Modifying the distribution functions such as done by someone in this post How to fit a Weibull distribution to input data containing zeroes?. I do not have the necessary knowledge for achieving that.

  4. Combining data sets into one. It does not work, as samples are not symmetrical enough.

VP <- c(0.36, 0.3, 0.36, 0.47, 0, 0.05, 0.4, 0, 0, 0.15, 0.89, 0.03,  0.45, 0.21, 0, 0.18, 0.04, 0.53, 0, 0.68, 0.06, 0.09, 0.58, 0.03, 0.23, 0.27, 0, 0.12, 0.12, 0, 0.32, 0.07, 0.04, 0.07, 0.39, 0, 0.25, 0.28, 0.42, 0.55, 0.04, 0.07, 0.18, 0.17, 0.06, 0.39, 0.65, 0.15, 0.1, 0.32, 0.52, 0.55, 0.71, 0.93, 0, 0.36)
VN <- c(0, -0.14, 0, -0.03, -0.33, -0.28, -0.02, -0.5, -0.16, -0.13,  0, -0.4, -0.02, -0.11, -0.74, 0, 0, 0, -0.63, 0, -0.33, -0.13, -0.2, -0.05, -0.33, -0.02, -0.26, 0, -0.66, -0.36, -0.16, -0.37, -0.13, -0.02, -0.06, -0.34, -0.28, 0, 0, -0.1, -0.38, -0.02, -0.16, -0.34, -0.37, -0.01, 0, 0, -0.39, -0.07, 0, -0.02, -0.19, 0, -0.43, -0.05)    
par(mfrow = c(1, 2))

enter image description here

  • 1
    $\begingroup$ Where does your data come from? Are there two different data generating processes at work, one generating zeros and the other generating nonzero values? (If so, a mixture model could work. Something like this often motivates a zero-inflated Poisson or NegBin model.) Plus: what do you want to do with the fitted distribution? Could you elaborate why the simple ECDF (possibly smoothed) is not sufficient? $\endgroup$ – Stephan Kolassa May 10 '16 at 19:35
  • $\begingroup$ Vector elements are High prices minus prior Close prices and Low prices minus prior Close prices for financial assets at certain times window. So same process. I'll be using the ECDF as well, but want to also look at a theoretical CDF with an OK fit for getting raw probability estimates of tail events. Need to look into smoothing the ECDF. Thank you. $\endgroup$ – Krug May 10 '16 at 20:26
  • $\begingroup$ "it did not answer the question" is grounds to delete. The poster was uninterested in any discussion that would improve it. I have undeleted the answer for now, but I don't see how the post can remain as it stands, since as far as I can see it, it's currently a comment. I have left a few of your comments that I think are useful and may head off further questions along the same lines. $\endgroup$ – Glen_b -Reinstate Monica May 11 '16 at 9:47

Remove the zeros, and try to approximate the rest as a truncated normal distribution $N_\mathrm{trunc}(x)$. Then your original distribution will be

$p \delta(x) + (1-p) N_\mathrm{trunc}(x)$

  • $\begingroup$ Your answer is very brief - it could use some justification. Why truncated normal rather than something else (e.g. truncated t for example)? $\endgroup$ – Glen_b -Reinstate Monica May 10 '16 at 23:57
  • $\begingroup$ Please don't comment my answers. I am not interested to talk with you. $\endgroup$ – user31264 May 10 '16 at 23:58
  • $\begingroup$ Does not answer the question, yet awesome idea. Thanks a lot. $\endgroup$ – Krug May 11 '16 at 0:01
  • $\begingroup$ @user31264 You don't get the choice to have me not comment, I'm afraid. If there's a problem, I will comment, and you should attempt to understand the issue. Please try to understand how the site works. Overly brief, unjustified answers are a reason to delete the answer, or to convert it to a comment. It's also important to as far as possible address the actual questions. I'm happy to delete your answer (or convert it to a comment) instead of invite you to improve it if you prefer not to converse about its shortcomings. $\endgroup$ – Glen_b -Reinstate Monica May 11 '16 at 0:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.