function [lower,upper,estimate]=bca(nboot,x,fun,low,up)
% Beräknar BCA-konfidensintervall enligt Efron
% Anrop [lower,upper,estimate]=bca(nboot,x,fun,low,up)
% Parametrar:
% nboot=antal bootstrap-ningar som skall ske
% x=ursprunglig datavektor
% fun=skattningsfunktion
% low=undre konfidensgrad i procent
% up=övre konfidensgrad i procent
% Output:
% lower=undre konfidensgräns
% upper=övre konfidensgräns
% estimate=punktskattning
% Skattning av parameter
estimate=feval(fun,x);
% Bootstrap-generering
bootstat=bootstrp(nboot,fun,x);
% Beräkning av hjälpstorheten zhat 
b=length(bootstat);
antal=sum(bootstat<=estimate);
zhat=norminv(antal/b);
% Beräkning av hjälpstorheten ahat
[nrow,ncol]=size(x);
if nrow<ncol
	x=x';
	nrow=ncol ;
end
for j=1:nrow
	if j==1
		values=[2:nrow];
	elseif j==nrow
		values=[1:nrow-1];
	else	
		values=[1:j-1, j+1:nrow];
	end
	s(j,:)=feval(fun,x(values,:));
end
mn=mean(s)
[b c]=size(s);
d=s-ones(b,1)*mn;
sum2=sum(d.^2);
sum3=sum(d.^3);
ahat=-sum3./(6*(sum2.^(1.5)));
% Beräkning av korrigerade konfidensgrader enligt Efron 
n=norminv(low/100);
alfa1=100*normcdf(zhat+(zhat+n)/(1-ahat*(zhat+n)));
n=norminv(up/100);
alfa2=100*normcdf(zhat+(zhat+n)/(1-ahat*(zhat+n)));
% Beräkning av konfidensgränser med percentilmetoden
lower=prctile(bootstat,alfa1);
upper=prctile(bootstat,alfa2);
