miInference: Combine results from analyses after multiple imputation

View source: R/miInference.R

miInferenceR Documentation

Combine results from analyses after multiple imputation

Description

This function combines the results from data analyses performed after multiple imputation using methods described by Rubin (1987) and others.

Usage


miInference( est.list, std.err.list, method = "scalar",
   df.complete = NULL )

## S3 method for class 'miInference'
print( x, ...)

Arguments

est.list

a list of estimates to be combined. Each component of this list should be a scalar or vector containing point estimates from the analysis of an imputed dataset. This list should have M components, where M is the number of imputations, and all components should have the same length.

std.err.list

a list of standard errors to be combined. Each component of this list should be a scalar or vector of standard errors associated with the estimates in est.list.

method

how are the estimates to be combined? At present, the only type allowed is "scalar", which means that estimands are treated as one-dimensional entities. If est.list contains vectors, inference for each element of the vector is carried out separately; covariances among them are not considered.

df.complete

degrees of freedom assumed for the complete-data inference. This should be a scalar or a vector of the same length as the components of est.list and std.err.list.

x

a result from miInference.

...

values to be passed to the methods.

Details

If df.complete = NULL or Inf, the degrees of freedom are computed by the method of Rubin (1987, Chap.3), which assumes that if there were no missing data, the usual normal approximation for large samples would be appropriate, i.e. that a 95% interval would be computed as the estimate plus or minus 1.96 standard errors. Otherwise, the degrees of freedom are computed by the method of Barnard and Rubin (1999), which assumes that an approximate 95% interval without missing data would be the estimate plus or minus qt(.975, df.complete) standard errors.

The result from this function is a list whose class attribute has been set to "miInference". If this list is displayed or printed via the generic function print, it will be formatted into a table resembling the output from a regression analysis with columns for the estimates, standard errors, t-ratios (estimates divided by their standard errors) and p-values for testing the null hypothesis that each estimate is zero.

Value

a list with the following components:

names

character-string labels for the estimands. This is derived from the names attribute, if any, of the components of est.list.

est

combined estimate(s).

std.err

standard error(s) for est.

df

degrees of freedom for Student-t approximation. For example, 95% intervals can be computed as est plus or minus qt(.975,df)*std.err.

p

p-value(s) for testing the null hypothesis that each estimand is zero against a two-tailed alternative.

rel.incr

estimated relative increase(s) in variance due to nonresponse.

mis.inf

estimated rate(s) of missing information.

Note

Rubin (1987) defined the rate of missing information as rel.incr + 2/(df+3) divided by (rel.incr+1), which estimates the information lost due to missing values and due to the fact that the number of multiple imputations is finite. We define it as rel.incr divided by (rel.incr+1), the information lost due to missing values, which is consistent with the formulas of Barnard and Rubin (1999).

Author(s)

Joe Schafer Joseph.L.Schafer@census.gov

References

Barnard, J. and Rubin, D.B. (1999) Small-sample degrees of freedom with multiple imputation. Biometrika, 86, 948-955.

Rubin, D.B. (1987) Multiple Imputation for Nonresponse in Surveys. New York: Wiley.

Examples

# generate ten multiple imputations for 2x2 table, compute
# log-odds ratios and standard errors, and combine 
fitML <- cvam( ~ V1 * V2, data=crime, freq=n ) # run EM first
set.seed(54981)
result <- cvam( fitML, method="MCMC",
   control=list( iterMCMC=5000, imputeEvery=500 ) )
impData <- get.imputedFreq(result)[-(1:2)] # just the frequencies 
est.list <- std.err.list <- as.list(1:10)  # to hold the estimates and SEs
for( m in 1:10 ) {
   f <- impData[,m]
   est.list[[m]] <- log( (f[1] * f[4]) / (f[2] * f[3]) )
   std.err.list[[m]] <- sqrt( sum(1/f) )
}
miInference( est.list, std.err.list )

cvam documentation built on March 7, 2023, 5:29 p.m.