| center {misty} | R Documentation |
Centering Predictor Variables in Single-Level and Multilevel Data
Description
This function centers predictor variables in single-level data, two-level data, and three-level data at the grand mean (CGM, i.e., grand mean centering) or within cluster (CWC, i.e., group mean centering).
Usage
center(..., data = NULL, cluster = NULL, type = c("CGM", "CWC"),
cwc.mean = c("L2", "L3"), value = NULL, name = ".c",
append = TRUE, as.na = NULL, check = TRUE)
Arguments
... |
a numeric vector for centering a predictor variable, or a
data frame for centering more than one predictor. Alternatively,
an expression indicating the variable names in |
data |
a data frame when specifying one or more predictor variables
in the argument |
cluster |
a character string indicating the name of the cluster
variable in |
type |
a character string indicating the type of centering, i.e.,
|
cwc.mean |
a character string indicating the type of centering of a level-1
predictor variable in a three-level model, i.e., |
value |
a numeric value for centering on a specific user-defined value.
Note that this option is only available when specifying a
single-level predictor variable, i.e., |
name |
a character string or character vector indicating the names of
the centered predictor variables. By default, centered predictor
variables are named with the ending |
append |
logical: if |
as.na |
a numeric vector indicating user-defined missing values, i.e.
these values are converted to |
check |
logical: if |
Details
- Single-Level Data
Predictor variables in single-level data can only be centered at the grand mean (CGM) by specifying
type = "CGM":x_{i} - \bar{x}_{.}where
x_{i}is the predictor value of observationiand\bar{x}_{.}is the averagexscore. Note that predictor variables can be centered on any meaningful value specifying the argumentvalue, e.g., a predictor variable centered at 5 by applying following formula:x_{i} - \bar{x}_{.} + 5resulting in a mean of the centered predictor variable of 5.
- Two-Level Data
Level-1 (L1) predictor variables in two-level data can be centered at the grand mean (CGM) by specifying
type = "CGM":x_{ij} - \bar{x}_{..}where
x_{ij}is the predictor value of observationiin L2 clusterjand\bar{x}_{..}is the averagexscore.L1 predictor variables are centered at the group mean (CWC) by specifying
type = "CWC"(Default):x_{ij} - \bar{x}_{.j}where
\bar{x_{.j}}is the averagexscore in clusterj.Level-2 (L1) predictor variables in two-level data can only be centered at the grand mean:
x_{.j} - \bar{x}_{..}where
x_{.j}is the predictor value of Level 2 clusterjand\bar{x}_{..}is the average Level-2 cluster score. Note that the cluster membership variable needs to be specified when centering a L2 predictor variable in two-level data. Otherwise the averagex_{ij}individual score instead of the averagex_{.j}cluster score is used to center the predictor variable.- Three-Level Data
Level-1 (L1) predictor variables in three-level data can be centered at the grand mean (CGM) by specifying
type = "CGM":x_{ijk} - \bar{x}_{...}where
x_{ijk}is the predictor value of observationiin Level-2 clusterjwithin Level-3 clusterkand\bar{x}_{...}is the averagexscore.L1 predictor variables are centered within cluster (CWC) by specifying
type = "CWC"(Default). However, L1 predictor variables can be either centered within Level-2 cluster (cwc.mean = "L2", Default, see Brincks et al., 2017):x_{ijk} - \bar{x}_{.jk}or within Level-3 cluster (
cwc.mean = "L3", see Enders, 2013):x_{ijk} - \bar{x}_{..k}where
\bar{x}_{.jk}is the averagexscore in Level-2 clusterjwithin Level-3 clusterkand\bar{x}_{..k}is the averagexscore in Level-3 clusterk.Level-2 (L2) predictor variables in three-level data can be centered at the grand mean (CGM) by specifying
type = "CGM":x_{.jk} - \bar{x}_{...}where
x_{.jk}is the predictor value of Level-2 clusterjwithin Level-3 clusterkand\bar{x}_{...}is the average Level-2 cluster score.L2 predictor variables are centered within cluster (CWC) by specifying
type = "CWC"(Default):x_{.jk} - \bar{x}_{..k}where
\bar{x}_{..k}is the averagexscore in Level-3 clusterk.Level-3 (L3) predictor variables in three-level data can only be centered at the grand mean:
x_{..k} - \bar{x}_{...}where
x_{..k}is the predictor value of Level-3 clusterkand\bar{x}_{...}is the average Level-3 cluster score. Note that the cluster membership variable needs to be specified when centering a L3 predictor variable in three-level data.
Value
Returns a numeric vector or data frame with the same length or same number of
rows as ... containing the centered variable(s).
Author(s)
Takuya Yanagida takuya.yanagida@univie.ac.at
References
Brincks, A. M., Enders, C. K., Llabre, M. M., Bulotsky-Shearer, R. J., Prado, G., & Feaster, D. J. (2017). Centering predictor variables in three-level contextual models. Multivariate Behavioral Research, 52(2), 149–163. https://doi.org/10.1080/00273171.2016.1256753
Chang, C.-N., & Kwok, O.-M. (2022) Partitioning Variance for a Within-Level Predictor in Multilevel Models. Structural Equation Modeling: A Multidisciplinary Journal. Advance online publication. https://doi.org/10.1080/10705511.2022.2051175
Enders, C. K. (2013). Centering predictors and contextual effects. In M. A. Scott, J. S. Simonoff, & B. D. Marx (Eds.), The Sage handbook of multilevel modeling (pp. 89-109). Sage. https://dx.doi.org/10.4135/9781446247600
Enders, C. K., & Tofighi, D. (2007). Centering predictor variables in cross-sectional multilevel models: A new look at an old issue. Psychological Methods, 12, 121-138. https://doi.org/10.1037/1082-989X.12.2.121
Rights, J. D., Preacher, K. J., & Cole, D. A. (2020). The danger of conflating level-specific effects of control variables when primary interest lies in level-2 effects. British Journal of Mathematical & Statistical Psychology, 73, 194-211. https://doi.org/10.1111/bmsp.12194
Yaremych, H. E., Preacher, K. J., & Hedeker, D. (2021). Centering categorical predictors in multilevel models: Best practices and interpretation. Psychological Methods. Advance online publication. https://doi.org/10.1037/met0000434
See Also
coding, cluster.scores, rec,
item.reverse, rwg.lindell, item.scores.
Examples
#----------------------------------------------------------------------------
# Predictor Variables in Single-Level Data
# Example 1a: Center predictor 'disp' at the grand mean
center(mtcars$disp)
# Example 1b: Alternative specification using the 'data' argument
center(disp, data = mtcars)
# Example 2a: Center predictors 'disp' and 'hp' at the grand mean and append to 'mtcars'
cbind(mtcars, center(mtcars[, c("disp", "hp")]))
# Example 2b: Alternative specification using the 'data' argument
center(disp, hp, data = mtcars)
# Example 3: Center predictor 'disp' at the value 3
center(disp, data = mtcars, value = 3)
# Example 4: Center predictors 'disp' and 'hp' and label with the suffix ".v"
center(disp, hp, data = mtcars, name = ".v")
#----------------------------------------------------------------------------
# Predictor Variables in Two-Level Data
# Load data set "Demo.twolevel" in the lavaan package
data("Demo.twolevel", package = "lavaan")
# Example 5a: Center L1 predictor 'y1' within cluster
center(Demo.twolevel$y1, cluster = Demo.twolevel$cluster)
# Example 5b: Alternative specification using the 'data' argument
center(y1, data = Demo.twolevel, cluster = "cluster")
# Example 6: Center L2 predictor 'w2' at the grand mean
center(w1, data = Demo.twolevel, cluster = "cluster")
# Example 6: Center L1 predictor 'y1' within cluster and L2 predictor 'w1' at the grand mean
center(y1, w1, data = Demo.twolevel, cluster = "cluster")
#----------------------------------------------------------------------------
# Predictor Variables in Three-Level Data
# Create arbitrary three-level data
Demo.threelevel <- data.frame(Demo.twolevel, cluster2 = Demo.twolevel$cluster,
cluster3 = rep(1:10, each = 250))
# Example 7a: Center L1 predictor 'y1' within L2 cluster
center(y1, data = Demo.threelevel, cluster = c("cluster3", "cluster2"))
# Example 7b: Center L1 predictor 'y1' within L3 cluster
center(y1, data = Demo.threelevel, cluster = c("cluster3", "cluster2"), cwc.mean = "L3")
# Example 7b: Center L1 predictor 'y1' within L2 cluster and L2 predictor 'w1' within L3 cluster
center(y1, w1, data = Demo.threelevel, cluster = c("cluster3", "cluster2"))