Skip to contents

Functions cbind() and rbind() are defined in the mice package in order to enable dispatch to cbind.mids() and rbind.mids() when one of the arguments is a data.frame.

Usage

cbind(...)

rbind(...)

Arguments

...

Arguments passed on to base::cbind

deparse.level

integer controlling the construction of labels in the case of non-matrix-like arguments (for the default method):
deparse.level = 0 constructs no labels;
the default deparse.level = 1 typically and deparse.level = 2 always construct labels from the argument names, see the ‘Value’ section below.

Value

An S3 object of class mids

Details

The standard base::cbind() and base::rbind() always dispatch to base::cbind.data.frame() or base::rbind.data.frame() if one of the arguments is a data.frame. The versions defined in the mice package intercept the user command and test whether the first argument has class "mids". If so, function calls cbind.mids(), respectively rbind.mids(). In all other cases, the call is forwarded to standard functions in the base package.

The cbind.mids() function combines two mids objects columnwise into a single object of class mids, or combines a single mids object with a vector, matrix, factor or data.frame columnwise into a mids object.

If both arguments of cbind.mids() are mids-objects, the data list components should have the same number of rows. Also, the number of imputations (m) should be identical. If the second argument is a matrix, factor or vector, it is transformed into a data.frame. The number of rows should match with the data component of the first argument.

The cbind.mids() function renames any duplicated variable or block names by appending ".1", ".2" to duplicated names.

The rbind.mids() function combines two mids objects rowwise into a single mids object, or combines a mids object with a vector, matrix, factor or data frame rowwise into a mids object.

If both arguments of rbind.mids() are mids objects, then rbind.mids() requires that both have the same number of multiple imputations. In addition, their data components should match.

If the second argument of rbind.mids() is not a mids object, the columns of the arguments should match. The where matrix for the second argument is set to FALSE, signalling that any missing values in that argument were not imputed. The ignore vector for the second argument is set to FALSE. Rows inherited from the second argument will therefore influence the parameter estimation of the imputation model in any future iterations.

Note

The cbind.mids() function constructs the elements of the new mids object as follows:

dataColumnwise combination of the data in x and y
impCombines the imputed values from x and y
mTaken from x$m
whereColumnwise combination of x$where and y$where
blocksCombines x$blocks and y$blocks
callVector, call[1] creates x, call[2] is call to cbind.mids()
nmisEquals c(x$nmis, y$nmis)
methodCombines x$method and y$method
predictorMatrixCombination with zeroes on the off-diagonal blocks
visitSequenceCombined as c(x$visitSequence, y$visitSequence)
formulasCombined as c(x$formulas, y$formulas)
postCombined as c(x$post, y$post)
blotsCombined as c(x$blots, y$blots)
ignoreTaken from x$ignore
seedTaken from x$seed
iterationTaken from x$iteration
lastSeedValueTaken from x$lastSeedValue
chainMeanCombined from x$chainMean and y$chainMean
chainVarCombined from x$chainVar and y$chainVar
loggedEventsTaken from x$loggedEvents
versionCurrent package version
dateCurrent date

The rbind.mids() function constructs the elements of the new mids object as follows:

dataRowwise combination of the (incomplete) data in x and y
impEquals rbind(x$imp[[j]], y$imp[[j]]) if y is mids object; otherwise the data of y will be copied
mEquals x$m
whereRowwise combination of where arguments
blocksEquals x$blocks
callVector, call[1] creates x, call[2] is call to rbind.mids
nmisx$nmis + y$nmis
methodTaken from x$method
predictorMatrixTaken from x$predictorMatrix
visitSequenceTaken from x$visitSequence
formulasTaken from x$formulas
postTaken from x$post
blotsTaken from x$blots
ignoreConcatenate x$ignore and y$ignore
seedTaken from x$seed
iterationTaken from x$iteration
lastSeedValueTaken from x$lastSeedValue
chainMeanSet to NA
chainVarSet to NA
loggedEventsTaken from x$loggedEvents
versionTaken from x$version
dateTaken from x$date

References

van Buuren S and Groothuis-Oudshoorn K (2011). mice: Multivariate Imputation by Chained Equations in R. Journal of Statistical Software, 45(3), 1-67. doi:10.18637/jss.v045.i03

See also

Author

Karin Groothuis-Oudshoorn, Stef van Buuren

Examples

# --- cbind ---
# impute four variables at once (default)
imp <- mice(nhanes, m = 1, maxit = 1, print = FALSE)
imp$predictorMatrix
#>     age bmi hyp chl
#> age   0   1   1   1
#> bmi   1   0   1   1
#> hyp   1   1   0   1
#> chl   1   1   1   0

# impute two by two
data1 <- nhanes[, c("age", "bmi")]
data2 <- nhanes[, c("hyp", "chl")]
imp1 <- mice(data1, m = 2, maxit = 1, print = FALSE)
imp2 <- mice(data2, m = 2, maxit = 1, print = FALSE)

# Append two solutions
imp12 <- cbind(imp1, imp2)

# This is a different imputation model
imp12$predictorMatrix
#>     age bmi hyp chl
#> age   0   1   0   0
#> bmi   1   0   0   0
#> hyp   0   0   0   1
#> chl   0   0   1   0

# Append the other way around
imp21 <- cbind(imp2, imp1)
imp21$predictorMatrix
#>     hyp chl age bmi
#> hyp   0   1   0   0
#> chl   1   0   0   0
#> age   0   0   0   1
#> bmi   0   0   1   0

# Append 'forgotten' variable chl
data3 <- nhanes[, 1:3]
imp3 <- mice(data3, maxit = 1, m = 2, print = FALSE)
imp4 <- cbind(imp3, chl = nhanes$chl)

# Of course, chl was not imputed
head(complete(imp4))
#>   age  bmi hyp chl
#> 1   1 30.1   1  NA
#> 2   2 22.7   1 187
#> 3   1 35.3   1 187
#> 4   3 27.5   1  NA
#> 5   1 20.4   1 113
#> 6   3 22.7   1 184

# Combine mids object with data frame
imp5 <- cbind(imp3, nhanes2)
head(complete(imp5))
#>   age  bmi hyp age.1 bmi.1 hyp.1 chl
#> 1   1 30.1   1 20-39    NA  <NA>  NA
#> 2   2 22.7   1 40-59  22.7    no 187
#> 3   1 35.3   1 20-39    NA    no 187
#> 4   3 27.5   1 60-99    NA  <NA>  NA
#> 5   1 20.4   1 20-39  20.4    no 113
#> 6   3 22.7   1 60-99    NA  <NA> 184

# --- rbind ---
imp1 <- mice(nhanes[1:13, ], m = 2, maxit = 1, print = FALSE)
#> Warning: Number of logged events: 1
imp5 <- mice(nhanes[1:13, ], m = 2, maxit = 2, print = FALSE)
#> Warning: Number of logged events: 1
mylist <- list(age = NA, bmi = NA, hyp = NA, chl = NA)

nrow(complete(rbind(imp1, imp5)))
#> Warning: iterations differ, so no convergence diagnostics calculated
#> [1] 26
nrow(complete(rbind(imp1, mylist)))
#> [1] 14

nrow(complete(rbind(imp1, data.frame(mylist))))
#> [1] 14
nrow(complete(rbind(imp1, complete(imp5))))
#> [1] 26