Predicting Mortality of ICU Patients: The PhysioNet/Computing in Cardiology Challenge 2012 1.0.0

function [out] = condit(s, par)

pt_l = .01;
pt_u = .99;

if nargin == 1
    s = sort(s(isfinite(s)));
    s = s(round(length(s)*pt_l) : round(length(s)*pt_u));
    out.range = s([1 end]);
    ls = length(s);
    y = norminv(linspace(pt_l, pt_u, ls)');
    r = [ones(ls,1) s log(s+1)];
    if length(find(diff(s))) < 2 % less than 3 distinct values
        out.beta = [-mean(s); 1; 0] / (out.range(2) - out.range(1));
        return
    end
    out.beta = ((r' * r) \ (r' * y)) / 3;
else
    s = min(max(s, par.range(1)), par.range(2));
    beta = par.beta;
    r = [ones(length(s),1) s log(s+1)];
    out = r * beta;
end