Single-Common-Factor Screen for Common Method Variance
Source:R/common_method_single_factor.R
common_method_single_factor.RdThis function implements Harman's single-factor test, the most widely used
(and weakest) screen for common method variance: fit a one-factor model to
all of the items by maximum likelihood and inspect how much of their
variance the common factor accounts for. The rationale is that if a single
method factor dominated the responses, one common factor would capture a
large share of the variance. A factor accounting for more than half of the
variance is the customary red flag (Podsakoff, MacKenzie, Lee, & Podsakoff,
2003). The screen is coarse and cannot by itself rule
method variance in or out; the marker-variable and latent method factor
approaches are stronger (see common_method_marker).
Arguments
- data
A
data.frameor numeric matrix of item responses. Supply this, a covariance matrixS, or a correlation matrixR(exactly one).- S
A symmetric covariance matrix among the items, when raw data are not available but the summary statistics a paper reports are. It is converted to a correlation matrix internally, so the test acts on the same scale-free quantity regardless of which input is supplied.
- R
A correlation matrix among the items, when raw data are not available.
Value
A data.frame (class dmar_tbl) with rows
variance_explained (the proportion of total variance the single
common factor accounts for) and n_items in the value
column.
Details
Harman's single-factor test (the proportion of variance explained by one common factor) is related to but distinct from the marker-variable technique. A marker variable (or common-method marker) is a variable chosen to be theoretically unrelated to the substantive constructs under study, so that any observed correlation between it and the substantive items is attributable to shared method rather than to a true relationship; it is used to estimate or partial out common method variance (Lindell & Whitney, 2001). The single-factor test uses no such marker, it asks only whether a single dimension dominates the item set, so it can flag a strong common factor but cannot identify whether that factor is method or substance.
The one-factor model is fit to the item correlation matrix by maximum
likelihood with factanal, and the statistic is the
proportion of total variance the common factor accounts for: the sum of the
squared standardized loadings divided by the number of items (equivalently,
the mean communality). Much of the applied literature computes the screen
from the largest eigenvalue of the correlation matrix, which describes the
first principal component, not a factor; the test is implemented factor
analytically here, in the psychometric tradition, because a principal
component absorbs unique as well as common variance and so overstates the
share a common factor accounts for. Correlations from raw data use
pairwise-complete observations. A supplied covariance matrix is first
standardized to a correlation matrix with cov2cor.
The one-factor model requires at least three items.
References
Harman, H. H. (1976). Modern factor analysis (3rd ed.). University of Chicago Press.
Lindell, M. K., & Whitney, D. J. (2001). Accounting for common method variance in cross-sectional research designs. Journal of Applied Psychology, 86(1), 114–121. doi:10.1037/0021-9010.86.1.114
Podsakoff, P. M., MacKenzie, S. B., Lee, J.-Y., & Podsakoff, N. P. (2003). Common method biases in behavioral research: A critical review of the literature and recommended remedies. Journal of Applied Psychology, 88(5), 879–903. doi:10.1037/0021-9010.88.5.879
See also
common_method_marker for the marker-variable
adjustment.
Other multivariate and latent variable methods:
average_variance_extracted(),
bifactor_indices(),
cfa_1(),
cfa_2(),
cfa_k(),
ci_eigenvalue(),
common_method_marker(),
dmacs(),
ecvi(),
htmt(),
irt_grm(),
irt_information(),
measurement_alignment(),
measurement_invariance(),
procrustes_phi(),
simple_structure()
Author
Ken Kelley kkelley@nd.edu
Examples
set.seed(113)
f <- rnorm(200)
d <- data.frame(
x1 = f + rnorm(200), x2 = f + rnorm(200), x3 = f + rnorm(200),
x4 = rnorm(200), x5 = rnorm(200), x6 = rnorm(200))
common_method_single_factor(d)
#> term value
#> variance_explained 0.239
#> n_items 6
# The same screen from the summary statistics a paper reports.
common_method_single_factor(S = cov(d))
#> term value
#> variance_explained 0.239
#> n_items 6