knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
In this vignette, we extend the analysis in Example 2 of Table 11.4, p. 423, of Boos and Stefanski (2013), "Essential Statistical Inference." Table 11.4 compares three methods of estimating the variance of the 20% trimmed mean. The three methods are the Influence Curve Method (Delta Method), the jackknife, and the bootstrap. The main entries of the table are based on N Monte Carlo samples of size n=20, leading to a matrix of three sets, one set for each distribution: the N 20% trimmed means and 3 variance estimators. Here we focus on the 3 columns of Table 11.4 based on
CV = the coefficient of variation of the N variance estimators
knitr::include_graphics("https://www4.stat.ncsu.edu/~boos/Monte.Carlo.se/table_11_4.jpg")
Under the uniform distribution, the estimated CVs are 0.41, 0.34, and 0.38. With an approximate SE of 0.01, these three CVs are reasonably well-separated ("significantly different"). However, for the other two distributions, the CVs are not as well-separeated compared to their SEs. In such a case, one might be interested in the standard errors of the differences or of the ratios of the CVs, because the these latter standard errors should be less than if the summaries were independent. The function pairwise.se is designed to get all pairwise SEs.
Here we display the first line of the function:
pairwise.se <- function(x,xcol,diff=TRUE,digits=4,B=0,seed=NULL,summary.f,...){
We see the main arguments are the Monte Carlo raw output data x
,
the columns xcol
of x
to use, and the summary summary.f
.
Here, summary.f
is just a simple function of one vector as used
in mc.se.vector
. In the example below, we use summary.f=CV
.
In the Simulation Code below, we generate an N=1,000 by 12 matrix hold
of Monte Carlo outout. Columns 1-4 of hold
are for the uniform(0,1) distribution,
columns 5-8 are for the
standard normal distribution, and columns 9-12 are for the standard exponential
distribution. Columns 1, 4, and 8 are 20% trimmed means, and the other columns are estimated variances.
To illustrate pairwise.se, we first get the standard errors of
the differences of CV values in Table 11.4 for the normal distribution using columns 6-8
of the output data frame hold
.
> pairwise.se(hold,xcol=6:8,summary.f=cv) elem summi summj summary se t.stat N method 1 6 7 0.4695 0.4232 0.0463 0.0072 6.4254 1000 Jackknife 2 6 8 0.4695 0.4359 0.0337 0.0090 3.7556 1000 Jackknife 3 7 8 0.4232 0.4359 -0.0126 0.0071 -1.7795 1000 Jackknife
First notice that the summaries (0.47, 0.42, 0.43) for the normal distribution in Table 11.4
show up under summi
and
summj
. Then their differences are listed under summary
. The standard errors of the differences
are under se
. Next, t.stat
is summary/se
if differences are used and (summary-1)/se
if ratios
are used (diff=F
). To illustrate the use of ratios,
> pairwise.se(hold,xcol=6:8,diff=F,summary.f=cv) elem summi summj summary se t.stat N method 1 6 7 0.4695 0.4232 1.1095 0.0178 6.1676 1000 Jackknife 2 6 8 0.4695 0.4359 1.0773 0.0216 3.5719 1000 Jackknife 3 7 8 0.4232 0.4359 0.9710 0.0160 -1.8174 1000 Jackknife
Notice that summi
and summj
are the same as for differences, but now summary
holds the
ratios. The t statistics are similar to those for differences.
If the bootstrap is to be used in place of the jackknife, we have
> pairwise.se(hold,xcol=6:8,B=1000,seed=769,summary.f=cv) elem summi summj summary se t.stat B seed N method 1 6 7 0.4695 0.4232 0.0463 0.0070 6.5859 1000 769 1000 Bootstrap 2 6 8 0.4695 0.4359 0.0337 0.0090 3.7520 1000 769 1000 Bootstrap 3 7 8 0.4232 0.4359 -0.0126 0.0068 -1.8640 1000 769 1000 Bootstrap > pairwise.se(hold,xcol=6:8,diff=F,B=1000,seed=769,summary.f=cv) elem summi summj summary se t.stat B seed N method 1 6 7 0.4695 0.4232 1.1095 0.0178 6.1481 1000 769 1000 Bootstrap 2 6 8 0.4695 0.4359 1.0773 0.0211 3.6563 1000 769 1000 Bootstrap 3 7 8 0.4232 0.4359 0.9710 0.0160 -1.8179 1000 769 1000 Bootstrap
The following code creates an N=1,000 by 12 matrix 'hold' of Monte Carlo outout. Columns 1-4 are for the uniform(0,1) distribution, columns 5-8 are for the standard normal distribution, and columns 9-12 are for the standard exponential distribution. Columns 1, 4, and 8 are 20% trimmed means, and the other columns are estmated variances.
trim20 <- function(x){mean(x,.2)} # 20% trimmed mean function trim.var <- function(x,trim){ # var. est. for trim20 n <- length(x);h<-floor(trim*n) tm <- mean(x,trim);sort(x)->x ss <- h*((x[h+1]-tm)^2+(x[n-h]-tm)^2) ss <- ss+sum((x[(h+1):(n-h)]-tm)^2) ss/((n-2*h)*(n-2*h-1)) } trim20.var<-function(x){trim.var(x,.2)} N=1000 hold <- matrix(0,nrow=N,ncol=12) set.seed(351) z <- matrix(runif(N*20),nrow=N) hold[,1] <- apply(z,1,trim20) hold[,2] <- apply(z,1,trim20.var) hold[,3] <- apply(z,1,jack.var,theta=trim20) hold[,4] <- apply(z,1,boot.var,theta=trim20,B=100) set.seed(352) z<- matrix(rnorm(N*20),nrow=N) hold[,5] <- apply(z,1,trim20) hold[,6] <- apply(z,1,trim20.var) hold[,7] <- apply(z,1,jack.var,theta=trim20) hold[,8] <- apply(z,1,boot.var,theta=trim20,B=100) set.seed(353) z<- matrix(rexp(N*20),nrow=N) hold[,9] <- apply(z,1,trim20) hold[,10] <- apply(z,1,trim20.var) hold[,11] <- apply(z,1,jack.var,theta=trim20) hold[,12] <- apply(z,1,boot.var,theta=trim20,B=100)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.