I am trying to get the graph of an empirical cumulative distribution function, but I cant seem to find the commands that I use in other softwares such as Matlab. In there it is ecdf(x). Is there a way to do this in Gauss?
I am not sure if any of the GAUSS applications have an ECDF function, but I think this procedure will do what you need.
proc (1) = ecdf(x); local bp_start, bp_end, bp_inc, bp_pts, out, num_breaks; num_breaks = rows(x); //calculate breakpoints bp_start = minc(x); bp_end = maxc(x); bp_inc = (bp_end - bp_start)./num_breaks; bp_pts = seqa(bp_start, bp_inc, num_breaks + 1); //pre-allocate 'out' vector to avoid concatenation out = zeros(rows(bp_pts), 1); out2 = out; //Clear code to calculate how many in each breakpoint for i(1, rows(bp_pts), 1); out[i] = sumc(x .< bp_pts[i]); endfor; retp(out); endp;
You can adjust the number of breakpoints num_breaks to trade-off between speed and the smoothness of the curve. Though, if speed is a concern you might want to replace the for loop at the end with a matrix based operation like this:
//Faster matrix based code to calculate how many in each breakpoint x = reshape(x', rows(bp_pts), rows(x)); out = sumr(x .< bp_pts);
Please login or Register to submit your answer