Hello, I used SAS to build confidence intervals of coefficient of variation for lognormal distribution using simulation work for different combinations of true parameters of lognormal distribution (mu and sigma). I tried sample size =15, mu=0 and different values of sigma such that sigma=0.04996, 0.09975, 0.19804, 0.38525, 0.47238. I got the same coverage probability=0.9496 and interval widths =0.0349, 0.0702, 0.1436, 0.3125, 0.4141 respectively. Is it correct? What is the explanation? The following is the code. Thank you. Code of the program: /*Prog to construct CI for COV of lognormal dist. using ranked set sampling technique*/ proc iml; sigma=0.47238; sigmasq=sigma**2;/*the value of sigma in normal dist.*/ mu=1; toi=sqrt(exp(sigmasq)-1); *print toi; mun=exp(mu+(0.5*sigmasq));/*the value of mean in lognormal dist.*/ print mun; sigmasqn=exp((2*mu)+(2*sigmasq))-exp((2*mu)+(sigmasq));/*the value of sigmasquare in lognormal dist.*/ sigman=sqrt(sigmasqn);/*the value of sigma in lognormal dist.*/ na=5000; nb=5000; * Total sample size is 15 that is expressed as 3 cycles and each cycle contains 5 observations; cycle=3; n = 5; m = 5; numobs=cycle*m;/*number of observations in the matrix*/ print numobs; x1 = j(n,m); x2 = j(n,m); y1=j(cycle,m); y2=j(cycle,m); r=j(5000,1,0); s=j(5000,1,0); count=0; *Generate 5000 data sets from normal dist. to calculate mean1, std1, estcov1; do t=1 to na; do l=1 to cycle; call randseed(12345); *x1 = j(n,m); /* allocate (n x m) matrix*/ call randgen(x1, "Normal", mu, sigma); /* fill it*/ do i = 1 to nrow(x1); v1 = x1[i, ]`; /* get i_th row; transpose to column vector */ call sort (v1, 1); /* sort it */ x1[i, ] = v1`; /* replace with sorted row */ end;/*end of i loop*/ c1=j(n,1); c1=vecdiag(x1);/*to get diag elements of a matrix in a column*/ *print c1; d1=c1`; y1[l, ]=d1; end;/*end of l loop*/ mean1=y1[:];/* calculate the mean of all elements of the matrix */ sumsq1=y1[##];/* calculate the sum of squares of all elements of the matrix */ var1=(1/(numobs-1))*(sumsq1-numobs*(mean1##2)); stdev1=sqrt(var1); *Generate 5000 data sets from normal dist. to calculate indepent copy of the statistics mean2, std2, estcov2; do k=1 to nb; do h=1 to cycle; call randseed(67891); *x2 = j(n,m); /* allocate (n x m) matrix*/ call randgen(x2, "Normal", mu, sigma); /* fill it*/ do g = 1 to nrow(x2); v2 = x2[g, ]`; /* get i_th row; transpose to column vector */ call sort (v2, 1); /* sort it */ x2[g, ] = v2`; /* replace with sorted row */ end;/*end of g loop*/ c2=j(n,1); c2=vecdiag(x2);/*to get diag elements of a matrix in a column*/ d2=c2`; y2[h, ]=d2; end;/*end of h loop*/ mean2=y2[:];/* calculate the mean of all elements of the matrix */ sumsq2=y2[##];/* calculate the sum of squares of all elements of the matrix */ var2=(1/(numobs-1))*(sumsq2-numobs*(mean2##2)); stdev2=sqrt(var2); FGlognor=sqrt(exp((var1/var2)*(sigmasq))-1); r[k,1]=FGlognor; end;/*end of k loop*/ e=r; r[rank(r),]=e; low=r[125,]; up=r[4875,]; wid=up-low; s[t,]=wid; *Check if toi in the constructed FGCIs; if low<=toi then if toi<=up then count=count+1; end;/*end of t loop*/ p=count/5000; print p; * q is the coverage proability; q=1-p; print q; *meanwid is the mean width of the constructed confidence intervals; meanwid=s[:,]; print meanwid; quit; run;
... View more