GNU Scientific Library can do that, and it's a plain C library available on pretty much any system. From the documentation: Function: double gsl_cdf_lognormal_P (double x, double zeta, double sigma) Function: double gsl_cdf_lognormal_Q (double x, double zeta, double sigma) Function: double gsl_cdf_lognormal_Pinv (double P, double zeta, double sigma) Function: double...

Watch out - you want to save the sign of x-mu, not just of x: int sign = 1; if (x < mu) sign = -1; x = fabs(x-mu)/sqrt(2.0*sigma*sigma); Otherwise your scaling is correct....

By definition, the cumulative distribution function F_a for an attribute a is defined by F_a(x) = # documents with attribute value <= x / # of documents So you can compute the CDF with F_a(x) = db.collection.count({ "a" : { "lte" : x }) / db.collection.count({ "a" : { "$exists"...

statistics,wolfram-mathematica,normal-distribution,cdf

1) MultinormalDistribution is now built in, so don't load MultivariateStatistics it unless you are running version 7 or older. If you do you'll see MultinormalDistribution colored red indicating a conflict. 2) this works: sig = .5; u = .5; dist = MultinormalDistribution[{0, 0}, sig IdentityMatrix[2]]; delta = CDF[dist, {xx, yy}]...

When normed=True, the counts can be interpreted as pdf values: counts, bin_edges = np.histogram(a, bins=num_bins, normed=True) The cdf is given by dx = bin_edges[1]-bin_edges[0] cdf = np.cumsum(counts*dx) The distance between the bin edges is uniform, so dx is constant. counts*dx gives the probability mass for each bin. Now np.cumsum of...

Your code (and conclusion) look correct to me. It might be graphically better to use type="h" to draw a "high-density" plot; this makes it clearer that there is zero probability for non-integer values of x. x <- 1:50 par(las=1,bty="l") ## cosmetic plot(x,dbinom(x ,size = 50,prob = 0.513),type="h", ylab="PMF", main="Binomial Distribution...

It is unclear why you need N, Ndft and X.length(). Aren't one value to be enough? As mentioned by someone, in integer division j/N you're getting zeroes. Please make it to be double(j)/double(N) ...

Two possible issue with this algorithm. Handling large values of v. When v becomes large, we should recover the standard normal distribution. However, you have a while loop over v. So v=1000000 say, becomes slow Tail accuracy. How does the algorithm cope in the extreme tails? typically, we need to...

python,statistics,scipy,normal-distribution,cdf

edit: you actually need import norm from scipy.stats. I found the answer. You need to use ppf in scipy.stats which stands for "percent point function". So let's say you have a normal distribution with stdDev = 1, and mean = 0 and you want to find the value at which...

There is no need to use two plots commands, just use the pointinterval option: plot 'data' pointinterval 5 with linespoints That plots every line segment, but only every fifth point symbol. The big advantage is, that you can control the behaviour with set style line: set style line 1 lc...

Try this: def hypergeometricCDF(N,K,n,x): """ Call: p = hypergeometricCDF(N,K,n,x) Input argument: N: integer K: integer n: integer x: integer Output argument: p: float Example: hypergeometricCDF(120,34,12,7) => 0.995786 """ k = arange(x+1) p = sum(exp(log_hypergeometricPMF(N,K,n,k))) return(p) log_hypergeometricPMF is defined on top of the file ;)...

Combining the example by @Robert and code from the answer featured here: How to get a reversed, log10 scale in ggplot2? library("scales") library(ggplot2) reverselog_trans <- function(base = exp(1)) { trans <- function(x) -log(x, base) inv <- function(x) base^(-x) trans_new(paste0("reverselog-", format(base)), trans, inv, log_breaks(base = base), domain = c(1e-100, Inf)) }...

You can use uniroot(...) for this. [Note: If the point of this exercise is to implement your own version of a Newton Raphson technique, let me know and I'll delete the answer.] If I'm understanding this correctly, you want to generate random samples from a distribution with probability density function...

matlab,probability,truncate,cdf

I would suggest first using the Matlab truncate function to adjust your distribution: pd = makedist('poiss') trunc = truncate(pd,1,3) for Poisson, it can only be positive. set a discrete range: x = 0:.1:4; distribution = pdf(trunc,x); cummulative = cdf(trunc,x); alternatively, you could integrate the pdf function using matlab integrate...

Try findInterval, e.g.: findInterval(c(0.1, 0.98), cdf) + 1 # [1] 1 7 ...